プログラムにいくつかの動的キューがあり、処理中に要素を後ろまたは真ん中に追加/前から削除でき、処理が完了すると要素をメモリに保存することはありません.ただし、次を含むシーケンスの動的状態をログ/シリアル化したいイントロスペクションのためにすべての要素を削除しました。
例えば
struct element1{};
struct element2{};
std::deque<element1> v1;
std::deque<element2> v2;
if(some_cond1)
{
v1.push_back(element1{});
//log v1.back()
v1.push_back(element1{});
//log v1.back()
}
if(some_cond2)
{
v2.push_back(element2{});
//log v2.back()
v2.push_back(element2{});
//log v2.back()
}
if(another_cond)
{
v1.pop_front();//presently I am not logging removal of elements
v2.pop_front();
}
if(a_third_cond)
{
v1.insert(some_pos,element1{});
//log v1,some_pos
}
私は2つの代替ソリューションを検討しています。
- 配列/オブジェクトを別の場所に分散させ、一意の名前/IDを介して参照できるようにするデータ形式(JSONなど)はありますか?私が行くようにシーケンス?
例えば
{
"v1" : [],
"v2" : [],
append("v1"):
[
"elem1_v1", "elem2_v1"
],
append("v2"):
[
"elem1_v2", "elem2_v2"
],
insert("v1",1):
[
"elem3_v1"
]
}
- 複数の異なる場所に 1 つのファイルに書き込んで、各シーケンスが独自の場所を追跡し、その場所に書き込み、最終結果が単純な連続シーケンス記述になるようにすることは可能ですか? (私が考えることができるのは、ファイルでバックアップされた SGI ロープの実装のようなものです)
この場合、最終結果は次のようになります。
{
"v1" : ["elem1_v1","elem3_v1","elem2_v1"],
"v2" : ["elem1_v2","elem2_v2"]
}
もちろん、大まかな方法で、すべての要素をフラットファイルに記録し、どのシーケンスとどこにあるかなどの情報を前に付けて、ファイル全体でそれらを検索して再構築することができます。ただし、そのような問題に対処できる場合は、より堅牢で構造化された代替手段を探しています。