TNB Library
TnbConverter.h
[詳解]
1#pragma once
14#include "TnbCollection.h"
15#include "TnbPair.h"
16
17
18
19namespace TNB
20{
21
22
23
68template<typename DST, typename SRC>
70{
71protected:
72
80 virtual void Converter(DST& _dst, const SRC& src) = 0;
81
82public:
83
90 void Convert(DST& _dst, const SRC& src)
91 {
92 Converter(_dst, src);
93 }
94
102 template<typename D, typename S>
104 {
105 EXCLUSIVE2(&_dst, &src);
106 size_t l = src.GetSize();
107 if ( l == 0 )
108 {
109 _dst.RemoveAll();
110 return;
111 }
112 bool canRefMode = true;
113 try
114 {
115 if ( _dst.SetSize(l) )
116 {
117 _dst.Ref(0);
118 }
119 else
120 {
121 canRefMode = false;
122 }
123 }
124 catch(CNotSupportException& e)
125 {
126 e.OnCatch();
127 canRefMode = false;
128 }
129 //
130 if ( canRefMode )
131 {
132 loop ( i, l )
133 {
134 Convert(_dst.Ref(i), src.At(i));
135 }
136 }
137 else
138 {
139 _dst.RemoveAll();
140 D d;
141 loop ( i, l )
142 {
143 Convert(d, src.At(i));
144 if ( _dst.Add(d) == INVALID_INDEX )
145 {
146 throw CEmptyException();
147 }
148 }
149 }
150 }
151
159 template<typename T, typename D, typename S>
160 void Convert(CPairT<T, D>& _dst, const CPairT<T, S>& src)
161 {
162 _dst.first = src.first;
163 Convert(_dst.second, src.second);
164 }
165};
166
167
168
169}; // TNB
情報群管理関係のヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
ペア型関係のヘッダ
情報変換ベースクラス
Definition: TnbConverter.h:70
void Convert(DST &_dst, const SRC &src)
[変換] 単要素変換
Definition: TnbConverter.h:90
virtual void Converter(DST &_dst, const SRC &src)=0
[変換] 変換器
void Convert(CPairT< T, D > &_dst, const CPairT< T, S > &src)
[変換] ペア型変換.
Definition: TnbConverter.h:160
void Convert(ICollectionT< D > &_dst, const IConstCollectionT< S > &src)
[変換] コレクション変換
Definition: TnbConverter.h:103
取得要素(空き)無し例外
Definition: TnbException.h:107
サポート外例外
Definition: TnbException.h:185
ペア型テンプレートクラス
Definition: TnbPair.h:41
FIRST first
一つ目の型の値
Definition: TnbPair.h:44
SECOND second
二つ目の型の値
Definition: TnbPair.h:45
void OnCatch(void) const
[表示] 内容表示
Definition: TnbException.h:69
#define EXCLUSIVE2(CLS1, CLS2)
簡易排他ツイン制御マクロ.
Definition: TnbSync.h:820
TNB Library
Definition: TnbDoxyTitle.txt:2
情報群管理操作インターフェーステンプレート
virtual TYP & Ref(INDEX index)=0
[取得] 要素の参照取得.
virtual INDEX Add(const TYP &t)=0
[追加] 要素一つ追加.
virtual bool SetSize(size_t size)
[操作] サイズ指定
virtual bool RemoveAll(void)
[削除] 全要素削除 .
情報群管理インターフェーステンプレート
virtual const TYP & At(INDEX index) const =0
[取得] 要素の参照取得.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.