crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QDataStream
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
flankerr Дата 30.7.2008, 11:33
  Фактически мне нужна очередь
То что мне надо я уже реализовал сам и выложи распечтаку кода - просто и быстро.
QBuffer использует seek т.е. он читает с указанного места и НЕ удаляет после прочтения.
Litkevich Yuriy Дата 29.7.2008, 17:36
 
Цитата(flankerr @ 29.7.2008, 20:00) *
но в купе с QDataStream

Цитата(flankerr @ 28.7.2008, 16:37) *
т.е. мне нужен некий буффер в конец которого я записываю произвольнео число байт

а при чем тут QDataStream?

тебе в сетаки что надо?
если буфер, то вот он QBuffer - готовый, не надо изобретать велосипед.
flankerr Дата 29.7.2008, 16:00
  QBuffer штука возможно хорошая но в купе с QDataStream для обозначенных целей получается стрельба из пушки даже не по воробьям а по комарам :)

Вот классик который делает то что мне надо быстро и просто:

class CBuffer
{
private:
    char*        m_pBuffer;
    unsigned int        m_iBufferSize;

public:
                        CBuffer()
                        {
                            m_pBuffer = NULL;
                            m_iBufferSize = 0;
                        }
                        CBuffer(const CBuffer &buf)
                        {
                            Delete();
                            m_iBufferSize = buf.Size();
                            m_pBuffer = new char[m_iBufferSize];
                        }
                        ~CBuffer()
                        {
                            Delete();
                        }
    void                Add(char*,unsigned int size);
    bool                Get(char*,unsigned int size);
    void                Delete();
    const unsigned int    Size() const;
};


inline void CBuffer::Delete()
{
    if(m_pBuffer)
    {
        delete m_pBuffer;
        m_pBuffer = NULL;
        m_iBufferSize = 0;
    }
}

inline const unsigned int CBuffer::Size() const
{
    return m_iBufferSize;
}

inline void CBuffer::Add(char* pBuf,unsigned int size)
{
    if(size)
    {
        char* pTmp = new char[m_iBufferSize + size];
        if(m_iBufferSize && m_pBuffer)
        {
            memcpy(pTmp,m_pBuffer,m_iBufferSize);
            delete m_pBuffer;
        };
        memcpy(pTmp + m_iBufferSize,pBuf,size);
        m_pBuffer = pTmp;
        m_iBufferSize += size;
    };
}

inline bool CBuffer::Get(char* pBuf,unsigned int size)
{
    bool res = false;
    if(m_pBuffer && size)
    {
        if( m_iBufferSize < size)
        {
            size = m_iBufferSize;
        };

        res = true;
        memcpy(pBuf,m_pBuffer,size);

        m_iBufferSize -= size;
        char* pTmp = NULL;

        if(m_iBufferSize)
        {
            pTmp = new char[m_iBufferSize];
            memcpy(pTmp,m_pBuffer+size,m_iBufferSize);
        }
        delete m_pBuffer;
        m_pBuffer = pTmp;
    };
    return res;
}
void* Дата 28.7.2008, 19:44
  так а QBuffer чем не подходит? его также можно использовать вместе с QDataStream и QTextStream
flankerr Дата 28.7.2008, 15:51
 
Цитата(Litkevich Yuriy @ 28.7.2008, 13:49) *
если покажется мало QBuffer'а
еще смотри такие: QQueue и QStack


1.Тогда уж лучше использовать STL-ные очереди
2.Очередь хороша для ФИКСИРОВАННОГО размера читаемых\записываемых данных. А мне надо ПРОИЗВОЛЬНЫЕ. Т.е. в моём случае надо делать обвязку с циклами. ПРи таком раскладе лучше уж "изобрести велосипед" с простым char* и memcpy будет гораздо эффективнее.
Litkevich Yuriy Дата 28.7.2008, 12:49
  если покажется мало QBuffer'а
еще смотри такие: QQueue и QStack
void* Дата 28.7.2008, 12:42
  для твоих целей как раз существует класс QBuffer
flankerr Дата 28.7.2008, 12:37
  т.е. просто как буффер использовать нельзя?

т.е. мне нужен некий буффер в конец которого я записываю произвольнео число байт а когда мне надо считываю происзвольное число байт из начала буффера. Просто не хотелось заново изобретать велосипед.
Litkevich Yuriy Дата 28.7.2008, 12:30
  помоему грабли как раз в том, что написал void* - устройство неуказано.
flankerr Дата 28.7.2008, 12:18
 
Цитата(Litkevich Yuriy @ 28.7.2008, 13:13) *
Returns the number of bytes actually written, or -1 on error

Ну то что ошибка это и так понятно
вопрос где грабли ?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 14.7.2020, 15:36