Skip to content

Commit

Permalink
バージョン番号を正規バージョンとした。 v1.0.0
Browse files Browse the repository at this point in the history
その他下記修正
  ドキュメント修正
  msvc用pdbファイルのインストール漏れ追加
  example.cpp見直し

------ auto generated message by Theolizer
auto test(one-set) : PASS
TheolizerDriver  : 6fd42a8fd4187d4d01a0c6eea0cedbb6
TheolizerLibrary : 830800337fe034b78ff89d7fdb1e3125
Library's Header : 620c1d5b58f53e45150b3ea3509cb6ad
------ end of message
  • Loading branch information
yossi-tahara committed May 7, 2017
1 parent 8a39057 commit 0a892d3
Show file tree
Hide file tree
Showing 13 changed files with 271 additions and 387 deletions.
398 changes: 172 additions & 226 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ message(STATUS "CI_SERVICE =${CI_SERVICE}")
#-----------------------------------------------------------------------------

project(Theolizer VERSION 1.0.0)
set(TEMPORARY_VERSION "-Prerelease.")
#set(TEMPORARY_VERSION "-Prerelease.")

message(STATUS "PROJECT_VERSION=${PROJECT_VERSION}${TEMPORARY_VERSION}")

Expand Down
28 changes: 15 additions & 13 deletions source/document/ja/2.specification.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
// ***************************************************************************
__① プリミティブ型__<br>
基本的な型をプリミティブ型と呼んでいます。下記がプリミティブ型です。
- C++のint型等の組込み型全て<br>
- C++のint型等の基本型全て<br>
bool, char, signed char, unsigned char, wchar_t, char16_t, char32_t, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long, float, double, long double
- std::string, std::wstring, std::u16string, std::u32string
Expand Down Expand Up @@ -429,8 +429,11 @@ Theolizerは旧プログラムのバージョン番号を指定してデータ
</div>
// ***************************************************************************
@subsection Basic34 3-4.保存先指定等の要因で一部のメンバが回復されていない時
@subsection Basic34 3-4.クラスとenum型定義変更時の注意事項
// ***************************************************************************
@subsubsection Basic341 3-4-1.保存先指定等の要因で一部のメンバが回復されていない時
追加されたメンバがある場合、もしくは、保存先指定でクラス分割されている場合、旧バージョン・データから回復した時、ファイルに記録されていないメンバについては回復されません。従って、upVersion処理にて回復されていないメンバが存在する可能性があります。<br>
そこで、down/upVersion関数を記述する場合は、追加した変数をdown/upVersion関数内で使用しないこと、できるだけクラス分割しないことお勧めします。
Expand All @@ -443,9 +446,8 @@ Theolizerは旧プログラムのバージョン番号を指定してデータ
メンバ変数a0, a1の値は、メンバ変数a0, a1の値だけを用いて修正し、メンバ変数b0, b1の値は、メンバ変数b0, b1の値だけを用いて修正すると安全です。<br>
例えばメンバ変数a0の値を修正するためにメンバ変数b0の値を使うと、保存A→保存先Bの順序で回復した場合、回復されていないメンバ変数b0を使って回復済のメンバ変数a0を修正することになります。
// ***************************************************************************
@subsection Basic35 3-5.旧バージョン処理時、メンバが回復されなかった時に発生する問題点対応
// ***************************************************************************
@subsubsection Basic342 3-4-2.旧バージョン処理時、メンバが回復されなかった時に発生する問題点対応
downVersion後upVersionで元に戻らないような修正を行うことは多いと思います。(例えは、downVersion関数を記述せずupVersion関数のみを記述すると該当します。)<br>
何も手当しない場合、シリアライズ・データを回復する時、回復対象でないメンバがdown/upVersion関数処理の結果、不適切に変化してしまいます。<br>
Expand All @@ -462,9 +464,8 @@ downVersion後upVersionで元に戻らないような修正を行うことは多
また、回復しなかった変数は元の値を変更するべきではありませんので、反映しません。<br>
この制御のため、mDoSucceedというフラグを①の管理領域に設け、trueの時次バージョンへ反映します。<br>
// ***************************************************************************
@subsection Basic36 3-6.down/upVersion関数で変更可能な変数と変更してはいけない変数のまとめ
// ***************************************************************************
@subsubsection Basic343 3-4-3.down/upVersion関数で変更可能な変数と変更してはいけない変数のまとめ
少しややこしいのでまとめます。
1. down/upVersion関数で変更してよい変数<br>
Expand All @@ -481,16 +482,17 @@ downVersion後upVersionで元に戻らないような修正を行うことは多
なお、2-2.と2-3.については代入演算子(operator=)をprivate定義していますので、変更しようとするとコンパイル・エラーになります。
// ***************************************************************************
@subsection Basic37 3-7.クラスやenum型を削除する際の注意事項
// ***************************************************************************
@subsubsection Basic344 3-4-4.クラスやenum型を削除する際の注意事項
バージョン・アップに伴い、一度シリアライズ指定したクラスやenum型をソース・コードから削除したい場合の注意事項があります。<br>
そのような削除したいクラスやenum型を仮に 型X と呼びます。
@subsubsection Basic371 3-7-1.最新版の別のクラスの旧バージョンで 型X を使っている場合
<b>最新版の別のクラスの旧バージョンで 型X を使っている場合</b><br>
最新版で一切使っていなくても、旧バージョン・データから回復する際に 型X の定義が必要になりますので、最新版のソースから 型X の定義を削除しないで下さい。
@subsubsection Basic372 3-7-2.型X を一切使っていない場合
<b>型X を一切使っていない場合</b><br>
この場合は原則として削除可能です。ただし、グローバル・バージョン番号テーブルに 型X が登録されています。その自動削除には対応していませんので、手で削除する必要があります。<br>
THEOLIZER_GLOBAL_VERSION_TABLEマクロを定義(@ref HowToMakeGlobalVersionNoTable22 )したコンパイル単位の *.theolizer.hpp の最後にありますので、その中の下記行を削除して下さい。
Expand Down
4 changes: 4 additions & 0 deletions source/document/ja/3.prepare.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ Theolizerを解凍、もしくは、インストールしたフォルダを以
TheolizerDriver.exe "--theolizer-replace=C:\mingw-w64\x86_64-5.4.0-posix-seh-rt_v5-rev0\mingw64\bin\g++.exe"
例えば、ubuntu 16.04 LTSの場合、次のコマンドでコンパイラをリプレースします。
sudo ./TheolizerDriver "--theolizer-restore=/usr/bin/g++"
<br>
<div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333; border-radius: 10px; background-color: #d0d0d0;">
Visual Strudio C++については、<b>Theolizerルート・フォルダ</b>にreplace.batを用意しています。これを起動することで上記のリプレース操作を行います。
Expand Down
23 changes: 16 additions & 7 deletions source/document/ja/4.project.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,29 +86,38 @@ CMakeLists.txt作成後、THEOLIZER_DIRに <b>Theolizerルート・フォルダ<
---
TheolizerのGitHubリポジトリのトップ・ページにあるexampleのソース・コードとCMakeLists.txtを <b>source/samples/example</b> に置いています。これは「2.CMakeを使う場合」のサンプルとなります。\n
適切なビルド・フォルダを作成して、そこで下記コマンドを実行することで、プロジェクト生成→ビルド→テスト実行が行われます。\n
TheolizerのGitHubリポジトリのトップ・ページにあるexampleのソース・コードとCMakeLists.txtを <b>source/samples/example</b> に置いています。これは「2.CMakeを使う場合」のサンプルとなります。<br>
適切なビルド・フォルダを作成して、そこで下記コマンドを実行することで、プロジェクト生成→ビルド→テスト実行が行われます。<br>
なお、下記は全てReleaseビルドの例です。Debugビルドする時は、Releaseの代わりにDebugを指定して下さい。\n
全てsource/samples/exampleフォルダで作業して下さい。<br>
なお、下記は全てReleaseビルドの例です。Debugビルドする時は、Releaseの代わりにDebugを指定して下さい。<br>
#### Visual Studio 2015(32bits版)の場合
cmake -G "Visual Studio 14" <source/samples/exampleフォルダ> -DTHEOLIZER_DIR=<Theolizerルート・フォルダ>
mkdir msvc32
cd msvc32
cmake -G "Visual Studio 14" .. -DTHEOLIZER_DIR=<Theolizerルート・フォルダ>
cmake --build . --config Release --target BuildTest
#### Visual Studio 2015(64bits版)の場合
cmake -G "Visual Studio 14 Win64" <source/samples/exampleフォルダ> -DTHEOLIZER_DIR=<Theolizerルート・フォルダ>
mkdir msvc64
cd msvc64
cmake -G "Visual Studio 14 Win64" .. -DTHEOLIZER_DIR=<Theolizerルート・フォルダ>
cmake --build . --config Release --target BuildTest
#### MiGWの場合(事前にMinGWへのパスを設定下さい)
cmake -G "MinGW Makefiles" <source/samples/exampleフォルダ> -DTHEOLIZER_DIR=<Theolizerルート・フォルダ> -DCMAKE_BUILD_TYPE=Release
mkdir mingw
cd mingw
cmake -G "MinGW Makefiles" .. -DTHEOLIZER_DIR=<Theolizerルート・フォルダ> -DCMAKE_BUILD_TYPE=Release
make BuildTest
#### gcc(Linux)の場合
cmake -G "Unix Makefiles" <source/samples/exampleフォルダ> -DTHEOLIZER_DIR=<Theolizerルート・フォルダ> -DCMAKE_BUILD_TYPE=Release
mkdir gcc
cd gcc
cmake -G "Unix Makefiles" .. -DTHEOLIZER_DIR=<Theolizerルート・フォルダ> -DCMAKE_BUILD_TYPE=Release
make BuildTest
<br>
Expand Down
31 changes: 14 additions & 17 deletions source/document/ja/6.usage_total.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,11 @@ Theolizerをインストールした後、あなたのデータをTheolizerで
一部例外(*1)はありますが原則として、<b>シリアライズするクラスとenum型の定義</b> 前にシリアライザのヘッダをインクルードして下さい。<br>
<b>Json形式シリアライザ・ヘッダのインクルードと型定義の例:(source/samples/example/example.h)</b>
<b>Json形式シリアライザ・ヘッダのインクルードと型定義の例:(source/samples/example/example.cpp)</b>
@dontinclude example.h
@skip ********
@until };
@until };
@dontinclude example.cpp
@skip #include <theolizer
@until #include <theolizer
<div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333; border-radius: 10px; background-color: #d0d0d0;">
(*1) 例外:<b>非侵入型</b>(@ref Basic12)のクラスやenum型の<b>非侵入型完全自動</b>については、<b>シリアライザのヘッダをインクルード</b>する前でも定義できます。<br>
Expand Down Expand Up @@ -130,8 +129,6 @@ fstreamがテキスト・モードでオープンされている場合、ファ
なお、シリアライズ対象の型を含まないヘッダ・ファイルは、Theolizerに関する順序制限はありません。
<b>クラスとenum型定義例:(source/samples/example/example.h)</b>
// ***************************************************************************
@subsection IncludeAutoGeneratedFile 2-3.Theolizerの自動生成ファイルをインクルード
// ***************************************************************************
Expand All @@ -144,12 +141,14 @@ Theolizerは、バージョンを上げた時に古いクラス定義やenum型
自動生成するファイルのファイル名は、そのコンパイル単位のファイル名に".theolzier.hpp"を繋げたものです。<br>
例えば、<b>example.cpp</b> の場合は、<b>example.cpp.theolizer.hpp</b> となります。
<b>:(source/samples/example/example.cpp)</b>
<b>クラス定義と*.theolizer.hppインクルード指定例:(source/samples/example/example.cpp)</b>
@dontinclude example.cpp
@skip include
@until example.cpp.theolizer.hpp
この例では、example.cppの頭でクラスを定義していますが、example.hで定義し、\#include "example.h" にてインクルードするのが一般的です。
// ***************************************************************************
@subsection SerializingProcess 2-4.シリアライズ処理
// ***************************************************************************
Expand All @@ -164,14 +163,14 @@ Theolizerは、バージョンを上げた時に古いクラス定義やenum型
保存や送信時はstd::ostreamを、回復や受信時はstd::istreamを与えて下さい。
- <b>保存(送信用)シリアライザ</b> <br>
theolizer::JsonOSerialzier<br>
theolizer::BinaryOSerialzier<br>
theolizer::FastOSerialzier<br>
theolizer::JsonOSerializer<br>
theolizer::BinaryOSerializer<br>
theolizer::FastOSerializer<br>
- <b>回復(受信用)シリアライザ(デシリアライザ)</b> <br>
theolizer::JsonISerialzier<br>
theolizer::JsonISerializer<br>
theolizer::BinaryISerializer<br>
theolizer::FastISerialzier<br>
theolizer::FastISerializer<br>
@subsubsection Request 2-4-2.シリアライズ処理要求
下記マクロでシリアライズします。保存用シリアライザを指定すると保存、回復用シリアライザを指定すると回復動作となります。<br>
Expand Down Expand Up @@ -209,14 +208,12 @@ xmlも将来的にサポートする予定ですが、その際も同じマク
<b>ファイルへの保存例:(source/samples/example/example.cpp)</b>
@dontinclude example.cpp
@skip try
@skip {
@skip 保存
@until }
<b>ファイルからの回復例:(source/samples/example/example.cpp)</b>
@skip try
@skip {
@skip 回復
@until }
<br>
Expand Down
2 changes: 1 addition & 1 deletion source/document/ja/7.usage_individual.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ enum型は従来のenum型と、C++11で追加されたscoped enum型の2つ
//############################################################################
以下のアイテムを保存し、回復して保存した値と同じ値が回復できたことを、全てのシリアライザの全ての書式指定オプションに対して確認しています。(@ref TestProgram 参照)
- C++言語がサポートする組み込み型全て<br>
- C++言語がサポートする基本型全て<br>
char, signed char, unsigned char, wchar_t, u16char, u32char,<br>
short, int, long, long long,<br>
unsigned short, unsigned int, unsigned long, unsigned long long,<br>
Expand Down
6 changes: 3 additions & 3 deletions source/document/ja/7g.modify_class.h
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ Keep-step処理しない(Non-keep-step)基底クラスやメンバ変数用
クラス型メンバ変数にに含まれるプリミティブ型とenum型変数も変更可能です。更に、クラス型メンバ変数にに含まれるクラス型メンバ変数に含まれるプリミティブ型とenum型変数も変更可能です。(以下同様)<br>
<br>
2. それ以外のものは変更してはいけません。<br>
@ref Basic36 参照<br>
@ref Basic343 参照<br>
- ポインタ、および、参照が指す先のインスタンス
- 非侵入型手動クラスの基底クラス、および、メンバ変数
- ポインタそれ自身<br>
Expand Down Expand Up @@ -877,7 +877,7 @@ struct KeepStepTest::TheolizerUserDefine<tTheolizerVersion, tNextVersion, 1>
iNextVersion引数は次バージョンです。<br>
oNowVersionは現バージョン(テンプレート引数で指定したバージョン)です。<br>
それぞれ@link HowToModifyClass41 TheolizerVersionクラス@endlink のインスタンスが渡ってきます。<br>
iNextVersionを参照しつつ、oNowVersionの@link Basic36 設定可能なメンバ@endlink を設定して下さい。<br>
iNextVersionを参照しつつ、oNowVersionの@link Basic343 設定可能なメンバ@endlink を設定して下さい。<br>
<br>
<b>設定例:</b>
@code
Expand All @@ -893,7 +893,7 @@ oNowVersion.mData0=iNextVersion.mData0-100;
iNowVersionは現バージョン(テンプレート引数で指定したバージョン)です。<br>
tNextVersion引数は次バージョンです。<br>
それぞれ@link HowToModifyClass41 TheolizerVersionクラス@endlink のインスタンスが渡ってきます。<br>
iNextVersionを参照しつつ、oNowVersionの@link Basic36 設定可能なメンバ@endlink を設定して下さい。<br>
iNextVersionを参照しつつ、oNowVersionの@link Basic343 設定可能なメンバ@endlink を設定して下さい。<br>
<br>
<b>設定例:</b>
@code
Expand Down
2 changes: 1 addition & 1 deletion source/document/ja/7h.error_report.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ no-exception : Error(UnknownData),ashort{test_basic_process.cpp(256)} : Logical
ソース・コードは、source/reference_and_test/ver3b/test_modify_complex.hにて、ERROR1, ERROR2マクロが定義されている時にコンパイル・エラーになるように定義しています。そして、source/reference_and_test/CMakeLists.txtのver3bERROR1, ver3bERROR2にてコンパイル・エラーが発生することをチェックしています。
@subsection ErrorReport73 7-3.グローバル・バージョン番号テーブルのエラー検出
バージョン・アップに伴い、一度シリアライズ指定したクラスやenum型をソース・コードから完全に削除した場合に、グローバル・バージョン番号テーブルから手動で削除する必要があります。(@ref Basic372 参照。)<br>
バージョン・アップに伴い、一度シリアライズ指定したクラスやenum型をソース・コードから完全に削除した場合に、グローバル・バージョン番号テーブルから手動で削除する必要があります。(@ref Basic344 参照。)<br>
その削除を忘れた場合にコンパイル・エラーになることを確認しています。
ソース・コードは、source/reference_and_test/ver3b/test_modify_complex.hにて、ERROR3マクロが定義されている時にコンパイル・エラーになるように定義しています。そして、source/reference_and_test/CMakeLists.txtのver3bERROR3にてコンパイル・エラーが発生することをチェックしています。
Expand Down
6 changes: 6 additions & 0 deletions source/library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,12 @@ else()
install(TARGETS ${TheolizerLib} DESTINATION ${LIB_DIR})
endif()

if (${IS_MSVC})
file(GLOB_RECURSE PDBS ${CMAKE_CURRENT_BINARY_DIR}/*.dir/Debug/*.pdb)
message(STATUS "PDBS=${PDBS}")
install(FILES ${PDBS} DESTINATION ${LIB_DIR})
endif()

# ---<<< TheolizerTest >>>---

add_library(${TheolizerTest} ${THEOLIZER_TEST_LIST})
Expand Down
Loading

0 comments on commit 0a892d3

Please sign in to comment.