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