Theolizer  Version.1.2.0
serializer for C++ / Do you want to update your classes easily ?
7b.enum_variation.h
[詳解]
1 //############################################################################
2 /*!
3  @brief ドキュメント・ファイル-使用方法(個別)
4  @ingroup Documents
5  @file 7b.enum_variation.h
6  @author Yoshinori Tahara
7  @date 2016/12/02 Created
8 */
9 /*
10  © 2016 Theoride Technology (http://theolizer.com/) All Rights Reserved.
11  "Theolizer" is a registered trademark of Theoride Technology.
12 
13  "Theolizer" License
14  In the case where you are in possession of a valid “Theolizer” License,
15  you may use this file in accordance with the terms and conditions of
16  the use license determined by Theoride Technology.
17 
18  General Public License Version 3 ("GPLv3")
19  You may use this file in accordance with the terms and conditions of
20  GPLv3 published by Free Software Foundation.
21  Please confirm the contents of GPLv3 at https://www.gnu.org/licenses/gpl.txt .
22  A copy of GPLv3 is also saved in a LICENSE.TXT file.
23 
24  商用ライセンス
25  あなたが有効なTheolizer商用ライセンスを保持している場合、
26  セオライド テクノロジーの定める使用許諾書の条件に従って、
27  このファイルを取り扱うことができます。
28 
29  General Public License Version 3(以下GPLv3)
30  Free Software Foundationが公表するGPLv3の使用条件に従って、
31  あなたはこのファイルを取り扱うことができます。
32  GPLv3の内容を https://www.gnu.org/licenses/gpl.txt にて確認して下さい。
33  またGPLv3のコピーをLICENSE.TXTファイルにおいてます。
34 */
35 //############################################################################
36 
37 /*!
38  @page EnumVariation enum型のバリエーション
39 Theolizerは下記のenum型をシリアライズするための機能を持っています。
40 
41 <b>対応するenum型</b><br>
42  - 従来のenum型
43  - C++11で追加されたscoped enum型
44 
45 <b>Theolizerのenum型サポート</b><br>
46  - 非侵入型完全自動
47  - 非侵入型半自動<br>
48  非侵入型半自動は、下記オプションを指定します。
49  - シンボル名保存(デフォルト)
50  - シンボル値保存
51 
52 ここでは、これらの使い方と自動テストについて説明します。<br>
53 
54 <br>
55 //############################################################################
56 @section FullAutoEnum 1.非侵入型完全自動enum型
57 //############################################################################
58 
59 非侵入型完全自動enum型は、パラメータ指定が存在しませんので<b>シンボル名</b>固定です。<br>
60 非侵入型完全自動enum型の使い方は@ref BasicUsage で説明していますのでそちらを御覧ください。
61 
62 <br>
63 //############################################################################
64 @section HalfAutoEnum 2.非侵入型半自動enum型
65 //############################################################################
66 
67 enum型をシリアライズ対象であることを明示的に指定する際に、下記マクロを用いることができます。
68 
69  - <b>THEOLIZER_ENUM(dEnum, dLastVersionNo);</b><br>
70  <b>シンボル名</b>でシリアライズするよう指定します。
71  - <b>THEOLIZER_ENUM_VALUE(dEnum, dLastVersionNo);</b><br>
72  <b>シンボル値</b>でシリアライズするよう指定します。
73 
74 それぞれのパラメータは以下の通りです。
75 
76  - <b>dEnum</b><br>
77  シリアライズ対象のenum型名を指定します。<br>
78  - <b>dLastVersionNo</b><br>
79  そのバージョン番号を指定します。詳しくは@ref ChangingEnum を参照下さい。<br>
80 <br>
81 
82 @dontinclude basic/test_enum_variation.h
83 @skip EnumSymName
84 @until };
85 
86 例えば、上記ように定義されている時、次の構文でEnumSymNameをシリアライズ対象として指定します。
87 
88 @skip THEOLIZER_ENUM
89 @until );
90 
91 保存/回復処理は従来通りです。
92 
93 @dontinclude basic/test_enum_variation.cpp
94 @skip tutoriseEnumVariation()
95 @skip //
96 @until THEOLIZER_EQUAL(aEnumSymVal, eesvVal);
97 @skip }
98 @until }
99 
100 シリライズされた<b>tutorise_enum_variation.json</b> は以下の通りです。<br>
101 
102 @code json
103 {
104  "SerialzierName":"JsonTheolizer",
105  "GlobalVersionNo":1,
106  "TypeInfoList":[1]
107 }
108 "eesnVal"
109 3001
110 @endcode
111 
112 <br>
113 //############################################################################
114 @section TestEnumVariation 3.網羅的な使用例(自動テスト)の説明
115 //############################################################################
116 
117 網羅的な自動テスト用のクラスは<b>source/reference_and_test/basic/test_enum_variation.h</b> ファイルで定義しています。<br>
118 また、テスト処理は<b>source/reference_and_test/basic/test_enum_variation.cpp</b> ファイルで定義しており、saveEnumVariation()関数で保存処理、loadEnumVariation()関数で回復処理と値の検証を行っています。
119 
120 <b>test_enum_variation.h</b> ファイル先頭で<b>DEFINE_ENUM()マクロ</b>を定義しています。<br>
121 
122 @dontinclude basic/test_enum_variation.h
123 @skip DEFINE_ENUM
124 @until unsigned long long
125 
126 C++11規格でenum型の値を保存する整数型を基底型として指定できるようになりました。その全ての基底型(指定していないものも含む)に対して自動テストを容易に展開できるようにするためのマクロです。<br>
127 このマクロを展開する直前でDEFINE()マクロを定義することで、enum型の定義、初期化、保存、回復、値チェックのためのコードを生成しています。
128 
129 下記の3種類のTheolizer機能に分けて自動テストを実装しています。
130 
131  - 非侵入型完全自動
132  - 非侵入型半自動(シンボル名対応)
133  - 非侵入型半自動(シンボル値対応)
134 
135 それぞれについて下記定義を行っています。
136 
137  1. 通常のenum型定義
138  2. Scoped enum型定義
139  3. トップ・レベルの保存(左辺値)/保存(右辺値)/回復関数定義
140  - 非侵入型完全自動<br>
141  saveLValueEnumFullAuto, saveRValueEnumFullAuto, loadEnumFullAuto
142  - 非侵入型半自動(シンボル名対応)<br>
143  saveLValueEnumSymName, saveRValueEnumSymName, loadEnumSymName
144  - 非侵入型半自動(シンボル値対応)<br>
145  saveLValueEnumFSymVal, saveRValueEnumFSymVal, loadEnumSymVal
146  4. 非侵入型完全自動クラスのメンバとしての定義(メンバ・リスト自動生成対応の検証のため)
147  5. 非侵入型手動クラスのメンバとしての定義(非トップ・レベルの保存/回復検証のため)
148 
149 3.と5.については、THEOLIZER_PROCESS()で保存/回復しますが、THEOLIZER_PROCESS()は定数の保存も可能なので、左辺値と右辺値(定数)をテストします。定数への回復はできないので、回復は左辺値のみです。
150 
151 */