윈도우 프로그램/C++ 큐 brittledia 2016. 2. 12. 12:16 해더파일 #pragma once typedef struct{ unsigned int dst; unsigned int src; } lut; typedef struct { lut* buf; int head; int tail; int buf_size; int fifo_size; //not used fifo mem size } fifo_t; class fifo{ private: fifo_t* fifo_i; public: fifo(); ~fifo(); bool initial(int size); int pop(lut* buf, int num); int push(lut* buf, int num); bool pop(lut* buf); bool push(lut buf); int size(); //return used fifo mem size inline bool full(); inline bool empty(); }; lut LUT(int dst, int src); cpp파일 #include <stdio.h> #include "queue.h" fifo::fifo() { fifo_i = new fifo_t; fifo_i->head = 0; fifo_i->tail = 0; fifo_i->buf = NULL; fifo_i->buf_size = 0; fifo_i->fifo_size = 0; } fifo::~fifo() { if (fifo_i->buf != NULL) delete[] fifo_i->buf; delete fifo_i; } bool fifo::initial(int size) { fifo_i->buf_size = size; fifo_i->fifo_size = size; fifo_i->buf = new lut[size]; if (fifo_i->buf == NULL) return false; else return true; } int fifo::push(lut* buf, int num) { for (int i = 0; i < num; i++) { if (full()) return i; else { if (fifo_i->head == fifo_i->buf_size) fifo_i->head = 0; fifo_i->buf[fifo_i->head] = *(buf++); fifo_i->head++; fifo_i->fifo_size--; } } return num; } int fifo::pop(lut* buf, int num) { for (int i = 0; i < num; i++) { if (empty()) return i; else { if (fifo_i->tail == fifo_i->buf_size) fifo_i->tail = 0; *(buf++) = fifo_i->buf[fifo_i->tail]; fifo_i->tail++; fifo_i->fifo_size++; } } return num; } bool fifo::push(lut buf) { if (full()) return false; else { if (fifo_i->head == fifo_i->buf_size) fifo_i->head = 0; fifo_i->buf[fifo_i->head] = buf; fifo_i->head++; fifo_i->fifo_size--; } return true; } bool fifo::pop(lut* buf) { if (empty()) return false; else { if (fifo_i->tail == fifo_i->buf_size) fifo_i->tail = 0; *(buf) = fifo_i->buf[fifo_i->tail]; fifo_i->tail++; fifo_i->fifo_size++; return true; } } int fifo::size() //return used buff mem size { return fifo_i->buf_size - fifo_i->fifo_size; } inline bool fifo::full() { if (fifo_i->fifo_size == 0) return true; else return false; } inline bool fifo::empty() { if (fifo_i->fifo_size == fifo_i->buf_size) return true; else return false; } lut LUT(int dst, int src) { lut ret; ret.dst = dst; ret.src = src; return ret; } 공유하기 게시글 관리 구독하기오륀쥐 '윈도우 프로그램/C++' Related Articles OpenCV 3.2 컴파일 하기 시간측정 핵사파일 변환 MFC 리소스로 비트맵 뿌리기