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 35 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 38 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 49 of file job_queue.hpp.

50 {
51 m_Data = memory_backing;
52 m_Capacity = capacity;
53 m_CapacityMask = capacity - 1;
54 m_WriteIndex = 0u;
55 m_Size = 0u;
56
57 JobAssert((m_Capacity & m_CapacityMask) == 0, "Capacity must be a power of 2.");
58 }
size_type m_Capacity
Definition: job_queue.hpp:43
size_type m_WriteIndex
Definition: job_queue.hpp:45
size_type m_CapacityMask
Definition: job_queue.hpp:44
size_type m_Size
Definition: job_queue.hpp:46
#define JobAssert(expr, msg)
Definition: job_assert.hpp:27

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 60 of file job_queue.hpp.

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

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.

Referenced by Job::TaskSubmit().

◆ Pop()

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

Definition at line 76 of file job_queue.hpp.

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

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 95 of file job_queue.hpp.

96 {
97 return raw_index & m_CapacityMask;
98 }

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 100 of file job_queue.hpp.

101 {
102 return m_Data + mask(raw_index);
103 }
size_type mask(const size_type raw_index) const noexcept
Definition: job_queue.hpp:95

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 41 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 43 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 44 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: