| #ifndef __GEMFIRE_SERIALIZABLE_H__ |
| #define __GEMFIRE_SERIALIZABLE_H__ |
| /*========================================================================= |
| * Copyright (c) 2002-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 |
| * more patents listed at http://www.pivotal.io/patents. |
| *======================================================================== |
| */ |
| |
| /** |
| * @file |
| */ |
| |
| #include "gfcpp_globals.hpp" |
| #include "gf_types.hpp" |
| |
| namespace gemfire |
| { |
| |
| class DataOutput; |
| class DataInput; |
| |
| typedef void ( *CliCallbackMethod) (); |
| |
| /** @brief signature of functions passed to registerType. Such functions |
| * should return an empty instance of the type they represent. The instance |
| * will typically be initialized immediately after creation by a call to fromData(). |
| */ |
| typedef Serializable* ( *TypeFactoryMethod ) (); |
| |
| typedef PdxSerializable* ( *TypeFactoryMethodPdx ) (); |
| /** |
| * @class Serializable Serializable.hpp |
| * This abstract base class is the superclass of all user objects |
| * in the cache that can be serialized. |
| */ |
| |
| class CPPCACHE_EXPORT Serializable : public SharedBase |
| { |
| |
| public: |
| |
| /** |
| *@brief serialize this object |
| **/ |
| virtual void toData( DataOutput& output ) const = 0; |
| |
| /** |
| *@brief deserialize this object, typical implementation should return |
| * the 'this' pointer. |
| **/ |
| virtual Serializable* fromData( DataInput& input ) = 0; |
| |
| /** |
| *@brief Return the classId of the instance being serialized. |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| * |
| * The classId must be unique within an application suite. |
| * Using a negative value may result in undefined behavior. |
| */ |
| virtual int32_t classId( ) const = 0; |
| |
| /** |
| *@brief return the typeId byte of the instance being serialized. |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| * |
| * Note that this should not be overridden by custom implementations |
| * and is reserved only for builtin types. |
| */ |
| virtual int8_t typeId( ) const; |
| |
| /** |
| * @brief return the Data Serialization Fixed ID type. |
| * This is used to determine what instance type to create and deserialize into. |
| * |
| * Note that this should not be overridden by custom implementations |
| * and is reserved only for builtin types. |
| */ |
| virtual int8_t DSFID( ) const; |
| |
| /** |
| *@brief return the size in bytes of the instance being serialized. |
| * This is used to determine whether the cache is using up more |
| * physical memory than it has been configured to use. The method can |
| * return zero if the user does not require the ability to control |
| * cache memory utilization. |
| * Note that you must implement this only if you use the HeapLRU feature. |
| */ |
| virtual uint32_t objectSize() const; |
| |
| /** |
| * @brief register an instance factory method for a given type. |
| * During registration the factory will be invoked to extract the typeId |
| * to associate with this function. |
| * @throws IllegalStateException if the typeId has already been registered, |
| * or there is an error in registering the type; check errno for |
| * more information in the latter case. |
| */ |
| static void registerType( TypeFactoryMethod creationFunction ); |
| |
| /** |
| * @brief register an Pdx instance factory method for a given type. |
| * @throws IllegalStateException if the typeName has already been registered, |
| * or there is an error in registering the type; check errno for |
| * more information in the latter case. |
| */ |
| static void registerPdxType( TypeFactoryMethodPdx creationFunction ); |
| |
| /** |
| * Register the PDX serializer which can handle serialization for instances of user domain classes. |
| * @see PdxSerializer |
| */ |
| static void registerPdxSerializer( PdxSerializerPtr pdxSerializer ); |
| |
| /** |
| * Display this object as 'string', which depends on the implementation in |
| * the subclasses. |
| * The default implementation renders the classname. |
| * |
| * The return value may be a temporary, so the caller has to ensure that |
| * the SharedPtr count does not go down to zero by storing the result |
| * in a variable or otherwise. |
| */ |
| virtual CacheableStringPtr toString( ) const; |
| |
| /** Factory method that creates the Serializable object that matches the type of value. |
| * For customer defined derivations of Serializable, the method gemfire::createValue |
| * may be overloaded. For pointer types (e.g. char*) the method |
| * gemfire::createValueArr may be overloaded. |
| */ |
| template< class PRIM > |
| inline static SerializablePtr create( const PRIM value ); |
| |
| /** |
| * @brief destructor |
| */ |
| virtual ~Serializable() |
| {} |
| |
| protected: |
| |
| /** |
| * @brief constructors |
| */ |
| Serializable() |
| : SharedBase() |
| {} |
| |
| private: |
| |
| // Never defined. |
| Serializable( const Serializable& other ); |
| void operator = ( const Serializable& other ); |
| |
| }; |
| |
| } //namespace gemfire |
| |
| #endif //ifndef __GEMFIRE_SERIALIZABLE_H__ |