TNB Library
TnbAttributedVector.h
[詳解]
1#pragma once
17#include "TnbVector.h"
18
19
20
21//TNB Library
22namespace TNB
23{
24
25
26
52template<typename TYP, typename ATT = DWORD>
53class CAttributedVectorT : public CVectorT<TYP>
54{
55 DEFSUPER(CVectorT<TYP>);
56public:
57
59 CAttributedVectorT(void) : _super()
60 {
61 }
62
67 CAttributedVectorT(const CAttributedVectorT& other) : _super(other), m_vAttr(other.m_vAttr)
68 {
69 }
70
72 virtual ~CAttributedVectorT(void)
73 {
74 }
75
82 {
83 _super::operator=(other);
84 m_vAttr = other.m_vAttr;
85 return *this;
86 }
87
96 {
97 _super::operator+=(other);
98 m_vAttr += other.m_vAttr;
99 return *this;
100 }
101
111 {
113 CVectorT<TYP>& v1 = av;
114 const CVectorT<TYP>& v2 = *this;
115 v1 = v2 + other;
116 av.m_vAttr = m_vAttr + other.m_vAttr;
117 return av;
118 }
119
124 virtual const CVectorT<TYP>& Refer(void) const
125 {
126 return *this;
127 }
128
137 virtual bool Remove(INDEX index)
138 {
139 return _super::Remove(index) && m_vAttr.Remove(index);
140 }
141
150 virtual size_t SetElements(size_t size, const TYP* P = NULL)
151 {
152 size_t r = _super::SetElements(size, P);
153 m_vAttr.RemoveAll();
154 m_vAttr.SetSize(_super::GetSize());
155 return r;
156 }
157
167 virtual bool Set(INDEX index, const TYP& t)
168 {
169 return Set(index, t, 0);
170 }
171
179 virtual bool SetEx(INDEX index, const TYP& t)
180 {
181 return SetEx(index, t, 0);
182 }
183
189 virtual bool RemoveAll(void)
190 {
191 return _super::RemoveAll() && m_vAttr.RemoveAll();
192 }
193
201 virtual void Swap(INDEX index1, INDEX index2)
202 {
203 _super::Swap(index1, index2);
204 m_vAttr.Swap(index1, index2);
205 }
206
216 INDEX Add(const TYP& t, const ATT& attribute)
217 {
218 INDEX r1 = _super::Add(t);
219 INDEX r2 = m_vAttr.Add(attribute);
220 if ( IsInvalid(r1) || IsInvalid(r2) )
221 {
222 return INVALID_INDEX;
223 }
224 ASSERTLIB( r1 == r2 );
225 return r1;
226 }
227
235 INDEX AddEx(const TYP& t, const ATT& attribute)
236 {
237 EXCLUSIVE(this);
238 return Add(t, attribute);
239 }
240
251 bool Set(INDEX index, const TYP& t, const ATT& attribute)
252 {
253 return _super::Set(index, t) && m_vAttr.Set(index, attribute);
254 }
255
264 bool SetEx(INDEX index, const TYP& t, const ATT& attribute)
265 {
266 EXCLUSIVE(this);
267 return Set(index, t, attribute);
268 }
269
276 ATT GetAttribute(INDEX index) const
277 {
278 EXCLUSIVE(this);
279 return m_vAttr.Get(index);
280 }
281
289 bool SetAttribute(INDEX index, const ATT& attribute)
290 {
291 return m_vAttr.SetEx(index, attribute);
292 }
293
303 bool Insert(INDEX index, const TYP& t, const ATT& attribute = ATT())
304 {
305 EXCLUSIVE(this);
306 return _super::Insert(inex, t) && m_vAttr.Insert(index, attribute);
307 }
308
317 virtual bool SetSize(size_t size)
318 {
319 return _super::SetSize(size) && m_vAttr.SetSize(size);
320 }
321
328 virtual void Serialize(ISerializer& _sr) const
329 {
330 _super::Serialize(_sr);
331 _sr << m_vAttr;
332 }
333
340 virtual void Deserialize(const IDeserializer& ds)
341 {
342 _super::Deserialize(ds);
343 ds >> m_vAttr;
344 }
345
346private:
347 CVectorT<ATT> m_vAttr;
348};
349
350
351
352}; // TNB
配列型情報管理関係のヘッダ
配列型情報管理テンプレート
bool Insert(INDEX index, const TYP &t, const ATT &attribute=ATT())
[追加] 要素一つ挿入.
virtual void Swap(INDEX index1, INDEX index2)
[設定] 要素の入れ替え
INDEX Add(const TYP &t, const ATT &attribute)
[追加] 要素一つ追加
bool Set(INDEX index, const TYP &t, const ATT &attribute)
[設定] 要素の設定
virtual void Deserialize(const IDeserializer &ds)
[処理] デシリアライズ
virtual ~CAttributedVectorT(void)
デストラクタ
virtual bool Remove(INDEX index)
[削除] 要素一つ削除
ATT GetAttribute(INDEX index) const
[取得] 要素の属性値、取得
CAttributedVectorT & operator=(const CAttributedVectorT &other)
[代入] コピーオペレータ
CAttributedVectorT operator+(const CAttributedVectorT &other) const
[作成] 連結
virtual bool SetSize(size_t size)
[操作] サイズ指定
virtual bool RemoveAll(void)
[削除] 全要素削除
INDEX AddEx(const TYP &t, const ATT &attribute)
[追加] 要素一つ追加
CAttributedVectorT(void)
コンストラクタ
virtual void Serialize(ISerializer &_sr) const
[処理] シリアライズ
CAttributedVectorT(const CAttributedVectorT &other)
コピーコンストラクタ
bool SetEx(INDEX index, const TYP &t, const ATT &attribute)
[設定] 要素の設定
virtual const CVectorT< TYP > & Refer(void) const
[取得] データ参照取得.
bool SetAttribute(INDEX index, const ATT &attribute)
[設定] 要素の属性値、設定
virtual bool SetEx(INDEX index, const TYP &t)
[設定] 要素の設定.
virtual bool Set(INDEX index, const TYP &t)
[設定] 要素の設定.
virtual size_t SetElements(size_t size, const TYP *P=NULL)
[設定] 複数要素設定.
CAttributedVectorT & operator+=(const CAttributedVectorT &other)
[追加] 追加オペレータ.
配列型情報管理テンプレート
Definition: TnbVector.h:75
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
Definition: TnbSync.h:788
void Swap(T &t1, T &t2)
[変換] スワッパー.
Definition: TnbDef.h:963
TNB Library
Definition: TnbDoxyTitle.txt:2
デシリアライザーインターフェースクラス.
シリアライザーインターフェースクラス.