-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
標準コンテナとスマート・ポインタ対応 #24
Comments
そのために、std::default_delete<>に対応 シリアライズ処理は不要だが、std::unique_ptr<>をTheolizerヘッダ出力のため、 型名へ変換している。それに対応ずするため、型名出力に対応した。 そのために、テンプレート・パラメータの型名出力用指定マクロ THEOLIZER_TEMPLATE_PARAMETER_TEMPLATE()を追加。 この時、ドライバ出力を抑制した(NoGenerate)。 std::weak_ptr<>対応コードを記述した。未デバッグ。 ver1/main.cppでDISABLE_DESTINATIONS_TESTに対応漏れが有ったので修正した。 ----------------- MD5 Hash Values ----------------- TheolizerDriver : 01634e390f2c18bbbe6942fedef89e68 TheolizerLibrary : 7fa29136f6e160286151179b61c26665 Library's Header : 7d3bfed8da4eb20a73e5950dd05c9794 ----------------- MD5 Hash Values ----------------- TheolizerDriver : 225a51de843816c8b047fe594e2a4dc3 TheolizerLibrary : 7fa29136f6e160286151179b61c26665 Library's Header : 7d3bfed8da4eb20a73e5950dd05c9794
std::set, std::map群の実装を開始するのですが、それに当たって1点仕様を変更しようと思います。 現状の仕様まず、現在の仕様はクラスについてはポインタ経由でシリアライズされたら、自動的にそのクラスのインスタンスをオブジェクト追跡しています。 (1)の問題は先日、std::vector<>等を派生したクラス(theolizer::VectorPointee<>等)で対応できたと思います。(オブジェクト追跡しない時は標準のコンテナをそのまま使い、オブジェクト追跡したい時は派生したコンテナを使う。) 問題点std::setやstd::map等のキー付きコンテナの場合、コンテナ内に領域を獲得してから、そこへ値を設定できるようなI/Fが用意されていません。従って、一旦別領域へ回復(2)後、コンテナへ登録することになります。 (3)例えstd::move()してもインスタンスそのものがムーブされるわけではなく、インスタンス内のヒープ領域の所有権が移動するだけです。 変更仕様クラスについてもプリミティブと同様、明示的に指定した時のみ被ポインタとしてオブジェクト追跡するように変更します。 トレードオフ
結論メリット・デメリットを比較し、クラスの自動追跡をしない方が使い勝手は良さそうなので自動追跡を止めます。なお、THEOLIZER_INTERNAL_DISABLE_AUTO_POINTEEシンボルを解除することで自動追跡が有効になるようロジックを残しておきます。 |
ポイントされているクラスのインスタンスを自動追跡するようにしていたが、それを止めた。 THEOLIZER_INTERNAL_DISABLE_AUTO_POINTEEをコメントアウトすると回復できる。 ----------------- MD5 Hash Values ----------------- TheolizerDriver : 1bc5151679c06c22329818ad7ff6291e TheolizerLibrary : 021dbbc29a9fd4456c63bdfc988f62ba Library's Header : 8abfc2488332f8f67ed3e3a7965f9887
更に1点修正です。 Theolizerは保存先指定により、1つのクラス内のデータを複数のファイルに分割して保存し、それらを回復時に合成することで元のデータを回復できる機能を持っています。 その際に、キー回復後、コンテナ内に該当データが無い場合でもそのキーで領域を一旦確保することが可能です。従って、前回の仕様変更で断念したキー付きコンテナの内、std::mapとstd::unordered_mapについては被ポインタとしての回復にも対応しました。 現在の対応仕様
なお、multimapとunordered_multimapについては同様の手法により「被ポインタ」に対応することが可能ですが、下記理由により現時点では対応していません。必要性が高いことが分かったら対応します。
|
バージョン名の"-Prerelease."を解除。 2017/01/31の警告レベルアップ時の対処漏れ追加。 msvcのデバッグ・ビルドでclangのDecl.h(C4389)とHashing.h(C4310)にて警告がでていたので修正。 fast_serializer.hでC4251ディセーブル漏れ追加。 ----------------- MD5 Hash Values ----------------- TheolizerDriver : 237e5af395c8b8bd4162c97c923c4903 TheolizerLibrary : 1f50826361e1a8fda9cfe6a4d998e3d3 Library's Header : 5af7578870c837e4a82f3f60fcb61f6b
v0.4.3としてリリースしました。 |
対応可能な標準のコンテナとスマート・ポインタへの正規対応を行います。
現在は下記について仮対応しています。
現在は、デフォルトがあるテンプレート・パラメータに対応していません。
それらも含めて、できるだけフル・スペックでの対応を目指します。
The text was updated successfully, but these errors were encountered: