Igor,

Would you please join the discussion and help Data tackle the issue?

-
Denis


On Thu, Jul 30, 2020 at 1:03 AM Dana Milan <danash...@gmail.com> wrote:

> Hi,
>
> I couldn't find an answer anywhere else, hopefully you can help me.
>
> I have the following class:
>
> class Pair {
> friend struct ignite::binary::BinaryType<Pair>;
> public:
> Pair() {
> _len = 0;
> _buff = nullptr;
> }
>
> Pair(char* buff, int len) {
> _len = len;
> _buff = new char[len];
> for (int i = 0; i < len; i++) {
> _buff[i] = buff[i];
> }
> }
>
> ~ Pair() {
> delete[] _buff;
> }
>
> private:
> char* _buff;
> int _len;
> };
>
> I try to serialize the class into cache in the following manner:
>
> template<>
> struct ignite::binary::BinaryType<Pair>
> {
> static int32_t GetTypeId()
> {
> return GetBinaryStringHashCode("Pair");
> }
>
> static void GetTypeName(std::string& name)
> {
> name = "Pair";
> }
>
> static int32_t GetFieldId(const char* name)
> {
> return GetBinaryStringHashCode(name);
> }
>
> static bool IsNull(const Pair& obj)
> {
> return false;
> }
>
> static void GetNull(Pair& dst)
> {
> dst = Pair();
> }
>
> static void Write(BinaryWriter& writer, const Pair& obj)
> {
> BinaryRawWriter rawWriter = writer.RawWriter();
>
> int len = obj._len;
> char* buff = obj._buff;
>
> rawWriter.WriteInt32(len);
>
> auto binWriter = rawWriter.WriteArray<char>();
> for (int i = 0; i < len; i++) {
> binWriter.Write(buff[i]);
> }
> binWriter.Close();
> }
>
> static void Read(BinaryReader& reader, Pair& dst)
> {
> BinaryRawReader rawReader = reader.RawReader();
>
> dst._len = rawReader.ReadInt32();
>
> dst._buff = new char[dst._len];
> auto binReader = rawReader.ReadArray<char>();
> for (int i = 0; i < dst._len; i++) {
> dst._buff[i] = binReader.GetNext();
> }
> }
> };
>
> When I try to compile I get errors as following:
> [image: image.png]
> If I comment out the parts of reading and writing the array it compiles
> successfully.
>
> Does this happen because I also need to serialize the write of 'char'? (If
> so, how do I do it?)
> Am I using the ReadArray and WriteArray correctly?
> Is there another way of storing the char buffer in cache?
>
> If someone can provide a working code snippet that would be amazing, but
> any help would be appreciated.
> Thanks a lot!
>
>

Reply via email to