boost::iostream
От: gpepsi  
Дата: 06.04.11 07:39
Оценка:
Есть классы, которые отвечают за чтение и запись. Имеют прототип

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 для этих целей ? Хотелось бы работать как с потоками.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.