在protobuf列表的开头插入一个项目

Mat*_*lay 3 c++ list protocol-buffers

我正在尝试在protobuf消息列表的开头插入一个项目.add_foo将项目追加到结尾.有一种简单的方法可以在开头插入它吗?

Fra*_*ser 8

使用协议缓冲区AFAIK没有内置的方法.当然,文档似乎没有表明任何这样的选择.

一种合理有效的方法可能是在正常结束时添加新元素,然后反向遍历元素,将新元素交换到前一个元素之前,直到它位于列表的前面.例如,对于一个protobuf消息,例如:

message Bar {
  repeated bytes foo = 1;
}
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

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';
Run Code Online (Sandbox Code Playgroud)