You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by pe...@apache.org on 2003/09/23 20:12:19 UTC

cvs commit: xml-xerces/c/src/xercesc/internal XProtoType.hpp XSerializable.hpp

peiyongz    2003/09/23 11:12:19

  Modified:    c/src/xercesc/internal XProtoType.hpp XSerializable.hpp
  Log:
  Macro re-organized: provide create/nocreate macros for abstract and
  nonabstract classes
  
  Revision  Changes    Path
  1.2       +35 -2     xml-xerces/c/src/xercesc/internal/XProtoType.hpp
  
  Index: XProtoType.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XProtoType.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XProtoType.hpp	18 Sep 2003 18:31:24 -0000	1.1
  +++ XProtoType.hpp	23 Sep 2003 18:12:19 -0000	1.2
  @@ -57,6 +57,10 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.2  2003/09/23 18:12:19  peiyongz
  + * Macro re-organized: provide create/nocreate macros for abstract and
  + * nonabstract classes
  + *
    * Revision 1.1  2003/09/18 18:31:24  peiyongz
    * OSU: Object Serialization Utilities
    *
  @@ -99,6 +103,36 @@
       XSerializable*    (*fCreateObject)(MemoryManager*);
   
   };
  +
  +#define DECL_XPROTOTYPE(class_name) \
  +static  XProtoType        class##class_name;                   \
  +static  XSerializable*    createObject(MemoryManager* manager);
  +
  +/***
  + * For non-abstract class
  + ***/
  +#define IMPL_XPROTOTYPE_TOCREATE(class_name) \
  +IMPL_XPROTOTYPE_INSTANCE(class_name) \
  +XSerializable* class_name::createObject(MemoryManager* manager) \
  +{return new (manager) class_name(manager);}
  +
  +/***
  +* For abstract class
  + ***/
  +#define IMPL_XPROTOTYPE_NOCREATE(class_name) \
  +IMPL_XPROTOTYPE_INSTANCE(class_name) \
  +XSerializable* class_name::createObject(MemoryManager* manager) \
  +{return 0;}
  +
  +
  +/***
  + * Helper Macro 
  + ***/
  +#define XPROTOTYPE_CLASS(class_name) ((XProtoType*)(&class_name::class##class_name))
  +
  +#define IMPL_XPROTOTYPE_INSTANCE(class_name) \
  +XProtoType class_name::class##class_name = \
  +{(XMLByte*) #class_name, class_name::createObject };
   
   XERCES_CPP_NAMESPACE_END
   
  
  
  
  1.2       +42 -29    xml-xerces/c/src/xercesc/internal/XSerializable.hpp
  
  Index: XSerializable.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSerializable.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XSerializable.hpp	18 Sep 2003 18:31:24 -0000	1.1
  +++ XSerializable.hpp	23 Sep 2003 18:12:19 -0000	1.2
  @@ -57,6 +57,10 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.2  2003/09/23 18:12:19  peiyongz
  + * Macro re-organized: provide create/nocreate macros for abstract and
  + * nonabstract classes
  + *
    * Revision 1.1  2003/09/18 18:31:24  peiyongz
    * OSU: Object Serialization Utilities
    *
  @@ -83,11 +87,11 @@
       // -----------------------------------------------------------------------
       //  Serialization Interface
       // -----------------------------------------------------------------------   
  -    virtual bool      isSerializable()               const = 0;
  +    virtual bool        isSerializable()               const = 0;
   
  -    virtual void      serialize(XSerializeEngine& )        = 0;
  +    virtual void        serialize(XSerializeEngine& )        = 0;
   
  -    virtual XProtoType* getProtoType()               const = 0;
  +    virtual XProtoType* getProtoType()                 const = 0;
   
   protected:
       XSerializable(){} ;
  @@ -111,34 +115,44 @@
    ***/
   #define DECL_XSERIALIZABLE(class_name) \
   public: \
  -    static  XProtoType        class##class_name; \
  -    static  XSerializable*    createObject(MemoryManager* manager); \
  -    \
  -    virtual bool              isSerializable() const {return true;} ; \
  -    virtual XProtoType*       getProtoType() const; \
  -    virtual void              serialize(XSerializeEngine&); \
  -    friend  XSerializeEngine& operator>>(XSerializeEngine&, class_name*&);
  +\
  +DECL_XPROTOTYPE(class_name) \
  +\
  +virtual bool                    isSerializable()                  const ;  \
  +virtual XProtoType*             getProtoType()                    const;   \
  +virtual void                    serialize(XSerializeEngine&); \
  +\
  +inline friend XSerializeEngine& operator>>(XSerializeEngine& serEng  \
  +                                         , class_name*&      objPtr) \
  +{objPtr = (class_name*) serEng.read(XPROTOTYPE_CLASS(class_name));   \
  + return serEng; \
  +};
   	
  -#define PROTOTYPE_CLASS(class_name) ((XProtoType*)(&class_name::class##class_name))
  +/***
  + * Macro to be included in the implementation file
  + * of XSerializable derivatives' which is instantiable
  + ***/
  +#define IMPL_XSERIALIZABLE_TOCREATE(class_name) \
  +IMPL_XPROTOTYPE_TOCREATE(class_name) \
  +IMPL_XSERIAL(class_name)
   
   /***
  - * Macro to be included in XSerializable derivatives' 
  - * implementation file
  + * Macro to be included in the implementation file
  + * of XSerializable derivatives' which is UN-instantiable
    ***/
  -#define IMPL_XSERIALIZABLE(class_name) \
  -\
  -XProtoType class_name::class##class_name = \
  -{(XMLByte*) #class_name, class_name::createObject }; \
  -\
  -XSerializable* class_name::createObject(MemoryManager* manager) \
  -{return new (manager) class_name(manager); } \
  -\
  -XProtoType* class_name::getProtoType() const \
  -{return PROTOTYPE_CLASS(class_name); } \
  -\
  -XSerializeEngine& operator>>(XSerializeEngine& serEng, class_name*& objPtr) \
  -{objPtr = (class_name*) serEng.read(PROTOTYPE_CLASS(class_name)); \
  -return serEng; }
  +#define IMPL_XSERIALIZABLE_NOCREATE(class_name) \
  +IMPL_XPROTOTYPE_NOCREATE(class_name) \
  +IMPL_XSERIAL(class_name)
  +
  +/***
  + * Helper Macro 
  + ***/
  +#define IMPL_XSERIAL(class_name) \
  +bool        class_name::isSerializable() const \
  +{return true; } \
  +XProtoType* class_name::getProtoType()   const \
  +{return XPROTOTYPE_CLASS(class_name); } 
  +
   
   XERCES_CPP_NAMESPACE_END
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org