VulkanRaytracingCycles 0.0.0
Cycles Render Engine With VulkanRaytracingShaderModules. ( Experiment , in progress)
front::bonqueue< T, N > Class Template Reference

#include <SignalVk.h>

Public Member Functions

void reset ()
 
void push (T val)
 
nip ()
 

Public Attributes

std::queue< T > queue_
 
uint32_t consume = 0
 
uint32_t produce = 0
 

Detailed Description

template<typename T, size_t N>
class front::bonqueue< T, N >

Definition at line 20 of file SignalVk.h.

Member Function Documentation

◆ nip()

template<typename T , size_t N>
T front::bonqueue< T, N >::nip ( )
inline

uint32_t p = produce.load(); uint32_t c = consume.load();

Definition at line 71 of file SignalVk.h.

71 {
72
73 std::unique_lock<std::mutex> lk(guard_);
74
75 sig_push.wait(lk, [this] {
78
79 return !queue_.empty();
80 });
81
82 T ret = std::move(queue_.front());
83 queue_.pop();
84 if (ret != -1)InterlockedExchangeAdd((long*)&consume, 1);
85 sig_pop.notify_all();
86
87 return ret;
88 };
std::queue< T > queue_
Definition: SignalVk.h:29
uint32_t consume
Definition: SignalVk.h:30

◆ push()

template<typename T , size_t N>
void front::bonqueue< T, N >::push ( val)
inline

static std::mutex guard_; static std::atomic_uint sigs = 0;

{0}

log_warning("notify ============== = > notify signal not_full BonQueue Over limit. %zu \n", size);

uint32_t nums = sigs.fetch_add(1);

Definition at line 43 of file SignalVk.h.

43 {
46 std::unique_lock<std::mutex> lk(guard_);
47 sig_pop.wait(lk, [this] {
48 size_t size = queue_.size();
49
50 if (size > N) {
52 sig_push.notify_all();
53 return false;
54 }
55 return true;
56 });
57
58 queue_.push(std::move(val));
59 if (val != -1)InterlockedExchangeAdd((long*)&produce, 1);
60
61
62 //std::this_thread::sleep_for(std::chrono::nanoseconds(10));
63
64 sig_push.notify_one();
65
67
68
69 }
uint32_t produce
Definition: SignalVk.h:31

◆ reset()

template<typename T , size_t N>
void front::bonqueue< T, N >::reset ( )
inline

Definition at line 33 of file SignalVk.h.

33 {
34 consume = 0;
35 produce = 0;
36 while (queue_.size()) {
37 T ret = std::move(queue_.front());
38 log_warning(" bonqueue reset:: last of buds. [%d] \n ", (int)ret);
39 queue_.pop();
40 }
41 };
#define log_warning(...)
Definition: log.hpp:35

Member Data Documentation

◆ consume

template<typename T , size_t N>
uint32_t front::bonqueue< T, N >::consume = 0

Definition at line 30 of file SignalVk.h.

◆ produce

template<typename T , size_t N>
uint32_t front::bonqueue< T, N >::produce = 0

Definition at line 31 of file SignalVk.h.

◆ queue_

template<typename T , size_t N>
std::queue<T> front::bonqueue< T, N >::queue_

Definition at line 29 of file SignalVk.h.


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