TNB Library
TnbSimpleMap.h
[詳解]
1#pragma once
14#include "TnbSimpleVector.h"
15
16
17
18//TNB Library
19namespace TNB
20{
21
22
23
42template<typename KEY, typename VAL, typename INK=KEY>
44{
45public:
46
48 struct TParam
49 {
50 KEY key;
51 VAL val;
57 TParam(INK k = KEY(), VAL v = VAL()) : key(k), val(v)
58 {}
59 };
60
62 explicit CSimpleMapT(void) : m_isValidLast(false)
63 {
64 }
65
68 explicit CSimpleMapT(size_t bufferSize) : m_isValidLast(false), m_map(bufferSize)
69 {
70 }
71
77 {
78 m_map = other.m_map;
79 }
80
87 {
88 m_map = other.m_map;
89 return *this;
90 }
91
96 size_t GetSize(void) const
97 {
98 return m_map.GetSize();
99 }
100
107 VAL& operator[](INK key)
108 {
109 INDEX i = Find(key);
110 if ( i != INVALID_INDEX )
111 {
112 return m_map[i].val;
113 }
114 i = m_map.Add(TParam(key, VAL()));
115 m_lastKey = key;
116 m_lastIndex = i;
117 m_isValidLast = true;
118 return m_map[i].val;
119 }
120
128 const VAL& operator[](INK key) const
129 {
130 INDEX i = Find(key);
131 if ( i != INVALID_INDEX )
132 {
133 return m_map[i].val;
134 }
135 throw CEmptyException();
136 }
137
144 bool RemoveKey(INK key)
145 {
146 INDEX i = Find(key);
147 if ( i != INVALID_INDEX )
148 {
149 m_map.Remove(i);
150 m_isValidLast = false;
151 return true;
152 }
153 return false;
154 }
155
162 const TParam& Ref(INDEX index) const
163 {
164 return m_map[index];
165 }
166
173 bool Remove(INDEX index)
174 {
175 m_isValidLast = false;
176 return m_map.Remove(index);
177 }
178
185 INDEX Find(INK key) const
186 {
187 if ( m_isValidLast && m_lastKey == key )
188 {
189 ASSERT( m_map[m_lastIndex].key == m_lastKey );
190 return m_lastIndex;
191 }
192 loop ( i, m_map.GetSize() )
193 {
194 if ( m_map[i].key == key )
195 {
196 m_lastKey = key;
197 m_lastIndex = i;
198 m_isValidLast = true;
199 return i;
200 }
201 }
202 return INVALID_INDEX;
203 }
210 bool HasKey(INK key) const
211 {
212 return Find(key) != INVALID_INDEX;
213 }
214
219 void RemoveAll(void)
220 {
221 m_isValidLast = false;
222 m_map.RemoveAll();
223 }
224
225private:
227 mutable bool m_isValidLast;
228 mutable INK m_lastKey;
229 mutable INDEX m_lastIndex;
230};
231
232
233
234}; // TNB
235
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
簡易配列型情報管理関係のヘッダ
取得要素(空き)無し例外
Definition: TnbException.h:107
マップ型情報管理テンプレート
Definition: TnbSimpleMap.h:44
bool RemoveKey(INK key)
[削除] キーと値を削除
Definition: TnbSimpleMap.h:144
void RemoveAll(void)
[削除] 空化
Definition: TnbSimpleMap.h:219
VAL & operator[](INK key)
[取得] キーに対する値の参照
Definition: TnbSimpleMap.h:107
size_t GetSize(void) const
[取得] 要素数取得
Definition: TnbSimpleMap.h:96
bool Remove(INDEX index)
[削除] 要素一つ削除.
Definition: TnbSimpleMap.h:173
const VAL & operator[](INK key) const
[取得] キーに対する値の参照
Definition: TnbSimpleMap.h:128
CSimpleMapT(size_t bufferSize)
コンストラクタ
Definition: TnbSimpleMap.h:68
CSimpleMapT(void)
コンストラクタ
Definition: TnbSimpleMap.h:62
const TParam & Ref(INDEX index) const
[参照] パラメータ参照.
Definition: TnbSimpleMap.h:162
CSimpleMapT(const CSimpleMapT &other)
コピーコンストラクタ
Definition: TnbSimpleMap.h:76
INDEX Find(INK key) const
[検索] キー検索.
Definition: TnbSimpleMap.h:185
bool HasKey(INK key) const
[確認] キー有無
Definition: TnbSimpleMap.h:210
CSimpleMapT & operator=(const CSimpleMapT &other)
[複製] コピーオペレータ
Definition: TnbSimpleMap.h:86
void RemoveAll(void)
[削除] 空化
size_t GetSize(void) const
[取得] サイズ取得
bool Remove(INDEX index)
[削除] 要素一つ削除.
INDEX Add(const TYP &t)
[追加] 要素一つ追加.
TNB Library
Definition: TnbDoxyTitle.txt:2
パラメータ型
Definition: TnbSimpleMap.h:49
TParam(INK k=KEY(), VAL v=VAL())
コンストラクタ
Definition: TnbSimpleMap.h:57