WIL説明書(C++)  3.0.0
FvBuffer.h
[詳解]
1 // $Revision: 1.2 $
2 /*
3  @file FvBuffer.h
4  @brief CFvBuffer template class
5  @author FAST Corporation
6 */
7 
8 #ifndef _FVBUFFER_H_INCLUDED_
9 #define _FVBUFFER_H_INCLUDED_
10 
11 #include "FvMacros.h"
12 #include "FvDefs.h"
13 #include "FvDebug.h"
14 #include "FvErrors.h"
15 #include "FvObject.h"
16 
17 #include "MultiData/FvMultiData.h"
19 
20 #pragma pack(push,_FVCL_PACKING)
21 
22 namespace FVCL
23 {
24 
25 // /////////////////////////////////////////////////////////////////
26 // DEFINE
27 
28 // /////////////////////////////////////////////////////////////////
29 // TYPEDEF
30 
31 // /////////////////////////////////////////////////////////////////
32 // CLASS
33 template<class TYPE> class CFvBuffer : public CFvMultiData<TYPE>
34 {
35 public:
36  // DEFINE/TYPEDEF
37  typedef TYPE* pointer;
38  typedef const TYPE* const_pointer;
39  typedef TYPE& reference;
40  typedef const TYPE& const_reference;
41  typedef UINT size_type;
42 
43 public:
44  enum { DataID = 30 };
45  enum
46  {
49  };
50 
51 public:
52  // ===================================================================
53  CFvBuffer() : CFvMultiData<TYPE>()
54  {
55  size_type uiInitial = DefaultInitial;
56  size_type uiIncrease = DefaultIncrease;
57  this->m_alloc = static_cast<CFvAllocator<TYPE>*>(new CFvBufferAllocator<TYPE>( uiInitial, uiIncrease ));
58  if( this->m_alloc == NULL )
60  }
61 
62  // ===================================================================
63  CFvBuffer( size_type uiInitial ) : CFvMultiData<TYPE>()
64  {
65  size_type uiIncrease = DefaultIncrease;
66  this->m_alloc = static_cast<CFvAllocator<TYPE>*>(new CFvBufferAllocator<TYPE>( uiInitial, uiIncrease ));
67  if( this->m_alloc == NULL )
69  }
70 
71  // ===================================================================
72  CFvBuffer( size_type uiInitial, size_type uiIncrease ) : CFvMultiData<TYPE>()
73  {
74  this->m_alloc = static_cast<CFvAllocator<TYPE>*>(new CFvBufferAllocator<TYPE>( uiInitial, uiIncrease ));
75  if( this->m_alloc == NULL )
77  }
78 
79  // ===================================================================
80  CFvBuffer( TYPE* adrs, size_type count ) : CFvMultiData<TYPE>()
81  {
82  this->m_alloc = static_cast<CFvAllocator<TYPE>*>(new CFvBufferAllocator<TYPE>( DefaultInitial, DefaultIncrease, adrs, count ));
83  if( this->m_alloc == NULL )
85  }
86 
87  // ===================================================================
88  CFvBuffer( TYPE* adrs, size_type count, bool is_attach ) : CFvMultiData<TYPE>()
89  {
90  this->m_alloc = static_cast<CFvAllocator<TYPE>*>(new CFvBufferAllocator<TYPE>( DefaultInitial, DefaultIncrease, adrs, count, is_attach ));
91  if( this->m_alloc == NULL )
93  }
94 
95  // ===================================================================
96  CFvBuffer( const CFvBuffer<TYPE>& object ) : CFvMultiData<TYPE>()
97  {
98  size_type uiInitial = object.m_alloc->GetCapacity();
99  size_type uiIncrease = object.m_alloc->GetIncrease();
100 
101  this->m_alloc = static_cast<CFvAllocator<TYPE>*>(new CFvBufferAllocator<TYPE>( uiInitial, uiIncrease ));
102  if( this->m_alloc == NULL )
105  }
106 
107  // ===================================================================
108  virtual ~CFvBuffer()
109  {
110  if( this->m_alloc != NULL )
111  delete this->m_alloc;
112  }
113 
114  // ===================================================================
115  virtual INT GetDataID() const
116  {
118  }
119 
120  // ===================================================================
121  virtual bool GetPointer( INT id, void** val ) const
122  {
123  if( CFvBuffer<TYPE>::GetDataID() != id )
124  return false;
125  *val = (void*)this;
126  return true;
127  }
128 
129 public:
130  // ===================================================================
132  {
134  return *this;
135  }
136 
137  // ===================================================================
138  virtual bool operator == ( const CFvBuffer<TYPE>& ope ) const
139  {
140  const CFvBufferAllocator<TYPE>* ope1 = static_cast<const CFvBufferAllocator<TYPE>*>(this->m_alloc);
141  const CFvBufferAllocator<TYPE>* ope2 = static_cast<const CFvBufferAllocator<TYPE>*>(ope.m_alloc);
142  if (ope1->GetCount() != ope2->GetCount()) return false;
143  for(size_type i=0 ; i<ope1->GetCount() ; i++)
144  if (0 != memcmp(ope1->GetBuffer(i), ope2->GetBuffer(i), sizeof(TYPE))) return false;
145  return true;
146  }
147 
148  // ===================================================================
149  virtual bool operator != ( const CFvBuffer<TYPE>& ope ) const
150  {
151  return !(operator == (ope));
152  }
153 
154  // ===================================================================
156  {
157  if (src.IsAttach())
158  return Attach(src);
159 
160  this->SetBuffer(src.GetAddress(), src.size(), false); // (!) allow free
161  src.IsAttach(true);
162  src.clear();
163  return *this;
164  }
165 
166  // ===================================================================
168  {
169  this->SetBuffer(src.GetAddress(), src.size(), true); // (!) deny free
170  return *this;
171  }
172 
173  // ===================================================================
174  virtual bool SetBuffer( pointer adrs, size_type count )
175  {
176  return static_cast<CFvBufferAllocator<TYPE>*>(this->m_alloc)->SetBuffer(adrs, count);
177  }
178 
179  // ===================================================================
180  virtual bool SetBuffer( pointer adrs, size_type count, bool is_attach )
181  {
182  return static_cast<CFvBufferAllocator<TYPE>*>(this->m_alloc)->SetBuffer(adrs, count, is_attach);
183  }
184 
185  // ===================================================================
186  virtual pointer GetAddress( size_type uiIndex = 0 ) const
187  {
188  return static_cast<CFvBufferAllocator<TYPE>*>(this->m_alloc)->GetBuffer(uiIndex);
189  }
190 
191  // ===================================================================
192  virtual void IsAttach( bool value )
193  {
194  static_cast<CFvBufferAllocator<TYPE>*>(this->m_alloc)->IsAttach(value);
195  }
196 
197  // ===================================================================
198  virtual bool IsAttach() const
199  {
200  return static_cast<CFvBufferAllocator<TYPE>*>(this->m_alloc)->IsAttach();
201  }
202 
203  // ===================================================================
204  virtual void Reset() const
205  {
206  return static_cast<CFvBufferAllocator<TYPE>*>(this->m_alloc)->Reset();
207  }
208 
209 protected:
210  // OBJECT
211 };
212 
213 } // FVCL
214 
215 #pragma pack(pop)
216 
217 #endif // _FVBUFFER_H_INCLUDED_
CFvBuffer(const CFvBuffer< TYPE > &object)
コピーコンストラクタ
Definition: FvBuffer.h:96
領域の増分(要素数)
Definition: FvBuffer.h:48
領域の初期容量(要素数)
Definition: FvBuffer.h:47
virtual void clear()
配列の開放
Definition: FvMultiData.h:142
virtual pointer GetBuffer(size_type uiIndex=0) const
配列の要素へのアドレス取得
Definition: FvBufferAllocator.h:121
virtual INT GetDataID() const
データIDの取得
Definition: FvBuffer.h:115
CFvBuffer(size_type uiInitial, size_type uiIncrease)
初期値指定コンストラクタ
Definition: FvBuffer.h:72
配列確保テンプレートクラスの基本クラス
Definition: FvAllocator.h:34
FVCLのネームスペース
Definition: EVCbasicDeclare.txt:9
領域確保不可例外クラス
Definition: FveBadAllocException.h:18
virtual bool operator!=(const CFvBuffer< TYPE > &ope) const
比較オペレータ (!=)
Definition: FvBuffer.h:149
virtual void IsAttach(bool value)
アタッチ属性の設定
Definition: FvBuffer.h:192
virtual bool SetBuffer(pointer adrs, size_type count)
配列の設定
Definition: FvBuffer.h:174
const INT FAILED_TO_ALLOCATE
メモリの確保に失敗しました。
Definition: FvErrors.h:15
virtual bool SetBuffer(pointer adrs, size_type count, bool is_attach)
配列の設定
Definition: FvBuffer.h:180
配列確保テンプレートクラス(ポインタ型)
virtual pointer GetAddress(size_type uiIndex=0) const
配列のアドレスの取得
Definition: FvBuffer.h:186
int INT
整数型(32ビット)
Definition: FvDefs.h:36
CFvBuffer()
コンストラクタ
Definition: FvBuffer.h:53
virtual CFvBuffer< TYPE > & MoveFrom(CFvBuffer< TYPE > &src)
配列の移動
Definition: FvBuffer.h:155
virtual bool operator==(const CFvBuffer< TYPE > &ope) const
比較オペレータ (==)
Definition: FvBuffer.h:138
CFvBuffer(TYPE *adrs, size_type count, bool is_attach)
初期値指定コンストラクタ
Definition: FvBuffer.h:88
配列テンプレートクラスの基本クラス
CFvBuffer(size_type uiInitial)
初期値指定コンストラクタ
Definition: FvBuffer.h:63
マクロ定義
virtual ~CFvBuffer()
デストラクタ
Definition: FvBuffer.h:108
virtual bool IsAttach() const
アタッチ属性の取得
Definition: FvBuffer.h:198
CFvAllocator< TYPE > * m_alloc
アロケータクラスのオブジェクトへのポインタ
Definition: FvMultiData.h:291
CFvBuffer(TYPE *adrs, size_type count)
初期値指定コンストラクタ
Definition: FvBuffer.h:80
virtual CFvBuffer< TYPE > & operator=(const CFvBuffer< TYPE > &ope)
代入オペレータ (=)
Definition: FvBuffer.h:131
エラーコード定義
virtual CFvBuffer< TYPE > & Attach(const CFvBuffer< TYPE > &src)
アタッチ
Definition: FvBuffer.h:167
配列テンプレートクラス(ポインタ型)のデータID
Definition: FvBuffer.h:44
virtual size_type GetCount() const
配列の要素数の取得
Definition: FvAllocator.h:69
unsigned int UINT
整数型(32ビット)[符号なし]
Definition: FvDefs.h:37
配列テンプレートクラスの基本クラス
Definition: FvMultiData.h:36
CFvObject クラスのインターフェース
配列テンプレートクラス(ポインタ型)
Definition: FvBuffer.h:33
virtual void Reset() const
配列のリセット
Definition: FvBuffer.h:204
virtual CFvMultiData< TYPE > & operator=(const CFvMultiData< TYPE > &ope)
代入オペレータ(=)
Definition: FvMultiData.h:269
変数型と定数の定義
デバッグ用関数のインターフェース
virtual bool GetPointer(INT id, void **val) const
インスタンスのthisポインタの取得
Definition: FvBuffer.h:121
virtual size_type size() const
配列の要素数の取得
Definition: FvMultiData.h:226
配列確保テンプレートクラス(ポインタ型)
Definition: FvBufferAllocator.h:34

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2023年11月02日(木) 10時12分53秒 for WIL説明書(C++) by doxygen 1.8.11