Отрезать голову буферу в stringstream
stringstream buff наполняется через buff.rdbuf()->sputn(data, len)
потом делаются операции
...tellg ...getline ...seekg
после seekg то что находится перед указателем g
мне не нужно - надо освободить эту память. А указательp
должен писать данные там где остановился.
Если смотреть на эту илюстрацию, то переместить put begin pointer и get begin pointer на get next pointer и освободить память.
Есть идея вырезать кусок между g и p в новый буфер, удалять старый буфер и заменить его новым, потом выставить указатели на начало и конец... но это совсем не потокобезопасно.