Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

RingBuf.h

Go to the documentation of this file.
00001 #ifndef VR_BASE_RINGBUF_H
00002 #define VR_BASE_RINGBUF_H
00003 #include "Env.h"
00004 #include <vector>
00005 /** @file RingBuf.h リングバッファ(FIFOを実現するための環状バッファ)クラスの定義*/
00006 namespace Spr {
00007 
00008 
00009 template <class T>
00010 class UTRingBuffer:private std::vector<T>{
00011 public:
00012     typedef std::vector<T> container;
00013     typedef std::vector<T> base_class;
00014 protected:
00015     int cur;
00016 public:
00017     T zero;
00018     UTRingBuffer(int sz=0){
00019         cur = 0;
00020         size(sz);
00021     }
00022     int size() const{ return container::size(); }
00023     void size(int sz){
00024         container::resize(sz);
00025         if (cur >= size()) cur = 0;
00026     }
00027     void clear(){
00028         for(int i=0; i<size(); i++) begin()[i] = zero;
00029     }
00030     void inc(){
00031         cur ++;
00032         if (cur>=size()) cur = 0;
00033     }
00034     void dec(){
00035         cur --;
00036         if (cur<0) cur = size()-1;
00037     }
00038     T& operator[] (int i){
00039         i += cur + size();
00040         i = i % size();
00041         return begin()[i];
00042     }
00043 };
00044 
00045 }   //  namespace Spr
00046 
00047 #endif

Generated on Sun Apr 16 02:07:11 2006 for Springhead by  doxygen 1.4.1