blob: b5724d7261faa0a6ea67f41e261f620a15af5b0e [file] [log] [blame]
#pragma once
#ifndef GEODE_TESTOBJECT_NESTEDPDXOBJECT_H_
#define GEODE_TESTOBJECT_NESTEDPDXOBJECT_H_
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* NestedPdxObject.hpp
*
*/
#include <util/Log.hpp>
#include <geode/CacheableEnum.hpp>
#include <geode/PdxReader.hpp>
#include <geode/PdxSerializable.hpp>
#include <geode/PdxWriter.hpp>
#include "testobject_export.h"
namespace testobject {
using apache::geode::client::Cacheable;
using apache::geode::client::CacheableEnum;
using apache::geode::client::PdxReader;
using apache::geode::client::PdxSerializable;
using apache::geode::client::PdxWriter;
enum Gender { male, female, other };
class TESTOBJECT_EXPORT ChildPdx : public PdxSerializable {
private:
int m_childId;
std::string m_childName;
std::shared_ptr<CacheableEnum> m_enum;
public:
ChildPdx() {}
explicit ChildPdx(int id) {
m_childId = id;
m_childName = "name-" + std::to_string(id);
m_enum = CacheableEnum::create("Gender", "female", 5);
}
~ChildPdx() override = default;
virtual size_t objectSize() const override {
auto objectSize = sizeof(ChildPdx);
return objectSize;
}
int32_t getChildId() { return m_childId; }
const std::string& getChildName() { return m_childName; }
using PdxSerializable::fromData;
using PdxSerializable::toData;
virtual void toData(PdxWriter& pw) const override;
virtual void fromData(PdxReader& pr) override;
std::string toString() const override;
const std::string& getClassName() const override {
static std::string className = "testobject.ChildPdx";
return className;
}
static std::shared_ptr<PdxSerializable> createDeserializable() {
return std::make_shared<ChildPdx>();
}
bool equals(ChildPdx& other) const;
};
class TESTOBJECT_EXPORT ParentPdx : public PdxSerializable {
private:
int m_parentId;
std::string m_parentName;
std::shared_ptr<Cacheable> m_childPdx;
std::shared_ptr<CacheableEnum> m_enum;
char16_t m_char;
std::vector<char16_t> m_charArray;
public:
ParentPdx() {}
explicit ParentPdx(int id) {
m_parentId = id;
m_parentName = "name-" + std::to_string(id);
m_childPdx = std::make_shared<ChildPdx>(id /** 1393*/);
m_enum = CacheableEnum::create("Gender", "male", 6);
m_char = 'C';
m_charArray = std::vector<char16_t>({'X', 'Y'});
}
~ParentPdx() override = default;
virtual size_t objectSize() const override {
auto objectSize = sizeof(ParentPdx);
return objectSize;
}
int32_t getParentId() { return m_parentId; }
const std::string& getParentName() { return m_parentName; }
std::shared_ptr<ChildPdx> getChildPdx() {
return std::dynamic_pointer_cast<ChildPdx>(m_childPdx);
}
std::shared_ptr<CacheableEnum> getEnum() { return m_enum; }
char16_t getChar() { return m_char; }
std::vector<char16_t> getCharArray() { return m_charArray; }
using PdxSerializable::fromData;
using PdxSerializable::toData;
virtual void toData(PdxWriter& pw) const override;
virtual void fromData(PdxReader& pr) override;
std::string toString() const override;
const std::string& getClassName() const override {
static std::string className = "testobject.ParentPdx";
return className;
}
static std::shared_ptr<PdxSerializable> createDeserializable() {
return std::make_shared<ParentPdx>();
}
bool equals(const ParentPdx& other, bool isPdxReadSerialized) const;
};
enum enumQuerytest { id1, id2, id3 };
class TESTOBJECT_EXPORT PdxEnumTestClass : public PdxSerializable {
private:
int m_id;
std::shared_ptr<CacheableEnum> m_enumid;
public:
int getID() { return m_id; }
std::shared_ptr<CacheableEnum> getEnumID() { return m_enumid; }
explicit PdxEnumTestClass(int id) {
m_id = id;
switch (m_id) {
case 0:
LOGINFO("case 0 id1 = %d ", id1);
m_enumid = CacheableEnum::create("enumQuerytest", "id1",
/*enumQuerytest::*/ id1);
break;
case 1:
LOGINFO("case 1 id2 = %d ", id2);
m_enumid = CacheableEnum::create("enumQuerytest", "id2",
/*enumQuerytest::*/ id2);
break;
case 2:
LOGINFO("case 2 id3 = %d ", id3);
m_enumid = CacheableEnum::create("enumQuerytest", "id3",
/*enumQuerytest::*/ id3);
break;
default:
LOGINFO("case default id1 = %d ", id1);
m_enumid = CacheableEnum::create("enumQuerytest", "id1",
/*enumQuerytest::*/ id1);
break;
}
}
PdxEnumTestClass() {}
using PdxSerializable::fromData;
using PdxSerializable::toData;
void toData(PdxWriter& pw) const override {
pw.writeInt("m_id", m_id);
pw.writeObject("m_enumid", m_enumid);
}
void fromData(PdxReader& pr) override {
m_id = pr.readInt("m_id");
m_enumid =
std::dynamic_pointer_cast<CacheableEnum>(pr.readObject("m_enumid"));
}
std::string toString() const override { return "PdxEnumTestClass"; }
const std::string& getClassName() const override {
static std::string className = "testobject.PdxEnumTestClass";
return className;
}
static std::shared_ptr<PdxSerializable> createDeserializable() {
return std::make_shared<PdxEnumTestClass>();
}
};
class TESTOBJECT_EXPORT SerializePdx : public PdxSerializable {
private:
int i1;
int i2;
std::string s1;
std::string s2;
public:
SerializePdx() {}
explicit SerializePdx(bool init) {
if (init) {
i1 = 1;
i2 = 2;
s1 = "s1";
s2 = "s2";
} else {
i1 = 0;
i2 = 0;
s1 = "";
s2 = "";
}
}
static std::shared_ptr<PdxSerializable> createDeserializable() {
return std::make_shared<SerializePdx>(false);
}
using PdxSerializable::fromData;
using PdxSerializable::toData;
void toData(PdxWriter& pw) const override {
pw.writeInt("i1", i1);
pw.markIdentityField("i1");
pw.writeInt("i2", i2);
pw.writeString("s1", s1);
pw.markIdentityField("s1");
pw.writeString("s2", s2);
}
void fromData(PdxReader& pr) override {
i1 = pr.readInt("i1");
i2 = pr.readInt("i2");
s1 = pr.readString("s1");
s2 = pr.readString("s2");
}
std::string toString() const override { return "SerializePdx"; }
const std::string& getClassName() const override {
static std::string className = "SerializePdx";
return className;
}
bool equals(SerializePdx& other) const {
SerializePdx* ot = dynamic_cast<SerializePdx*>(&other);
if (ot) {
LOGINFO("SerializePdx::equals1");
return false;
}
if (ot->i1 != i1 && ot->i2 != i2 && ot->s1 != s1 && ot->s2 != s2) {
LOGINFO("SerializePdx::equals2");
return false;
}
LOGINFO("SerializePdx::equals3");
return true;
}
};
} // namespace testobject
#endif // GEODE_TESTOBJECT_NESTEDPDXOBJECT_H_