blob: 973110265a6964e3371f009593089108ffba52b1 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
/*
* NestedPdxObject.cpp
*
*/
#include "NestedPdxObject.hpp"
using namespace gemfire;
using namespace testobject;
ChildPdx::~ChildPdx() {
}
void ChildPdx::toData( PdxWriterPtr pw ) {
LOGDEBUG("ChildPdx::toData() Started......");
pw->writeInt("m_childId", m_childId);
pw->markIdentityField("m_childId");
pw->writeObject("m_enum", m_enum);
pw->writeString("m_childName", m_childName);
LOGDEBUG("ChildPdx::toData() Done......");
}
void ChildPdx::fromData( PdxReaderPtr pr ){
LOGINFO("ChildPdx::fromData() start...");
m_childId = pr->readInt("m_childId");
LOGINFO("ChildPdx::fromData() m_childId = %d ", m_childId);
m_enum = pr->readObject("m_enum");
m_childName = pr->readString("m_childName");
LOGINFO("ChildPdx::fromData() end...");
}
CacheableStringPtr ChildPdx::toString() const {
char idbuf[1024];
sprintf(idbuf,"ChildPdx: [m_childId=%d] [ m_childName=%s ]" , m_childId, m_childName);
return CacheableString::create( idbuf );
}
bool ChildPdx::equals(ChildPdx& other)const {
LOGINFO("ChildPdx::equals");
ChildPdx* ot = dynamic_cast<ChildPdx*>(&other);
//Cacheable* ot = dynamic_cast<Cacheable*>(&other);
if (ot == NULL) {
LOGINFO("ChildPdx::equals1");
return false;
}
if ( (strcmp(m_childName, other.m_childName) == 0 ) && (m_childId == other.m_childId)
&& (m_enum->getEnumOrdinal() == other.m_enum->getEnumOrdinal()) &&
( strcmp(m_enum->getEnumClassName(), other.m_enum->getEnumClassName()) == 0) &&
( strcmp(m_enum->getEnumName(), other.m_enum->getEnumName()) == 0) ) {
LOGINFO("ChildPdx::equals2");
return true;
}
return false;
}
ParentPdx::~ParentPdx() {
}
void ParentPdx::toData( PdxWriterPtr pw ) {
LOGDEBUG("ParentPdx::toData() Started......");
pw->writeInt("m_parentId", m_parentId);
LOGDEBUG("ParentPdx::toData() m_parentId......");
pw->markIdentityField("m_parentId");
pw->writeObject("m_enum", m_enum);
LOGDEBUG("ParentPdx::toData() m_enum......");
pw->writeString("m_parentName", m_parentName);
LOGDEBUG("ParentPdx::toData() m_parentName......");
pw->writeWideString("m_wideparentName", m_wideparentName);
LOGDEBUG("ParentPdx::toData() m_wideparentName......");
pw->writeWideStringArray("m_wideparentArrayName", m_wideparentArrayName, 3);
LOGDEBUG("ParentPdx::toData() m_wideparentArrayName......");
pw->writeObject("m_childPdx", (ChildPdxPtr)m_childPdx);
LOGDEBUG("ParentPdx::toData() m_childPdx......");
pw->markIdentityField("m_childPdx");
pw->writeChar("m_char", m_char);
pw->writeWideChar("m_wideChar", m_wideChar);
pw->writeCharArray("m_charArray", m_charArray, 2);
pw->writeWideCharArray("m_wideCharArray", m_wideCharArray, 2);
LOGDEBUG("ParentPdx::toData() Done......");
}
void ParentPdx::fromData( PdxReaderPtr pr ){
LOGINFO("ParentPdx::fromData() start...");
m_parentId = pr->readInt("m_parentId");
LOGINFO("ParentPdx::fromData() m_parentId = %d ", m_parentId);
m_enum = pr->readObject("m_enum");
LOGINFO("ParentPdx::fromData() read gender ");
m_parentName = pr->readString("m_parentName");
LOGINFO("ParentPdx::fromData() m_parentName = %s ", m_parentName);
m_wideparentName = pr->readWideString("m_wideparentName");
LOGINFO("ParentPdx::fromData() m_wideparentName = %ls ", m_wideparentName);
m_wideparentArrayName = pr->readWideStringArray("m_wideparentArrayName", m_arrLength);
for(int i=0; i<3; i++) {
LOGINFO("ParentPdx:: m_wideparentArrayName[i] = %ls ", m_wideparentArrayName[i]);
}
LOGINFO("ParentPdx::fromData() m_wideparentArrayName done ");
m_childPdx = /*dynCast<SerializablePtr>*/(pr->readObject("m_childPdx"));
LOGINFO("ParentPdx::fromData() start3...");
m_char = pr->readChar("m_char");
m_wideChar = pr->readWideChar("m_wideChar");
m_charArray = pr->readCharArray("m_charArray", m_charArrayLen);
m_wideCharArray = pr->readWideCharArray("m_wideCharArray",m_wcharArrayLen );
LOGINFO("ParentPdx::fromData() end...");
}
CacheableStringPtr ParentPdx::toString() const {
char idbuf[1024];
sprintf(idbuf,"ParentPdx: [m_parentId=%d] [ m_parentName=%s ] [ m_wideparentName=%ls ] [m_childPdx = %s ] " , m_parentId, m_parentName, m_wideparentName, m_childPdx->toString()->asChar());
return CacheableString::create( idbuf );
}
bool ParentPdx::equals(ParentPdx& other, bool isPdxReadSerialized)const {
LOGINFO("ParentPdx::equals");
ParentPdx* ot = dynamic_cast<ParentPdx*>(&other);
if (ot == NULL) {
LOGINFO("ParentPdx::equals1");
return false;
}
if ((strcmp(m_parentName, other.m_parentName) == 0 ) && (wcscmp(m_wideparentName, other.m_wideparentName) == 0 ) && (m_parentId == other.m_parentId)
&& (m_enum->getEnumOrdinal() == other.m_enum->getEnumOrdinal()) &&
(strcmp(m_enum->getEnumClassName(), other.m_enum->getEnumClassName()) == 0) &&
(strcmp(m_enum->getEnumName(), other.m_enum->getEnumName()) == 0) && m_arrLength == other.m_arrLength && m_charArrayLen == other.m_charArrayLen
&& m_wcharArrayLen == other.m_wcharArrayLen && m_char == other.m_char && m_wideChar == other.m_wideChar){
LOGINFO("ParentPdx::equals2");
for(int i=0; i<m_arrLength; i++) {
if ((wcscmp(m_wideparentArrayName[i], other.m_wideparentArrayName[i]) != 0 )) {
LOGINFO("ParentPdx::equals2 not wcscmp");
return false;
}
}
for(int j=0; j<m_charArrayLen; j++) {
if (m_charArray[j] != other.m_charArray[j]) {
LOGINFO("ParentPdx::equals not char array ");
return false;
}
}
for(int k=0; k<m_wcharArrayLen; k++) {
if (m_wideCharArray[k] != other.m_wideCharArray[k]) {
LOGINFO("ParentPdx::equals not wide char array ");
return false;
}
}
if (!isPdxReadSerialized) {
ChildPdx* ch1 = dynamic_cast<ChildPdx*>(m_childPdx.ptr());
ChildPdx* ch2 = dynamic_cast<ChildPdx*>(other.m_childPdx.ptr());
if (ch1->equals(*ch2)) {
LOGINFO("ParentPdx::equals3");
return true;
}
}
return true;
}
LOGINFO("ParentPdx:: not equals");
return false;
}