Ejemplo n.º 1
0
    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;
        }
    }
Ejemplo n.º 2
0
 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;
     }
 }
Ejemplo n.º 3
0
    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;
    }
Ejemplo n.º 4
0
 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;
     }
 }
Ejemplo n.º 5
0
    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;
        }
    }