趣味で作ってるロボット用ソフトウェア
 All Classes Files Functions Enumerations Enumerator Friends Pages
Ring_buffer.hpp
Go to the documentation of this file.
1 #ifndef HRK_RING_BUFFER_HPP
2 #define HRK_RING_BUFFER_HPP
3 
9 #include <cstddef>
10 #include <deque>
11 
12 
13 namespace hrk
14 {
16  template <class T>
18  {
19  public:
20  Ring_buffer(void)
21  {
22  }
23 
24 
26  size_t size(void) const
27  {
28  return ring_buffer_.size();
29  }
30 
31 
38  bool empty(void) const
39  {
40  return ring_buffer_.empty();
41  }
42 
43 
52  size_t push(const T* data, size_t size)
53  {
54  const T* last_p = data + size;
55  ring_buffer_.insert(ring_buffer_.end(), data, last_p);
56  return size;
57  }
58 
59 
68  size_t pop(T* data, size_t size)
69  {
70  size_t n = std::min(size, ring_buffer_.size());
71  std::copy(ring_buffer_.begin(), ring_buffer_.begin() + n, data);
72  ring_buffer_.erase(ring_buffer_.begin(), ring_buffer_.begin() + n);
73  return n;
74  }
75 
76 
82  void ungetc(const T ch)
83  {
84  ring_buffer_.push_front(ch);
85  }
86 
87 
89  void clear(void)
90  {
91  ring_buffer_.clear();
92  }
93 
94 
95  private:
96  Ring_buffer(const Ring_buffer& rhs);
97  Ring_buffer& operator = (const Ring_buffer& rhs);
98 
99  std::deque<T> ring_buffer_;
100  };
101 }
102 
103 #endif
bool empty(void) const
バッファが空か
Definition: Ring_buffer.hpp:38
リングバッファ
Definition: Ring_buffer.hpp:17
size_t push(const T *data, size_t size)
データの格納
Definition: Ring_buffer.hpp:52
void ungetc(const T ch)
データの書き戻し
Definition: Ring_buffer.hpp:82
size_t size(void) const
バッファサイズの取得
Definition: Ring_buffer.hpp:26
size_t pop(T *data, size_t size)
データの取り出し
Definition: Ring_buffer.hpp:68
void clear(void)
格納データのクリア
Definition: Ring_buffer.hpp:89