BluFedora Job System v1.0.0
This is a C++ job system library for use in game engines.
job::LockedQueue< T > Class Template Reference

#include <job_queue.hpp>

Public Types

using size_type = std::size_t
 

Public Member Functions

void Initialize (T *const memory_backing, const size_type capacity) noexcept
 
bool Push (const T &value)
 
bool Pop (T *const out_value)
 

Private Member Functions

size_type mask (const size_type raw_index) const noexcept
 
T * elementAt (const size_type raw_index) const noexcept
 

Private Attributes

std::mutex m_Lock
 
T * m_Data
 
size_type m_Capacity
 
size_type m_CapacityMask
 
size_type m_WriteIndex
 
size_type m_Size
 

Detailed Description

template<typename T>
class job::LockedQueue< T >

Definition at line 32 of file job_queue.hpp.

Member Typedef Documentation

◆ size_type

template<typename T >
using job::LockedQueue< T >::size_type = std::size_t

Definition at line 35 of file job_queue.hpp.

Member Function Documentation

◆ Initialize()

template<typename T >
void job::LockedQueue< T >::Initialize ( T *const  memory_backing,
const size_type  capacity 
)
inlinenoexcept

Definition at line 46 of file job_queue.hpp.

47 {
48 m_Data = memory_backing;
49 m_Capacity = capacity;
50 m_CapacityMask = capacity - 1;
51 m_WriteIndex = 0u;
52 m_Size = 0u;
53
54 JobAssert((m_Capacity & m_CapacityMask) == 0, "Capacity must be a power of 2.");
55 }
size_type m_Size
Definition: job_queue.hpp:43
size_type m_CapacityMask
Definition: job_queue.hpp:41
size_type m_Capacity
Definition: job_queue.hpp:40
size_type m_WriteIndex
Definition: job_queue.hpp:42
#define JobAssert(expr, msg)
Definition: job_api.hpp:32

References JobAssert, job::LockedQueue< T >::m_Capacity, job::LockedQueue< T >::m_CapacityMask, job::LockedQueue< T >::m_Data, job::LockedQueue< T >::m_Size, and job::LockedQueue< T >::m_WriteIndex.

◆ Push()

template<typename T >
bool job::LockedQueue< T >::Push ( const T &  value)
inline

Definition at line 57 of file job_queue.hpp.

58 {
59 const std::lock_guard<std::mutex> guard(m_Lock);
60 (void)guard;
61
62 if (m_Size == m_Capacity)
63 {
64 return false;
65 }
66
67 *elementAt(m_WriteIndex++) = value;
68 ++m_Size;
69
70 return true;
71 }
T * elementAt(const size_type raw_index) const noexcept
Definition: job_queue.hpp:97
std::mutex m_Lock
Definition: job_queue.hpp:38

References job::LockedQueue< T >::elementAt(), job::LockedQueue< T >::m_Capacity, job::LockedQueue< T >::m_Lock, job::LockedQueue< T >::m_Size, and job::LockedQueue< T >::m_WriteIndex.

◆ Pop()

template<typename T >
bool job::LockedQueue< T >::Pop ( T *const  out_value)
inline

Definition at line 73 of file job_queue.hpp.

74 {
75 JobAssert(out_value != nullptr, "`out_value` cannot be a nullptr.");
76
77 const std::lock_guard<std::mutex> guard(m_Lock);
78 (void)guard;
79
80 if (m_Size == 0u)
81 {
82 return false;
83 }
84
85 *out_value = *elementAt(m_WriteIndex - m_Size);
86 --m_Size;
87
88 return true;
89 }

References job::LockedQueue< T >::elementAt(), JobAssert, job::LockedQueue< T >::m_Lock, job::LockedQueue< T >::m_Size, and job::LockedQueue< T >::m_WriteIndex.

◆ mask()

template<typename T >
size_type job::LockedQueue< T >::mask ( const size_type  raw_index) const
inlineprivatenoexcept

Definition at line 92 of file job_queue.hpp.

93 {
94 return raw_index & m_CapacityMask;
95 }

References job::LockedQueue< T >::m_CapacityMask.

Referenced by job::LockedQueue< T >::elementAt().

◆ elementAt()

template<typename T >
T * job::LockedQueue< T >::elementAt ( const size_type  raw_index) const
inlineprivatenoexcept

Definition at line 97 of file job_queue.hpp.

98 {
99 return m_Data + mask(raw_index);
100 }
size_type mask(const size_type raw_index) const noexcept
Definition: job_queue.hpp:92

References job::LockedQueue< T >::m_Data, and job::LockedQueue< T >::mask().

Referenced by job::LockedQueue< T >::Pop(), and job::LockedQueue< T >::Push().

Member Data Documentation

◆ m_Lock

template<typename T >
std::mutex job::LockedQueue< T >::m_Lock
private

Definition at line 38 of file job_queue.hpp.

Referenced by job::LockedQueue< T >::Pop(), and job::LockedQueue< T >::Push().

◆ m_Data

template<typename T >
T* job::LockedQueue< T >::m_Data
private

◆ m_Capacity

template<typename T >
size_type job::LockedQueue< T >::m_Capacity
private

Definition at line 40 of file job_queue.hpp.

Referenced by job::LockedQueue< T >::Initialize(), and job::LockedQueue< T >::Push().

◆ m_CapacityMask

template<typename T >
size_type job::LockedQueue< T >::m_CapacityMask
private

Definition at line 41 of file job_queue.hpp.

Referenced by job::LockedQueue< T >::Initialize(), and job::LockedQueue< T >::mask().

◆ m_WriteIndex

template<typename T >
size_type job::LockedQueue< T >::m_WriteIndex
private

◆ m_Size

template<typename T >
size_type job::LockedQueue< T >::m_Size
private

The documentation for this class was generated from the following file: