3

メッセージの protobuf リストの先頭にアイテムを挿入しようとしています。add_fooアイテムを末尾に追加します。最初に挿入する簡単な方法はありますか?

4

1 に答える 1

10

プロトコルバッファAFAIKを使用してこれを行う組み込みの方法はありません。確かに、ドキュメントはそのようなオプションを示していないようです。

かなり効率的な方法は、通常どおり最後に新しい要素を追加してから、要素を逆反復し、リストの先頭になるまで前の要素の前にある新しい要素を交換することです。たとえば、次のようなprotobufメッセージの場合:

message Bar {
  repeated bytes foo = 1;
}

あなたができること:

Bar bar;
bar.add_foo("two");
bar.add_foo("three");

// Push back new element
bar.add_foo("one");
// Get mutable pointer to repeated field
google::protobuf::RepeatedPtrField<std::string> *foo_field(bar.mutable_foo());
// Reverse iterate, swapping new element in front each time
for (int i(bar.foo_size() - 1); i > 0; --i)
  foo_field->SwapElements(i, i - 1);

std::cout << bar.DebugString() << '\n';
于 2012-06-25T23:43:36.840 に答える