コード例 #1
0
ファイル: utils.cpp プロジェクト: Bran-Stark/rDSN
    int binary_reader::read(blob& blob)
    {
        int len;
        if (0 == read(len))
            return 0;

        if (len <= get_remaining_size())
        {
            blob = _blob.range(static_cast<int>(_ptr - _blob.data()), len);

            // optimization: zero-copy
            if (!blob.buffer_ptr())
            {
                std::shared_ptr<char> buffer(new char[len]);
                memcpy(buffer.get(), blob.data(), blob.length());
                blob = ::dsn::blob(buffer, 0, blob.length());
            }
            
            _ptr += len;
            _remaining_size -= len;
            return len + sizeof(len);
        }
        else
        {
            dassert(false, "read beyond the end of buffer");
            return 0;
        }
    }
コード例 #2
0
ファイル: utils.cpp プロジェクト: Bran-Stark/rDSN
 bool binary_reader::skip(int count)
 {
     if (count <= get_remaining_size())
     {
         _ptr += count;
         _remaining_size -= count;
         return true;
     }
     else
     {
         dassert(false, "read beyond the end of buffer");
         return false;
     }
 }
コード例 #3
0
ファイル: utils.cpp プロジェクト: Bran-Stark/rDSN
    bool binary_reader::next(const void** data, int* size)
    {
        if (get_remaining_size() > 0)
        {
            *data = (const void*)_ptr;
            *size = _remaining_size;

            _ptr += _remaining_size;
            _remaining_size = 0;
            return true;
        }
        else
            return false;
    }
コード例 #4
0
ファイル: utils.cpp プロジェクト: Bran-Stark/rDSN
 int binary_reader::read(char* buffer, int sz)
 {
     if (sz <= get_remaining_size())
     {
         memcpy((void*)buffer, _ptr, sz);
         _ptr += sz;
         _remaining_size -= sz;
         return sz;
     }
     else
     {
         dassert(false, "read beyond the end of buffer");
         return 0;
     }
 }
コード例 #5
0
ファイル: utils.cpp プロジェクト: SunnyGyb/rDSN
    int binary_reader::read(blob& blob)
    {
        int len;
        if (0 == read(len))
            return 0;

        if (len <= get_remaining_size())
        {
            blob = _blob.range(static_cast<int>(_ptr - _blob.data()), len);
            _ptr += len;
            _remaining_size -= len;
            return len + sizeof(len);
        }
        else
        {
            dwarn("read beyond the end of buffer");
            return 0;
        }
    }