Возвращаемое значение boost Функция записи в iostreams. - PullRequest
0 голосов
/ 17 мая 2019

У меня есть следующий пользовательский приемник с функцией записи:

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 байта, а возвращаемое значение равно нулю?

...