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!