プログラミングの仕方の質問なんだけど、
擬似コードを以下に。
// フレームワーク側で、recvイベントが発生した際に呼ばれる関数。
// 受信したデータがbufにバッファリングされてる
void F(buffer &buf){
if(buf.size()==0) return;
// TLV形式で、Typeを取ってくる
switch(buf[0]){
 case MAP_DATA:
  if(buf.size()<5) return;
  size_t len = *(size_t*)(&buf[1]);
  // TLを読み込んだ時点で、読み込んだサイズ分、bufからpopする
  buf.pop(5);
  // (*ここで質問)データを処理する
  // len分データが届いていなかったら、届いてる分だけ処理してreturnする
}
こういうコードの場合、len分データが届いてなかったらreturnして、またFが呼ばれるのを待つんだけど、
次にFが呼ばれた場合、TLの解析は飛ばして、(*ここで質問)から処理を再開させたい
んだけど、coroutineとかステートパターンみたいなことを駆使しなきゃダメなの?
それとももっと別の"データを処理するためのコーディング方法/パラダイム"みたいなものがあるの?