142 Глава 8. Потоки и файлы
peekFor: anObject «Подсматривает» следующий элемент потока (как сообщение
peek), при этом, если этот элемент равен anObject, то продвигает указатель на
следующую позицию и возвращает true, иначе возвращает false и не меняет
указатель.
upTo: anObject Возвращает набор элементов, доступных получателю, начиная от
следующего доступного элемента и до элемента anObject, не включая его
(если anObject отсутствует в наборе, то — до конца набора); устанавливает
указатель позиции за элемент anObject.
nextPut: anObject Сохраняет аргумент anObject, как следующий элемент получа-
теля, и продвигает указатель за anObject; возвращает anObject.
nextPutAll: aCollection Сохраняет элементы из аргумента aCollection, как следую-
щие элементы получателя; возвращает aCollection.
next: anInteger put: anObject Сохраняет аргумент anObject, как следующий эле-
мент получателя anInteger раз; возвращает anObject.
Чтобы определить, возможен ли доступ к потоку, каково состояние по-
тока и его переменных, протокол класса Stream определяет сообщения до-
ступа и проверки состояния.
Класс Stream Протокол экземпляра
atEnd Сообщает, имеет ли получатель доступ к какому-либо элементу.
isEmpty Возвращает true, если набор, доступный получателю, не имеет элементов,
иначе возвращает false.
contents Возвращает все элементы из набора, доступного получателю, в виде на-
бора, аналогичного тому, над которым струится поток.
do: aBlock Вычисляет блок aBlock для каждого доступного элемента получателя от
текущей позиции и до конца потока.
Реализация сообщения do: основывается на сообщениях atEnd и next.
do: aBlock
[self atEnd] whileFalse: [aBlock value: self next].
Поэтому do: нельзя посылать экземплярам класса WriteStream.
Так как экземпляру класса Stream «изве стно», как хранится указатель
позиции, класс поддерживает сообщения для работы с ним. Но все сообще-
ния из этого протокола, кроме первого, возвращают не значение перемен-
ной position, а сам поток.
Класс Stream Протокол экземпляра
position Возвращает текущий указатель позиции потока.
position: anInteger Устанавливает указатель на позицию, равную anInteger; если ар-
гумент выходит за допустимые границы, сообщает об ошибке.
reset Устанавливает указатель в начало потока.