Theolizer  Version.1.2.0
serializer for C++ / Do you want to update your classes easily ?
containers.h
[詳解]
1 //############################################################################
2 //
3 /*!
4 @brief Theolizerライブラリの標準コンテナ・サポート
5 @ingroup TheolizerLib
6 @file containers.h
7 @author Yoshinori Tahara(Theoride Technology)
8 @date 2017/02/01 Created
9 */
10 /*
11  © 2016 Theoride Technology (http://theolizer.com/) All Rights Reserved.
12  "Theolizer" is a registered trademark of Theoride Technology.
13 
14  "Theolizer" License
15  In the case where you are in possession of a valid “Theolizer” License,
16  you may use this file in accordance with the terms and conditions of
17  the use license determined by Theoride Technology.
18 
19  General Public License Version 3 ("GPLv3")
20  You may use this file in accordance with the terms and conditions of
21  GPLv3 published by Free Software Foundation.
22  Please confirm the contents of GPLv3 at https://www.gnu.org/licenses/gpl.txt .
23  A copy of GPLv3 is also saved in a LICENSE.TXT file.
24 
25  商用ライセンス
26  あなたが有効なTheolizer商用ライセンスを保持している場合、
27  セオライド テクノロジーの定める使用許諾書の条件に従って、
28  このファイルを取り扱うことができます。
29 
30  General Public License Version 3(以下GPLv3)
31  Free Software Foundationが公表するGPLv3の使用条件に従って、
32  あなたはこのファイルを取り扱うことができます。
33  GPLv3の内容を https://www.gnu.org/licenses/gpl.txt にて確認して下さい。
34  またGPLv3のコピーをLICENSE.TXTファイルにおいてます。
35 */
36 //############################################################################
37 
38 #if !defined(THEOLIZER_INTERNAL_CONTAINERS_H)
39 #define THEOLIZER_INTERNAL_CONTAINERS_H
40 
41 //############################################################################
42 // Begin
43 //############################################################################
44 #ifndef THEOLIZER_INTERNAL_DOXYGEN
45 
46 THEOLIZER_PROVIDED_BY("Theoride Technology");
47 
48 #endif
49 // ***************************************************************************
50 // DLL用の警告禁止
51 // ***************************************************************************
52 
53 #ifdef _MSC_VER
54  #pragma warning(push)
55 //#pragma warning(disable:4100 4251)
56 #endif
57 
58 //############################################################################
59 // 自動生成コードの雛形
60 // これを各コンテナ用ヘッダ・ファイルの後半へコピーし、
61 // THEOLIZER_PROVIDED_BY("Theoride Technology");をコメント・アウトして
62 // ビルドすることで、Theolizerドライバにより適切な定義へ自動修正される。
63 //############################################################################
64 
65 #if 0
66 
67 // ***************************************************************************
68 // 自動生成コード
69 // ***************************************************************************
70 
71 #ifdef THEOLIZER_WRITE_CODE
72 
73 #define THEOLIZER_GENERATED_LAST_VERSION_NO THEOLIZER_INTERNAL_DEFINE(kLastVersionNo,1)
74 #define THEOLIZER_GENERATED_CLASS_TYPE THEOLIZER_INTERNAL_FULL_NAME
75 #define THEOLIZER_GENERATED_PARAMETER_LIST THEOLZIER_INTERNAL_CONTAINER_PARAMETER
76 #define THEOLIZER_GENERATED_UNIQUE_NAME THEOLZIER_INTERNAL_CONTAINER_UNIQUE
77 
78 // ---<<< Version.1 >>>---
79 
80 #define THEOLIZER_GENERATED_VERSION_NO THEOLIZER_INTERNAL_DEFINE(kVersionNo,1)
81 #define THEOLIZER_GENERATED_CLASS_NAME() THEOLIZER_INTERNAL_TEMPLATE_NAME(\
82  (u8"" THEOLIZER_INTERNAL_STRINGIZE(THEOLZIER_INTERNAL_CONTAINER_NAME), \
83  THEOLZIER_INTERNAL_CONTAINER_ARGUMENT))
84 #include <theolizer/internal/version_manual.inc>
85 #undef THEOLIZER_GENERATED_VERSION_NO
86 
87 #endif//THEOLIZER_WRITE_CODE
88 
89 #endif
90 
91 //############################################################################
92 // グローバル名前空間
93 //############################################################################
94 
95 #ifndef THEOLIZER_INTERNAL_DOXYGEN
96 
97 // ***************************************************************************
98 // 標準コンテナのデフォルト・パラメータ
99 // ***************************************************************************
100 
101 //----------------------------------------------------------------------------
102 // std::allocator<T>
103 //----------------------------------------------------------------------------
104 
105 THEOLIZER_TEMPLATE_PARAMETER_TEMPLATE((template<class T>),
106  std::allocator, (T),
107  allocatorTheolizer);
108 
109 //----------------------------------------------------------------------------
110 // std::less<T>
111 //----------------------------------------------------------------------------
112 
113 THEOLIZER_TEMPLATE_PARAMETER_TEMPLATE((template<class T>),
114  std::less, (T),
115  lessTheolizer);
116 
117 //----------------------------------------------------------------------------
118 // std::hash<Key>
119 //----------------------------------------------------------------------------
120 
121 THEOLIZER_TEMPLATE_PARAMETER_TEMPLATE((template<class Key>),
122  std::hash, (Key),
123  hashTheolizer);
124 
125 //----------------------------------------------------------------------------
126 // std::equal_to<Key>
127 //----------------------------------------------------------------------------
128 
129 THEOLIZER_TEMPLATE_PARAMETER_TEMPLATE((template<class Key>),
130  std::equal_to, (Key),
131  equal_toTheolizer);
132 
133 //############################################################################
134 // std::vector<bool>対応
135 //############################################################################
136 
137 // ***************************************************************************
138 // 標準型
139 // ***************************************************************************
140 
141 namespace theolizer
142 {
143 namespace internal
144 {
145 
146 template<class tVector, typename tType, class tTheolizerVersion>
147 struct SupportVector
148 {
149  template<class tSerializer>
150  static void save(tSerializer& iSerializer, typename tVector::const_reference iValue)
151  {
152  THEOLIZER_PROCESS(iSerializer, iValue);
153  }
154  template<class tSerializer>
155  static void load(tSerializer& iSerializer, typename tVector::reference oValue)
156  {
157  THEOLIZER_PROCESS(iSerializer, oValue);
158  }
159 };
160 
161 template<class tVector, class tTheolizerVersion>
162 struct SupportVector<tVector, bool, tTheolizerVersion>
163 {
164  template<class tSerializer>
165  static void save(tSerializer& iSerializer, typename tVector::const_reference iValue)
166  {
167  bool temp=iValue;
168  THEOLIZER_PROCESS(iSerializer, temp);
169  }
170  template<class tSerializer>
171  static void load(tSerializer& iSerializer, typename tVector::reference oValue)
172  {
173  bool temp;
174  THEOLIZER_PROCESS(iSerializer, temp);
175  oValue=temp;
176  }
177 };
178 
179 // ***************************************************************************
180 // 被ポインタ型
181 // ***************************************************************************
182 
183 template<class tVector, typename tType, class tTheolizerVersion>
184 struct SupportVectorPointee
185 {
186  template<class tSerializer>
187  static void save(tSerializer& iSerializer, typename tVector::const_reference iValue)
188  {
189  THEOLIZER_PROCESS_POINTEE(iSerializer, iValue);
190  }
191  template<class tSerializer>
192  static void load(tSerializer& iSerializer, typename tVector::reference oValue)
193  {
194  THEOLIZER_PROCESS_POINTEE(iSerializer, oValue);
195  }
196 };
197 
198 template<class tVector, class tTheolizerVersion>
199 struct SupportVectorPointee<tVector, bool, tTheolizerVersion>
200 {
201  template<class tSerializer>
202  static void save(tSerializer& iSerializer, typename tVector::const_reference iValue)
203  {
204  THEOLIZER_INTERNAL_ABORT("Can't support VectorPointee<bool>.");
205  }
206  template<class tSerializer>
207  static void load(tSerializer& iSerializer, typename tVector::reference oValue)
208  {
209  THEOLIZER_INTERNAL_ABORT("Can't support VectorPointee<bool>.");
210  }
211 };
212 
213 } // namespace internal
214 } // namespace theolizer
215 
216 //############################################################################
217 // std::pair<>対応(std::mapシリーズ対応のため)
218 //############################################################################
219 
220 // ***************************************************************************
221 // シリアライズ指定
222 // ***************************************************************************
223 
224 THEOLIZER_NON_INTRUSIVE_TEMPLATE_ORDER((template<class T1, class T2>),
225  (std::pair<T1, T2>), 1,
226  pairTheolizer);
227 
228 //----------------------------------------------------------------------------
229 // ユーザ定義
230 //----------------------------------------------------------------------------
231 
232 // ---<<< Version.1 >>>---
233 
234 template<class T1, class T2>
235 template<class tMidSerializer, class tTheolizerVersion>
236 struct TheolizerNonIntrusive<std::pair<T1, T2>>::
237  TheolizerUserDefine<tMidSerializer, tTheolizerVersion, 1>
238 {
239  // 保存
240  static void saveClassManual
241  (
242  tMidSerializer& iSerializer,
243  typename tTheolizerVersion::TheolizerTarget const*const& iInstance
244  )
245  {
246  THEOLIZER_PROCESS(iSerializer, iInstance->first);
247  THEOLIZER_PROCESS(iSerializer, iInstance->second);
248  }
249 
250  // 回復
251  static void loadClassManual
252  (
253  tMidSerializer& iSerializer,
254  typename tTheolizerVersion::TheolizerTarget*& oInstance
255  )
256  {
257  // もし、nullptrなら、インスタンス生成
258  if (!oInstance) oInstance=new typename tTheolizerVersion::TheolizerTarget();
259 
260  THEOLIZER_PROCESS(iSerializer, oInstance->first);
261  THEOLIZER_PROCESS(iSerializer, oInstance->second);
262  }
263 };
264 
265 //----------------------------------------------------------------------------
266 // 自動生成
267 //----------------------------------------------------------------------------
268 
269 #ifdef THEOLIZER_WRITE_CODE // ###### std::pair<T1,T2> ######
270 
271 #define THEOLIZER_GENERATED_LAST_VERSION_NO THEOLIZER_INTERNAL_DEFINE(kLastVersionNo,1)
272 #define THEOLIZER_GENERATED_CLASS_TYPE THEOLIZER_INTERNAL_UNPAREN(std::pair<T1, T2>)
273 #define THEOLIZER_GENERATED_PARAMETER_LIST template<class T1, class T2>
274 #define THEOLIZER_GENERATED_UNIQUE_NAME pairTheolizer
275 
276 // ---<<< Version.1 >>>---
277 
278 #define THEOLIZER_GENERATED_VERSION_NO THEOLIZER_INTERNAL_DEFINE(kVersionNo,1)
279 #define THEOLIZER_GENERATED_CLASS_NAME()\
280  THEOLIZER_INTERNAL_TEMPLATE_NAME((u8"std::pair",T1,T2))
281 #include <theolizer/internal/version_manual.inc>
282 #undef THEOLIZER_GENERATED_VERSION_NO
283 
284 #endif//THEOLIZER_WRITE_CODE // ###### std::pair<T1,T2> ######
285 
286 #endif // THEOLIZER_INTERNAL_DOXYGEN
287 
288 //############################################################################
289 // End
290 //############################################################################
291 
292 // ***************************************************************************
293 // 警告抑止解除
294 // ***************************************************************************
295 
296 #ifdef _MSC_VER
297  #pragma warning(pop)
298 #endif
299 
300 #endif // THEOLIZER_INTERNAL_CONTAINERS_H
theolizer名前空間
Definition: base.h:53
#define THEOLIZER_PROCESS(dSerializer, dInstance)
通常の保存/回復処理マクロ(2-4-2.シリアライズ処理要求 参照)
Definition: serializer.h:67
#define THEOLIZER_PROVIDED_BY(dVendor)
ソース自動生成制御
#define THEOLIZER_PROCESS_POINTEE(dSerializer, dInstance)
被ポインタ用の保存/回復処理マクロ(2-4-2.シリアライズ処理要求 参照)
Definition: serializer.h:76