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