При использовании метода std::codecvt
in
для декодирования внешней последовательности байтов во внутреннюю последовательность символов существует ли ситуация, когда буферу назначения внутренних символов требуется пространство для более чем одного внутреннего символа?
Вот некоторый код для справки:
// const std::locale& loc;
// mbstate_t state;
// const char *extern_buf_ptr;
// const char *extern_buf_eptr;
const std::codecvt<wchar_t, char, mbstate_t> *pcodecvt = &std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >(loc);
wchar_t intern_char;
wchar_t *tmp;
std::codecvt_base::result in_res = pcodecvt->in(state,
extern_buf_ptr, extern_buf_eptr, extern_buf_ptr,
&intern_char, &intern_char + 1, tmp);
Это упрощение некоторого кода шаблона, который я написал для декодирования байтов, считываемых по отдельности из Winsock SOCKET
, где пользователь желает "небуферизованного" ввода,По сути, с каждой итерацией цикла байт считывается во внешний буфер.Цикл завершается, когда in_res
не равен std::codecvt_base::partial
.
Что мне интересно: существует ли сценарий, когда при вызове in()
потребуется место в буфере назначения для более чем одного внутреннего символа?Т.е. есть ли сценарий, который бы сделал описанный выше цикл бесконечным циклом?