std::basic_streambuf<CharT,Traits>::setg
protected: void setg( char_type* gbeg, char_type* gcurr, char_type* gend ); |
Задает значения указателей, определяющих область чтения.
После вызова eback() == gbeg, gptr() == gcurr и egptr() == gend все являются true.
Если любой из [gbeg, gend), [gbeg, gcurr) и [gcurr, gend) не является допустимым диапазоном, поведение не определено.
Параметры
| gbeg | - | указатель на новое начало области чтения |
| gcurr | - | указатель на новый текущий символ (указатель чтения) в области чтения |
| gend | - | указатель на новый конец области чтения |
Пример
#include <iostream>
#include <sstream>
class null_filter_buf : public std::streambuf
{
std::streambuf* src;
char ch; // single-byte buffer
protected:
int underflow()
{
traits_type::int_type i;
while ((i = src->sbumpc()) == '\0')
; // skip zeroes
if (!traits_type::eq_int_type(i, traits_type::eof()))
{
ch = traits_type::to_char_type(i);
setg(&ch, &ch, &ch+1); // make one read position available
}
return i;
}
public:
null_filter_buf(std::streambuf* buf) : src(buf)
{
setg(&ch, &ch + 1, &ch + 1); // buffer is initially full
}
};
void filtered_read(std::istream& in)
{
std::streambuf* orig = in.rdbuf();
null_filter_buf buf(orig);
in.rdbuf(&buf);
for (char c; in.get(c);)
std::cout << c;
in.rdbuf(orig);
}
int main()
{
char a[] = "This i\0s \0an e\0\0\0xample";
std::istringstream in(std::string(std::begin(a), std::end(a)));
filtered_read(in);
}
Вывод:
This is an example
Отчеты о дефектах
Следующие отчеты о дефектах, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 4023 | C++98 |
setg не требовал, чтобы входная последовательность была допустимым диапазоном | требует |
См. также
| перемещает указатели начала, следующего элемента и конца выходной последовательности (защищенная функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/setg