У нас есть приложение, в котором нам нужно десериализовать некоторые данные из одного потока в несколько объектов.
Массив данных представляет собой количество сообщений переменной длины, упакованных вместе. В потоке нет кодов, разделяющих сообщения.
Мы хотим сделать что-то вроде:
void Decode(byte[] Data)
{
Object0.ExtractMessage(Data);
Object1.ExtractMessage(Data);
Object2.ExtractMessage(Data);
...
}
где каждый вызов ProcessData знает, с чего начать в массиве. В идеале мы бы сделали это, не передавая ссылку DataIx
.
Чтобы сделать это в C ++, мы просто поместим указатель в массив, и каждая функция ProcessData будет увеличивать его по мере необходимости.
Каждый объектный класс знает, как его собственные сообщения сериализуются, и на него можно полагаться (в C ++), чтобы вернуть указатель в начале следующего сообщения в потоке.
Есть ли какой-то встроенный механизм, который мы можем использовать для этого (без перехода unsafe
)? Операция высокочастотная (~ 10kps) и очень легкая. Мы также не хотим копировать или обрезать массив.
Спасибо за вашу помощь.