2012-06-25 2 views

ответ

6

Нет встроенного способа сделать это с помощью буферов протокола AFAIK. Конечно, docs, похоже, не указывают на такой вариант.

Достаточно эффективным способом могло бы стать добавление нового элемента в конце как обычно, а затем выполнить обратную итерацию по элементам, заменяя новый элемент перед предыдущим, пока он не окажется впереди списка. Так, например, для сообщения 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'; 
Смежные вопросы