TNB Library
TnbNullable.h
[詳解]
1#pragma once
13#include "TnbSerializer.h"
14#include "TnbComparator.h"
15
16
17
18namespace TNB
19{
20
21
22
48template<typename TYP>
49class CNullableT : public IComparableT< TNB::CNullableT<TYP> >, public ISerializable
50{
51 bool m_boIsNull;
52 TYP m_typ;
53
54public:
55
60 CNullableT(void) : m_typ(TYP()) , m_boIsNull(true)
61 {
62 }
63
68 CNullableT(const CNullableT<TYP>& t) : m_typ(t.m_typ) , m_boIsNull(t.m_boIsNull)
69 {
70 }
71
76 CNullableT(const TYP& t) : m_typ(t) , m_boIsNull(false)
77 {
78 }
79
86 {
87 m_typ = other.m_typ;
88 m_boIsNull = other.m_boIsNull;
89 return *this;
90 }
91
97 CNullableT& operator=(const TYP& t)
98 {
99 m_typ = t;
100 m_boIsNull = false;
101 return *this;
102 }
103
111 virtual INT_PTR Compare(const CNullableT<TYP>& t) const
112 {
113 if ( m_boIsNull )
114 {
115 return t.m_boIsNull ? 0 : -1;
116 }
117 if ( t.m_boIsNull ){ return 1; }
118 return IComparatorT<TYP>::GetDefault().CompareTo(m_typ, t.m_typ);
119 }
120
126 TYP& At(void)
127 {
128 if ( m_boIsNull ){ throw CNullPointerException(); }
129 return m_typ;
130 }
131
137 const TYP& At(void) const
138 {
139 if ( m_boIsNull ){ throw CNullPointerException(); }
140 return m_typ;
141 }
142
148 operator TYP&(void) { return At(); }
149
155 operator const TYP&(void) const { return At(); }
156
162 TYP operator+(void) const
163 {
164 return At();
165 }
166
172 TYP operator-(void) const
173 {
174 return -At();
175 }
176
182 bool IsNull(void) const { return m_boIsNull; }
183
187 void Null(void)
188 {
189 m_typ = TYP();
190 m_boIsNull = true;
191 }
192
198 virtual void Serialize(ISerializer& _sr) const
199 {
200 _sr << m_boIsNull << m_typ;
201 }
202
208 virtual void Deserializer(const IDeserializer& ds)
209 {
210 ds >> m_boIsNull >> m_typ;
211 }
212};
213
214
215
216}; // TNB
コンパレータ関係のヘッダ
シリアライザー関係のヘッダ
NULLポインタ例外
Definition: TnbException.h:172
NULL状態有り化テンプレートクラス.
Definition: TnbNullable.h:50
CNullableT(const TYP &t)
[代入] 代入コンストラクタ
Definition: TnbNullable.h:76
TYP & At(void)
[取得] 参照取得
Definition: TnbNullable.h:126
CNullableT & operator=(const TYP &t)
[代入] 代入
Definition: TnbNullable.h:97
virtual INT_PTR Compare(const CNullableT< TYP > &t) const
[確認] 比較
Definition: TnbNullable.h:111
CNullableT(void)
コンストラクタ.
Definition: TnbNullable.h:60
CNullableT & operator=(const CNullableT &other)
[代入] コピーオペレータ
Definition: TnbNullable.h:85
TYP operator+(void) const
[取得] 値取得
Definition: TnbNullable.h:162
virtual void Serialize(ISerializer &_sr) const
[処理] シリアライズ.
Definition: TnbNullable.h:198
bool IsNull(void) const
[確認] NULL状態確認
Definition: TnbNullable.h:182
virtual void Deserializer(const IDeserializer &ds)
[処理] デシリアライズ.
Definition: TnbNullable.h:208
void Null(void)
[設定] NULL状態化
Definition: TnbNullable.h:187
CNullableT(const CNullableT< TYP > &t)
コピーコンストラクタ
Definition: TnbNullable.h:68
const TYP & At(void) const
[取得] 値参照取得
Definition: TnbNullable.h:137
TYP operator-(void) const
[取得] マイナス単項
Definition: TnbNullable.h:172
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)
[作成] 汎用コンパレータ取得.
デシリアライザーインターフェースクラス.
シリアライザブルインターフェース.
Definition: TnbSerializer.h:47
シリアライザーインターフェースクラス.