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

В общем мне стыдно, но похоже там все настолько запутано, что разобраться не представляется реальным

. В связи с этим вопрос, нельзя ли где-нибудь почитать об этом всем?
Ну я когда-то разбирался, и тупые буфера с массивом/строкой писал, и файловый то ли писал, то ли недописал, но, в общем разобрался.
Туманно - да. Хуже того, в оригинальном стд (1998) - там еще и не все специфицировано, что должно быть, с протектед интерфейсом бэйсик_буфера там недочет вышел.

Так что приходилось полагаться на implementation. Поменял тогда (в мингв сидел) версию типа 3.2 на 3.4.5 что ли - пришлось поправлять тот метод, который у меня лазил в impl завместо отсутствующего protected интерфейса - там как раз это место тогда решили слегка поправить в гнутой либе.

Словом, занимался реверс инжинирингом, пытаясь по исходиникам понять стратегию работы... поскольку не слишком оно очевидно оказалось, с файлбуфером.
Что читать - не знаю. Думаю, самое эффективное будет - почитать src. Или спрашивайте чего конкретно, может вспомню.
Собств-но у Страуструпа немножко есть. Но если серьезно, то там три указателя, виртуалки для записи-чтения следующего блока, плюс карман для unget-инга, в отдельных ситуациях он бывает нужен. Остальное - только ветвления и проверки, проверки и ветвления, в попытке учесть все режимы открытия и все ситуации. И пробелы в стандарте, касательно того, где что когда нужно проверять или нет.
Так что там читать-рассказывать особ не про что, там только небольшая кучка условий, которые могут складывать в разных комбинациях, такой кубик-рубик, и бедный программер, который чокнется, пытаясь отследить, ну на этот-то раз он уже все учел, или опять что-то упустил?