Boost iostream接收器写入功能的返回值

时间:2019-05-17 13:23:04

标签: c++ boost boost-iostreams

我有以下具有写入功能的自定义接收器:

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个字节的任意倍数。 boost iostreams库是否允许我在这里做什么?我检查是否至少有4个字节,并且返回值将始终为4的倍数。

当有3个字节进入并且返回值为零时,行为是什么?

0 个答案:

没有答案