#pragma once #include #include namespace iflytop { using namespace std; template class LoopQueue { private: T *arr; int maxSize; int rear; int front; public: LoopQueue(/* args */) { maxSize = 1; rear = 0; front = 0; } ~LoopQueue() {} void initialize(int size) { arr = (T *)malloc(size * sizeof(T)); ZASSERT(arr != NULL); maxSize = size; } bool push(T *data) { if (isFull()) { return false; } memcpy(&arr[rear], data, sizeof(T)); rear = (rear + 1) % maxSize; return true; } bool pop(T *data) { if (isEmpty()) { return false; } memcpy(data, &arr[front], sizeof(T)); front = (front + 1) % maxSize; return true; } bool popMuti(T *data, int numdata) { if (numdata > numElements()) return false; for (int i = 0; i < numdata; i++) { pop(&data[i]); } return true; } bool getHeader(T *data) { if (isEmpty()) { return false; } memcpy(data, &arr[front], sizeof(T)); return true; } int size() { return maxSize; } int numElements() { return (rear + maxSize - front) % maxSize; } bool isEmpty() { return rear == front; } bool isFull() { return (rear + 1) % maxSize == front; } }; } // namespace iflytop