I think it is good idea. Here is a suggestion for improvement. Instead of having two functions, we can have just one: size_t Decode::decodeBytesData(uint8_t *buffer, size_t len);
If the decoding can fit in len bytes, it decodes and return the number of bytes used. If it cannot, then, it will return the number of bytes required. It will help those clients who have some buffer space. They can try to decode into the their buffer, if it fails, they will have to allocate a bigger buffer and try again. Perhaps, we can call the function decodeBytesDataIfPossible to make the intention clear. Thanks Thiru On Monday, 8 March, 2021, 09:16:16 pm IST, Bruno Nicoletti <[email protected]> wrote: Hi All, We serialise some binary blobs as part of our data using the C++ implementation of Avro. Currently the C++ API has several calls for this that pass values back to the client via std::vector<uint8_t>, for example... std::vector<uint8_t> Decode::decodeBytes(); void Decode::decodeBytes(std::vector<uint8_t> &value); If the client isn't holding the data in a std::vector, or using some other allocation method, this forces the client to do a separate allocation and memcpy the data out of the vector that the API returns the data in. We've implemented a new API on the decoder that allows the client to allocate the data and pass the buffers into the decoder. The API is... /// Decodes the number of bytes that will be read in a subsequent /// \ref decodeBytesData call. size_t Decode::decodeBytesSize(); /// Decodes the bytes data into an allocated buffer of length len, which /// must contain at least as many bytes as was returned by the previous /// \ref decodeBytesSize() call. void Decode::decodeBytesData(uint8_t *buffer, size_t len); So the client would do 2 calls to read the data blob, size_t nBytesToRead = decoder->decodeBytesSize(); void *buffer = myAllocationMethod(nBytesToRead); decoder->decodeBytes(buffer, nBytesToRead); Would this be a thing you'd want to integrate onto the mainline of avro? If so we can tidy it up, make some tests and make a PR for it. thanks Bruno -- Bruno Nicoletti, CTO and Co-founder Filigree Technologies Ltd,
