19 #ifndef PDB_CIRCULAR_BUFFER_CC
20 #define PDB_CIRCULAR_BUFFER_CC
31 this->maxArraySize = bufferSize + 1;
32 this->logger = logger;
44 this->array =
new T[this->maxArraySize];
45 if (this->array ==
nullptr) {
46 std::cout <<
"PDBCircularBuffer: Out of Memory in Heap.\n";
47 this->logger->writeLn(
"PDBCircularBuffer: Out of Memory in Heap.");
51 for (i = 0; i < this->maxArraySize; i++) {
53 this->array[i] =
nullptr;
65 this->logger->writeLn(
66 "PDBCircularBuffer<T>: the buffer is not full, adding the element to tail...");
67 this->arrayTail = (this->arrayTail + 1) % this->maxArraySize;
68 this->array[this->arrayTail] = elem;
75 if (this->isEmpty()) {
76 this->logger->writeLn(
"PDBCircularBuffer: array is empty.");
77 throw std::out_of_range(
"PDBCircularBuffer<>::popFromHead(): empty buffer");
79 this->arrayHead = (this->arrayHead + 1) % this->maxArraySize;
80 T elem = this->array[this->arrayHead];
86 return (this->arrayHead == (this->arrayTail + 1) % this->maxArraySize);
91 return (this->arrayHead == this->arrayTail);
96 return (this->arrayTail - this->arrayHead + this->maxArraySize) % this->maxArraySize;
PDBCircularBuffer(unsigned int bufferSize, pdb::PDBLoggerPtr logger)
std::shared_ptr< PDBLogger > PDBLoggerPtr