Spec-Zone.ru › C++

std::basic_spanbuf<CharT,Traits>::seekoff

protected:
pos_type seekoff( off_type off, std::ios_base::seekdir dir,
                  std::ios_base::openmode which = 
                      std::ios_base::in | std::ios_base::out ) override;
(начиная с C++23)

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

Пусть n — количество элементов CharT в базовом буфере или 0, если базового буфера нет. Эта функция завершается неудачей, если

  • указатель следующей позиции в области чтения и/или записи, который требуется переместить, равен null, а вычисленное значение newoff (см. ниже) не равно нулю; это может произойти, если базового буфера нет или *this не открыт в режиме, требуемом для which, или
  • dir равен std::ios_base::cur, а и std::ios_base::in, и std::ios_base::out установлены в which, или
  • вычисленное значение newoff не представимо в off_type, меньше нуля или больше n.

newoff вычисляется следующим образом:

  • Если dir равен std::ios_base::beg, то newoff равен off.
  • Если dir равен std::ios_base::cur, то newoff равен
    • pptr() - pbase() + off, если std::ios_base::out установлен в which, или
    • gptr() - eback() + off, если std::ios_base::in установлен в which.
  • Если dir равен std::ios_base::end, то newoff равен
    • pptr() - pbase() + off, если std::ios_base::out, но не std::ios_base::in, установлен в режиме открытия *this,
    • в противном случае — off + n.

В случае успеха эта функция перемещает указатель следующей позиции в области чтения и/или записи в pbuf + newoff, если в which соответственно установлены std::ios_base::in и/или std::ios_base::out, где pbuf — указатель на начало базового буфера либо нулевой указатель, если базового буфера нет.

Параметры

off - относительная позиция, в которую требуется установить указатель(и) следующей позиции
dir - задает базовую позицию, относительно которой применяется смещение. Может быть одной из следующих констант:
Константа Пояснение
beg начало потока
end конец потока
cur текущая позиция указателя позиции потока
which - задает, к какой последовательности применяются изменения: входной, выходной или к обеим. Может быть одной или комбинацией следующих констант:
Константа Пояснение
in применить изменения к входной последовательности
out применить изменения к выходной последовательности

Возвращаемое значение

pos_type(newoff) в случае успеха, pos_type(off_type(-1)) в случае неудачи.

Пример

См. также

seekoff
[виртуальная]
перемещает указатель следующей позиции во входной последовательности, выходной последовательности или обеих, используя относительную адресацию
(виртуальная защищенная функция-член класса std::basic_stringbuf<CharT,Traits,Allocator>)
seekoff
[виртуальная]
перемещает указатель следующей позиции во входной последовательности, выходной последовательности или обеих, используя относительную адресацию
(виртуальная защищенная функция-член класса std::strstreambuf)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_spanbuf/seekoff

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API