File indexing completed on 2025-11-04 10:30:44
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