Буферы потоков могут накладывать различные ограничения на последовательности, которыми они управляют. Некоторые ограничения:
Управляемая входная последовательность не читается.
Управляемая выходная последовательность не может быть записана.
Управляемые последовательности могут быть связаны с содержимым других представлений для последовательностей символов, таких как внешние файлы.
Управляемые последовательности могут поддерживать операции directly с ассоциированными последовательностями или из них.
Управляемые последовательности могут налагать ограничения на то, как программа может читать символы из последовательности, записывать символы в последовательность, возвращать символы во входную последовательность или изменять положение потока.
Каждая последовательность характеризуется тремя указателями, которые, если они не равны нулю, все указывают на один и тот же charT объект массива. Объект массива представляет в любой момент (под) последовательность символов из этой последовательности. Операции, выполняемые над последовательностью, изменяют значения, хранящиеся в этих указателях, выполняют чтение и запись непосредственно в или из связанных последовательностей, а также изменяют «позицию потока» и состояние преобразования по мере необходимости для поддержания этой взаимосвязи подпоследовательностей. Три указателя:
адрес beginning pointer, или наименьший адрес элемента в массиве (называемый xbeg здесь);
адрес next pointer, или следующий элемент, который является текущим кандидатом на чтение или запись ( xnext здесь называется );
end pointerили первый элемент адрес за концом массива ( так называемый xend здесь).
Следующие семантические ограничения всегда должны применяться к любому набору из трех указателей для последовательности, используя имена указателей, указанные непосредственно выше:
Если xnext не является нулевым указателем, то xbeg и xend также должны быть ненулевыми указателями на тот же charT массив, как описано выше; в противном случае xbeg и xend также должно быть недействительным.
Если xnext это не нулевой указатель и xnext < xend для выходной последовательности, то write position доступен. В этом случае *xnext должен быть назначен в качестве следующего элемента для записи (для помещения или сохранения символьного значения в последовательность).
Если xnext это не нулевой указатель и xbeg < xnext для входной последовательности, то putback position доступен. В этом случае xnext[-1] должен иметь определенное значение и быть следующим (предыдущим) элементом для хранения символа, который возвращается во входную последовательность.
Если xnext это не нулевой указатель и xnext < xend для входной последовательности, то read position доступен. В этом случае *xnext должен иметь определенное значение и быть следующим элементом для чтения (для получения или для получения символьного значения из последовательности).