Есть классы, которые отвечают за чтение и запись. Имеют прототип
class Some
{
int read (void* ptr, int size);
int write(const void* ptr, int size);
}
Но например для сокетов, зная размер, нужно вычитывать данные, пока не прочитал все
void read (void* ptr, int size)
{
char* pbuffer = (char *)ptr;
while (size > 0)
{
int bytes = some.read(buffer, size);
size -= bytes;
pbuffer += bytes;
}
}
поэтому пришлось создать базовый класс
class IODevice{
private :
virtual int onRead (void* ptr, int size) = 0;
virtual int onWrite(void* ptr, int size) = 0;
public :
void read (void* ptr, int size)
{
while(...)
{
if (error) throw ...;
}
}
void write(void* ptr, int size)
{
while(...)
{
if (error) throw ...;
}
}
}
И для всех классов, которым необходимо синхронное чтение заданного объема данных
наследуются от него и переопределяют виртуальные методы.
Это не очень удобно.
Есть ли что в boost для этих целей ? Хотелось бы работать как с потоками.