crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 2:43