TNB Library
TnbStack.h
[詳解]
1#pragma once
16#include "TnbQueue.h"
17
18
19
20//TNB Library
21namespace TNB
22{
23
24
25
57template<typename TYP>
58class CStackT : public CVectorT<TYP> , public IQueueT<TYP>
59{
60 DEFSUPER(CVectorT<TYP>);
61public:
62
69 explicit CStackT(size_t size = 0) : _super(size)
70 {
71 }
72
74 virtual ~CStackT(void)
75 {
76 }
77
86 virtual size_t AddElements(size_t size, const TYP* P = NULL)
87 {
88 return _super::AddElements(size, P);
89 }
90
99 virtual INDEX Add(const TYP& t)
100 {
101 return _super::Add(t);
102 }
103
110 virtual TYP Take(void)
111 {
112 EXCLUSIVE(this);
113 size_t l = GetSize();
114 if ( l == 0 )
115 {
116 throw CEmptyException();
117 }
118 TYP t = _super::Get(l - 1);
119 Remove(l - 1);
120 return t;
121 }
122
131 virtual size_t TakeElements(size_t size, TYP* P = NULL)
132 {
133 EXCLUSIVE(this);
134 size_t l = GetSize();
135 if ( l == 0 || size > l )
136 {
137 return INVALID_SIZE;
138 }
139 l--;
140 if ( P != NULL )
141 {
142 for ( INDEX i = 0; i < size; i++ )
143 {
144 *P++ = _super::At(l - i);
145 }
146 }
147 loop ( i, size )
148 {
149 _super::Remove(l - i);
150 }
151 return size;
152 }
153
154private:
155 friend class CStackTest;
156};
157
158
159
160}; // TNB
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
キュー型情報管理関係のヘッダ
取得要素(空き)無し例外
Definition: TnbException.h:107
スタック型情報管理テンプレート
Definition: TnbStack.h:59
CStackT(size_t size=0)
コンストラクタ
Definition: TnbStack.h:69
virtual ~CStackT(void)
デストラクタ
Definition: TnbStack.h:74
virtual size_t TakeElements(size_t size, TYP *P=NULL)
[取得] 複数要素取り出し
Definition: TnbStack.h:131
virtual size_t AddElements(size_t size, const TYP *P=NULL)
[追加] 複数要素追加.
Definition: TnbStack.h:86
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbStack.h:99
virtual TYP Take(void)
[取得] 先頭要素取り出し.
Definition: TnbStack.h:110
friend class CStackTest
フレンドクラス宣言
Definition: TnbStack.h:155
配列型情報管理テンプレート
Definition: TnbVector.h:75
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
Definition: TnbVector.h:397
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
Definition: TnbSync.h:788
TNB Library
Definition: TnbDoxyTitle.txt:2
キュー型情報管理インターフェーステンプレート
Definition: TnbQueue.h:43