45template<
typename KEY,
typename VAL,
typename INK = KEY>
58 TOne(
void) : value(VAL()) {}
72 COneHandle(TOne* P) : _super(P) {}
77 COneHandle(
const COneHandle& other) : _super(other) {}
85 _sr << ((*this)->value);
87 if ( ! ((*this)->hpMap.IsNull()) )
89 l = (*this)->hpMap->GetSize();
94 _sr << *((*this)->hpMap);
104 COneHandle o =
new TOne;
110 o->hpMap =
new CMapKey;
117 typedef typename CMapKey::CConstKeysAdapter CConstKeysAdapter;
147 virtual bool OnFound(
int iNestLevel,
const KEY& key,
const VAL& value,
const CTreeT& tree) = 0;
165 loop ( i, vkey.GetSize() )
167 const KEY& k = vkey.At(i);
168 ASSERTLIB(tree.
HasKey(k));
169 if ( ! I->
OnFound(_iNestLevel, k, tree.
At(k), tree) )
173 if ( tree.
HasLeaf(k) && ! m_Scan(I, tree(k), _iNestLevel) )
190 m_one->hpMap =
new CMapKey;
246 return m_one->hpMap->HasKey(key);
255 const VAL&
At(INK key)
const
259 return m_one->hpMap->operator[](key)->value;
285 COneHandle P =
new TOne;
287 m_one->hpMap->SetKey(key, P);
289 return m_one->hpMap->operator[](key)->value;
320 return m_one->hpMap->GetSize();
329 return m_one->hpMap->EnumKeys();
343 m_one->hpMap->operator[](key)->value = v;
362 COneHandle P =
new TOne;
364 m_one->hpMap->SetKey(key, P);
380 return m_one->hpMap->RemoveKey(key);
400 return ! c->hpMap->IsEmpty();
419 m_one->hpMap->SetKey(key, other.m_one);
429 m_one->hpMap =
new CMapKey;
439 return m_one->hpMap->GetKeysAdapter();
453 COneHandle P =
new TOne;
455 m_one->hpMap->SetKey(key, P);
457 COneHandle& c = m_one->hpMap->operator[](key);
458 if ( c->hpMap.IsNull() )
460 c->hpMap =
new CMapKey;
491 const COneHandle& c = m_one->hpMap->operator[](key);
492 if ( c->hpMap.IsNull() )
562 return m_Scan(I, *
this, iNestLevel);
566 friend class CTreeTest;
584 class CToStringCommand :
public _super::ICommand
596 virtual bool OnFound(
int iNestLevel,
const CStr& key,
const CStr& value,
const _super& tree)
605 CStr GetString(
void) {
return m_str; }
645 return c.GetString();
#define loop(VAR, CNT)
loop構文.
bool IsNull(void) const
[確認] NULLチェック
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
static CStrT Lineup(TCHAR t, size_t length)
[作成] 指定文字を並べた文字列作成
const CStrsTree Refer(LPCTSTR key) const
[取得] キー下のTree取得
const CStrsTree operator()(LPCTSTR key) const
[取得] キー下のTree取得
CStrsTree(const CTreeT< CStr, CStr, LPCTSTR > &other)
コピーコンストラクタ
CStrsTree operator()(LPCTSTR key)
[取得] キー下のTree取得
CStrsTree Refer(LPCTSTR key)
[取得] キー下のTree取得
CStrsTree Clone(void) const
[複製] 複製作成.
CStr ToString(void)
[変換] 単一文字列化
CStrsTree & operator=(const CTreeT< CStr, CStr, LPCTSTR > &other)
[代入] コピーオペレータ
const CTreeT< KEY, VAL, INK > operator()(INK key) const
[取得] キー下のTree取得
CTreeT & operator=(const CTreeT &other)
[代入] コピーオペレータ
const VAL & At(INK key) const
[取得] キー下の値の参照
bool Remove(INK key)
[削除] キー下の値と枝を削除
CConstKeysAdapter GetKeysAdapter(void) const
[取得] キーのみの参照アダプタ取得.
virtual void Deserialize(const IDeserializer &ds)
[通知] デシリアライズ
void RemoveAll(void)
[削除] 値と枝を削除
VAL & operator[](INK key)
[取得] キー下の値の参照
VAL & At(INK key)
[取得] キー下の値の参照
CTreeT< KEY, VAL, INK > operator()(INK key)
[取得] キー下のTree取得
CTreeT(const CTreeT &other)
コピーコンストラクタ
size_t GetSize(void) const
[取得] キーの数
bool HasLeaf(INK key) const
[確認] キーは枝を持つか
const VAL & operator[](INK key) const
[取得] キー下の値の参照
bool AddLeaf(INK key, CTreeT< KEY, VAL, INK > &other)
[追加] キー下に枝を追加
VAL Get(INK key) const
[取得] キー下の値取得
CVectorT< KEY > EnumKeys(void) const
[取得] キー一覧
bool Set(INK key, VAL v)
[設定] キー下の値設定
CTreeT< KEY, VAL, INK > Refer(INK key)
[取得] キー下のTree取得
bool Scan(ICommand *I)
[走査] 全要素走査.
virtual void Serialize(ISerializer &_sr) const
[通知] シリアライズ
bool Add(INK key, VAL v)
[追加] キー下の値追加
const CTreeT< KEY, VAL, INK > Refer(INK key) const
[取得] キー下のTree取得
bool HasKey(INK key) const
[確認] キー有無
virtual ~CTreeT(void)
デストラクタ
VAL & AtSelf(void)
[取得] 直下の情報の参照
CTreeT< KEY, VAL, INK > Clone(void) const
[複製] 複製作成
const VAL & AtSelf(void) const
[取得] 直下の情報の参照
ツリー型情報管理用 全キー走査コマンドインターフェース
virtual ~ICommand(void)
デストラクタ
virtual bool OnFound(int iNestLevel, const KEY &key, const VAL &value, const CTreeT &tree)=0
[通知] キーと値発見