TNB Library
TnbHashable.h
[詳解]
1#pragma once
13#include "TnbSerializer.h"
14#include "TnbComparator.h"
15
16
17
18namespace TNB
19{
20
21
22
79template<typename TYP>
80class CHashableT : public IComparableT< TNB::CHashableT<TYP> >, public ISerializable
81{
82 DWORD m_dwHash;
83 TYP m_typ;
84
85public:
86
90 CHashableT(void) : m_typ(TYP()), m_dwHash(HASH::CalcHash(m_typ))
91 {
92 }
93
99 CHashableT(const CHashableT<TYP>& t) : m_typ(t.m_typ), m_dwHash(t.m_dwHash)
100 {
101 }
102
108 CHashableT(const TYP& t) : m_typ(t)
109 {
110 m_dwHash = HASH::CalcHash(m_typ);
111 }
112
120 {
121 m_typ = other.m_typ;
122 m_dwHash = other.m_dwHash;
123 return *this;
124 }
125
132 CHashableT& operator=(const TYP& t)
133 {
134 m_typ = t;
135 m_dwHash = HASH::CalcHash(m_typ);
136 return *this;
137 }
138
143 DWORD GetHashCode(void) const
144 {
145 return m_dwHash;
146 }
147
155 virtual INT_PTR Compare(const CHashableT<TYP>& t) const
156 {
157 return IComparatorT<TYP>::GetDefault().CompareTo(m_typ, t.m_typ);
158 }
159
167 virtual bool IsEqual(const CHashableT<TYP>& t) const
168 {
169 if ( m_dwHash != t.m_dwHash )
170 {
171 return false; //ハッシュ値が異なるので、絶対違う
172 }
173 return IComparatorT<TYP>::GetDefault().IsEqualTo(m_typ, t.m_typ);
174 }
175
180 const TYP& At(void) const
181 {
182 return m_typ;
183 }
184
189 operator const TYP&(void) const
190 {
191 return m_typ;
192 }
193
199 virtual void Serialize(ISerializer& _sr) const
200 {
201 _sr << m_typ;
202 }
203
209 virtual void Deserialize(const IDeserializer& ds)
210 {
211 ds >> m_typ;
212 m_dwHash = HASH::CalcHash(m_typ);
213 }
214};
215
216
217
218namespace HASH
219{
226 inline DWORD CalcHash(DWORD dw)
227 {
228 return dw;
229 }
230};
231
232
233}; // TNB
コンパレータ関係のヘッダ
シリアライザー関係のヘッダ
HASH値保持テンプレートクラス.
Definition: TnbHashable.h:81
CHashableT(const CHashableT< TYP > &t)
コピーコンストラクタ
Definition: TnbHashable.h:99
virtual void Deserialize(const IDeserializer &ds)
[処理] デシリアライズ.
Definition: TnbHashable.h:209
CHashableT & operator=(const CHashableT< TYP > &other)
[代入] コピーオペレータ
Definition: TnbHashable.h:119
virtual INT_PTR Compare(const CHashableT< TYP > &t) const
[確認] 比較
Definition: TnbHashable.h:155
CHashableT(const TYP &t)
[代入] 代入コンストラクタ
Definition: TnbHashable.h:108
DWORD GetHashCode(void) const
[取得] HASH値取得
Definition: TnbHashable.h:143
CHashableT(void)
コンストラクタ.
Definition: TnbHashable.h:90
virtual void Serialize(ISerializer &_sr) const
[処理] シリアライズ.
Definition: TnbHashable.h:199
virtual bool IsEqual(const CHashableT< TYP > &t) const
[確認] 比較
Definition: TnbHashable.h:167
const TYP & At(void) const
[取得] 値参照取得
Definition: TnbHashable.h:180
CHashableT & operator=(const TYP &t)
[代入] 代入オペレータ
Definition: TnbHashable.h:132
DWORD CalcHash(DWORD dw)
[HASH] ハッシュ値計算.
Definition: TnbHashable.h:226
DWORD CalcHash(const IConstCollectionT< TYP > &c)
COLLECT [HASH] ハッシュ値計算.
TNB Library
Definition: TnbDoxyTitle.txt:2
比較機能インターフェース.
Definition: TnbComparable.h:54
virtual INT_PTR CompareTo(const TYP &t1, const TYP &t2) const =0
[確認] 比較
static IComparatorT & GetDefault(void)
[作成] 汎用コンパレータ取得.
virtual bool IsEqualTo(const TYP &t1, const TYP &t2) const
[確認] 比較
Definition: TnbComparator.h:67
デシリアライザーインターフェースクラス.
シリアライザブルインターフェース.
Definition: TnbSerializer.h:47
シリアライザーインターフェースクラス.