File indexing completed on 2025-01-18 10:14:56
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #if !defined(XERCESC_INCLUDE_GUARD_XPROTOTYPE_HPP)
0023 #define XERCESC_INCLUDE_GUARD_XPROTOTYPE_HPP
0024
0025 #include <xercesc/util/PlatformUtils.hpp>
0026
0027 XERCES_CPP_NAMESPACE_BEGIN
0028
0029 class XSerializeEngine;
0030 class XSerializable;
0031
0032 class XMLUTIL_EXPORT XProtoType
0033 {
0034 public:
0035
0036 void store(XSerializeEngine& serEng) const;
0037
0038 static void load(XSerializeEngine& serEng
0039 , XMLByte* const name
0040 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
0041 );
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 XMLByte* fClassName;
0056
0057 XSerializable* (*fCreateObject)(MemoryManager*);
0058
0059 };
0060
0061 #define DECL_XPROTOTYPE(class_name) \
0062 static XProtoType class##class_name; \
0063 static XSerializable* createObject(MemoryManager* manager);
0064
0065
0066
0067
0068 #define IMPL_XPROTOTYPE_TOCREATE(class_name) \
0069 IMPL_XPROTOTYPE_INSTANCE(class_name) \
0070 XSerializable* class_name::createObject(MemoryManager* manager) \
0071 {return new (manager) class_name(manager);}
0072
0073
0074
0075
0076 #define IMPL_XPROTOTYPE_NOCREATE(class_name) \
0077 IMPL_XPROTOTYPE_INSTANCE(class_name) \
0078 XSerializable* class_name::createObject(MemoryManager*) \
0079 {return 0;}
0080
0081
0082
0083
0084
0085 #define XPROTOTYPE_CLASS(class_name) ((XProtoType*)(&class_name::class##class_name))
0086
0087 #define IMPL_XPROTOTYPE_INSTANCE(class_name) \
0088 XProtoType class_name::class##class_name = \
0089 {const_cast<XMLByte*>(reinterpret_cast<const XMLByte *>(#class_name)), class_name::createObject };
0090
0091 XERCES_CPP_NAMESPACE_END
0092
0093 #endif