История изменений
Исправление
kvpfs,
(текущая версия)
:
Нет ли здесь ошибки?
// convets from [in_begin : in_end) to *o_out
void cvt(const wchar_t *in_begin,
const wchar_t *in_end,
std::basic_string<char> *o_out)
{
using namespace std;
auto& cvt = use_facet<codecvt<wchar_t, char, mbstate_t>>(locale());
// expect SBO
o_out->resize(15);
mbstate_t mb{};
const wchar_t *from_next = in_begin;
char *to_next = &(*o_out)[0];
while (cvt.out(mb, from_next, in_end, from_next,
to_next, &(*o_out)[o_out->size()], to_next) ==
std::codecvt_base::partial &&
from_next != in_end) {
std::ptrdiff_t diff = to_next - &(*o_out)[0];
o_out->resize(o_out->size() * 2);
to_next = &(*o_out)[0] + diff;
}
o_out->resize(to_next - &(*o_out)[0]);
}
Меня смущает mbstate_t, я плохо понимаю зачем оно нужно. Я не нашёл ни одно примера, где бы кто-то повторно входил в cvt.out()
Исходная версия
kvpfs,
:
Нет ли здесь ошибки?
void cvt(const wchar_t *in_begin,
const wchar_t *in_end,
std::basic_string<char> *o_out)
{
using namespace std;
auto& cvt = use_facet<codecvt<wchar_t, char, mbstate_t>>(locale());
// expect SBO
o_out->resize(15);
mbstate_t mb{};
const wchar_t *from_next = in_begin;
char *to_next = &(*o_out)[0];
while (cvt.out(mb, from_next, in_end, from_next,
to_next, &(*o_out)[o_out->size()], to_next) ==
std::codecvt_base::partial &&
from_next != in_end) {
std::ptrdiff_t diff = to_next - &(*o_out)[0];
o_out->resize(o_out->size() * 2);
to_next = &(*o_out)[0] + diff;
}
o_out->resize(to_next - &(*o_out)[0]);
}
Меня смущает mbstate_t, я плохо понимаю зачем оно нужно. Я не нашёл ни одно примера, где бы кто-то повторно входил в cvt.out()