basic_streambuf :: seekoff, что должно быть возвращено, когда ios_base :: in | ios_base :: out указан? - PullRequest
8 голосов
/ 23 июля 2011

27.6.3.4.2 Управление буфером и позиционирование

pos_type seekoff(off_type off, ios_base::seekdir way,
    ios_base::openmode which = ios_base::in | ios_base::out);
  • Эффекты: изменяет позиции потока в пределах одного или нескольких контролируемые последовательности таким образом, который определяется отдельно для каждого класс, полученный из basic_streambuf в этом пункте (27.8.2.4, 27.9.1.5).
  • Поведение по умолчанию: Возвращает pos_type(off_type(-1)).

Пока все хорошо. Используемый мной вывод basic_streambuf может изменить его положение отдельно для ios_base::in и / или ios_base::out. Но что мне нужно вернуть, когда указаны оба?

Если вы укажете ios_base::in или ios_base::out, мы вернем новую позицию потока определенной последовательности.

Ответы [ 2 ]

1 голос
/ 23 июля 2011

Это немного зависит от вашего потока, чтобы определить, что происходит.Встроенные потоки отличаются тем, что некоторые могут иметь отдельные позиции для чтения и записи (stringstream), в то время как другие просто имеют одну (fstream).

Если пользователь выполняет репозицию и указывает как вход, так и выход, возможно, вам следуетпереместить оба.Если это поиск с нулевым смещением для получения текущей позиции, не исключено, что он потерпит неудачу, если позиции различаются.

0 голосов
/ 24 июля 2011

После поиска из 27.8.2.4 кажется, что вы ожидаете неудачу.

Проверьте таблицу условий 130, в которой говорится, что обе входные и выходные последовательности должны быть расположены только в том случае, если

(which & (ios_base::in | ios_base::out)) == (ios_base::in) | ios_base::out))
and way == either ios_base::beg or ios_base::end
...