blob: 3c874f0d8ee3f11890d0d2ac5f315862e459bc20 [file] [log] [blame]
/*
* 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.
*/
#pragma once
#include "../IPdxWriter.hpp"
#include "../IPdxReader.hpp"
#include "../IPdxSerializer.hpp"
#include "../Serializable.hpp"
#include "../Cache.hpp"
#include "../TypeRegistry.hpp"
namespace Apache
{
namespace Geode
{
namespace Client
{
ref class PdxWrapper : IPdxSerializable
{
private:
Object^ m_object;
public:
PdxWrapper(Object^ object)
{
m_object = object;
}
Object^ GetObject()
{
return m_object;
}
virtual void ToData( IPdxWriter^ writer )
{
auto pdxSerializer = writer->Cache->TypeRegistry->PdxSerializer;
if (!pdxSerializer->ToData(m_object, writer))
{
throw gcnew IllegalStateException("PdxSerilizer unable serialize data for type " + m_object->GetType());
}
}
virtual void FromData( IPdxReader^ reader )
{
auto pdxSerializer = reader->Cache->TypeRegistry->PdxSerializer;
if (auto className = dynamic_cast<String^>(m_object))
{
m_object = pdxSerializer->FromData(className, reader);
}
else
{
m_object = pdxSerializer->FromData(m_object->GetType()->FullName, reader);
}
if (m_object == nullptr)
{
throw gcnew IllegalStateException("PdxSerilizer unable de-serialize data for type " + m_object->GetType());
}
}
virtual int GetHashCode()override
{
return m_object->GetHashCode();
}
virtual bool Equals(Object^ obj)override
{
if(obj != nullptr)
{
if (auto pdxWrapper = dynamic_cast<PdxWrapper^>(obj))
{
return m_object->Equals(pdxWrapper->m_object);
}
return m_object->Equals(obj);
}
return false;
}
};
} // namespace Client
} // namespace Geode
} // namespace Apache