Написание собственного буфера потока. (Подскажите где можно почитать...)

Модератор: Модераторы разделов

(+ssvda)
Сообщения: 31
ОС: Debian GNU/Linux Etch (only)

Написание собственного буфера потока.

Сообщение (+ssvda) »

Требуется написать буфер для потока в C++ (класс, производный от std::basic_streambuf<>).

Обычно я пользуюсь текстом стандарта, когда у меня возникают какие-либо проблемы. Однако этот раздел там написан несколько туманно :tongue: В общем мне стыдно, но похоже там все настолько запутано, что разобраться не представляется реальным :blush: . В связи с этим вопрос, нельзя ли где-нибудь почитать об этом всем?

ЗЫ естественно гуглил, но ничего путного не нашел. В основном все что есть о буферах потока --- в той или иной мере перепевки стандарта, только воды больше.

Чувствую себя ламером((((
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Написание собственного буфера потока.

Сообщение sergio »

(+ssvda) писал(а):
22.09.2007 21:33
Требуется написать буфер для потока в C++ (класс, производный от std::basic_streambuf<>).

Обычно я пользуюсь текстом стандарта, когда у меня возникают какие-либо проблемы. Однако этот раздел там написан несколько туманно :tongue: В общем мне стыдно, но похоже там все настолько запутано, что разобраться не представляется реальным :blush: . В связи с этим вопрос, нельзя ли где-нибудь почитать об этом всем?


Ну я когда-то разбирался, и тупые буфера с массивом/строкой писал, и файловый то ли писал, то ли недописал, но, в общем разобрался.
Туманно - да. Хуже того, в оригинальном стд (1998) - там еще и не все специфицировано, что должно быть, с протектед интерфейсом бэйсик_буфера там недочет вышел. :happy: Так что приходилось полагаться на implementation. Поменял тогда (в мингв сидел) версию типа 3.2 на 3.4.5 что ли - пришлось поправлять тот метод, который у меня лазил в impl завместо отсутствующего protected интерфейса - там как раз это место тогда решили слегка поправить в гнутой либе. :happy: Словом, занимался реверс инжинирингом, пытаясь по исходиникам понять стратегию работы... поскольку не слишком оно очевидно оказалось, с файлбуфером.
Что читать - не знаю. Думаю, самое эффективное будет - почитать src. Или спрашивайте чего конкретно, может вспомню.

Собств-но у Страуструпа немножко есть. Но если серьезно, то там три указателя, виртуалки для записи-чтения следующего блока, плюс карман для unget-инга, в отдельных ситуациях он бывает нужен. Остальное - только ветвления и проверки, проверки и ветвления, в попытке учесть все режимы открытия и все ситуации. И пробелы в стандарте, касательно того, где что когда нужно проверять или нет. :happy:
Так что там читать-рассказывать особ не про что, там только небольшая кучка условий, которые могут складывать в разных комбинациях, такой кубик-рубик, и бедный программер, который чокнется, пытаясь отследить, ну на этот-то раз он уже все учел, или опять что-то упустил?
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
(+ssvda)
Сообщения: 31
ОС: Debian GNU/Linux Etch (only)

Re: Написание собственного буфера потока.

Сообщение (+ssvda) »

Ладно, буду дальше биться головой о стену стандарта)))

Если что выйдет, напишу что-ли статейку по этому поводу)
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Написание собственного буфера потока.

Сообщение sergio »

(+ssvda) писал(а):
23.09.2007 21:31
Ладно, буду дальше биться головой о стену стандарта)))

Успехов. =)

Если буфер понимает позиционирование, то при вызове любой функции позиционирования содержимое буфера пишется (если он был в "состоянии записи" и есть что-то в буфере).
Отслеживается в чтении или записи мы сейчас работаем, и при переключении из записи в чтение буфер опять же записывается если есть что, и считывается блок для чтения соотв-но. При переключении из чтения в запись - просто обнуляется. При позиционировании пишется, обнуляется, собственно позиционируется, и ждет что мы захотим дальше делать.
Примерно так.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Написание собственного буфера потока.

Сообщение v04bvs »

http://anatolix.naumen.ru/Books/CPPSTL?v=dbl

здесь посмотрите, я точно не помню, но кажется там эта тема обсуждалась
Спасибо сказали: