In termini astratti, una pipe è un contenitore di flusso/FIFO con una lettura distruttiva. Ha un metodo read()
che copia blocchi di dati tutti in una volta e funziona come get
e put
per singoli byte. Quando viene restituito lo read
o get
, i dati che sono stati copiati dalla pipe vengono rimossi dal buffer interno della pipe, diversamente da un file o da qualsiasi altro tipo di contenitore.Esiste una classe STL C++ che funziona come una pipe?
La maggior parte (tutti?) Dei contenitori STL non fornisce un comando simile read()
in un buffer. Esiste un tipo di contenitore di tipo fifo con un membro pop_many()
?
stringstream
è la cosa più vicina a cui riesco a pensare poiché mantiene un puntatore interno di lettura e le future letture si bloccheranno fino a quando il flusso non si riempie nuovamente. Il contenitore è vuoto dal punto di vista dell'API, ma i dati consumati dovrebbero essere raccolti manualmente.
Esiste un contenitore o una classe di flusso equivalente in C++ che esegue questa operazione o si tratta di eseguire il roll-your-own (come nell'esempio stringstream)?
forse una coda? – Gir
Potrei inserire un loop attorno a queue.pop(), ma non è efficiente. Voglio essere in grado di rimuovere grandi blocchi di dati e la coda/fifo si ridimensiona automaticamente dopo averli rimossi. –
Per cosa ti serve? –