Develop and Download Open Source Software

Browse Subversion Repository

Contents of /common/PointerRingBuffer.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 205 - (show annotations) (download) (as text)
Wed Jan 23 21:18:50 2008 UTC (16 years, 2 months ago) by satofumi
File MIME type: text/x-chdr
File size: 2079 byte(s)
gui/ConsolePanelComponent.cpp is implemented.

1 #ifndef POINTER_RING_BUFFER_H
2 #define POINTER_RING_BUFFER_H
3
4 /*!
5 \file
6 \brief ポインタ用のリングバッファ
7
8 配列領域をポインタで管理し、メモリ領域の取得と解放の回数を減らすのに用いる
9
10 \author Satofumi KAMIMURA
11
12 $Id$
13 */
14
15 #include <deque>
16
17
18 namespace {
19 /*!
20 \brief ポインタ用のリングバッファ
21 */
22 template<class T> class PointerRingBuffer {
23 PointerRingBuffer(const PointerRingBuffer& rhs);
24 PointerRingBuffer& operator = (const PointerRingBuffer& rhs);
25
26 std::deque<T> ring_buffer;
27 size_t filled;
28
29 public:
30 PointerRingBuffer(void) : filled(0) {
31 }
32
33 ~PointerRingBuffer(void) {
34 }
35
36 /*!
37 \brief 管理しているポインタ数を返す
38
39 \return 管理しているポインタ数
40 */
41 size_t capacity(void) {
42 return ring_buffer.size();
43 }
44
45 /*!
46 \brief 中身の有効なポインタ数を返す
47
48 \return 中身の有効なポインタ数
49 */
50 size_t size(void) {
51 return filled;
52 }
53
54 /*!
55 \brief 先頭ポインタを返す
56
57 \return 先頭ポインタ
58 */
59 T front(void) {
60 return ring_buffer.front();
61 }
62
63 /*!
64 \brief ポインタの追加
65
66 \param buffer [i] ポインタの追加
67 */
68 void push_buffer(T buffer) {
69 ring_buffer.push_back(buffer);
70 }
71
72 /*!
73 \brief ポインタの取得
74
75 取得したポインタには、有効なデータを代入することが求められている
76
77 \return ポインタ
78 */
79 T get_buffer(void) {
80 T ret = ring_buffer[filled++];
81 return ret;
82 }
83
84 /*!
85 \brief 中身の有効なポインタを1つ減らす
86
87 get_buffer() 操作の取り消しを行う
88 */
89 void revert_buffer(void) {
90 --filled;
91 }
92
93 /*!
94 \brief 先頭ポインタを末尾に移動させる
95 */
96 void rotate(void) {
97 T first = front();
98 ring_buffer.pop_front();
99 --filled;
100
101 ring_buffer.push_back(first);
102 }
103
104 /*!
105 \brief 中身の有効なポインタ数をゼロにする
106
107 \attention ポインタ領域の解放は行わない
108 */
109 void clear(void) {
110 filled = 0;
111 }
112
113 T at(size_t index) {
114 return ring_buffer.at(index);
115 }
116 };
117 };
118
119 #endif /* !POINTER_RING_BUFFER_H */

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26