У меня есть следующий пользовательский приемник с функцией записи:
std::streamsize MySink::write(const char* s, std::streamsize n) {
unsigned int cnt = 0;
if(n < 4) {
BOOST_LOG_TRIVIAL(error) << "More than 4 bytes are required";
return 0;
}
do {
container_T::value_type val;
val.first = static_cast<std::uint16_t>(s[cnt]) << 8 |
static_cast<std::uint16_t>(s[cnt + 1]);
val.second = static_cast<std::uint16_t>(s[cnt + 2]) << 8 |
static_cast<std::uint16_t>(s[cnt + 3]);
this->dataContainer->push_back(val);
cnt += 4;
}while(cnt + 3 < n);
return cnt;
}
Эта функция получает данные из внешнего буфера FIFO, который заполняется некоторым оборудованием.FIFO имеет 32-битный вход, который представляет собой две 16-битные пары.Моя структура данных для записи - это вектор двойных пар.Я ожидаю, что параметр функции записи n будет иметь по крайней мере 4 байта и любое кратное 4 байта.Разрешает ли библиотека iostreams boost, что я здесь делаю?Я проверяю, есть ли по крайней мере 4 байта, и возвращаемое значение всегда будет кратно 4.
Каково поведение, когда поступают 3 байта, а возвращаемое значение равно нулю?