Add static mgmt of interfaces.
authorcantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Mon, 20 Feb 2006 08:15:50 +0000 (08:15 +0000)
committercantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Mon, 20 Feb 2006 08:15:50 +0000 (08:15 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/trunk@17 de75baf8-a10c-0410-a50a-987c0e22f00f

xmltooling/XMLObjectBuilder.h

index 50842b7..cd746f2 100644 (file)
 #if !defined(__xmltooling_xmlobjbuilder_h__)\r
 #define __xmltooling_xmlobjbuilder_h__\r
 \r
+#include <map>\r
+#include <xmltooling/QName.h>\r
 #include <xmltooling/XMLObject.h>\r
 \r
+#if defined (_MSC_VER)\r
+    #pragma warning( push )\r
+    #pragma warning( disable : 4250 4251 )\r
+#endif\r
+\r
 namespace xmltooling {\r
 \r
     /**\r
@@ -33,7 +40,7 @@ namespace xmltooling {
      */\r
     class XMLTOOL_API XMLObjectBuilder\r
     {\r
-    MAKE_NON_COPYABLE(XMLObjectBuilder);\r
+    MAKE_NONCOPYABLE(XMLObjectBuilder);\r
     public:\r
         virtual ~XMLObjectBuilder() {}\r
         \r
@@ -51,8 +58,60 @@ namespace xmltooling {
          * needed to build an object.\r
          */\r
         virtual void resetState()=0;\r
+        \r
+        /**\r
+         * Retrieves an XMLObjectBuilder using the key it was registered with.\r
+         * \r
+         * @param key the key used to register the builder\r
+         * @return the builder\r
+         */\r
+        static XMLObjectBuilder* getBuilder(const QName& key) {\r
+            std::map<QName,XMLObjectBuilder*>::const_iterator i=m_map.find(key);\r
+            return (i==m_map.end()) ? NULL : i->second;\r
+        }\r
+    \r
+        /**\r
+         * Gets an immutable list of all the builders currently registered.\r
+         * \r
+         * @return list of all the builders currently registered\r
+         */\r
+        static const std::map<QName,XMLObjectBuilder*>& getBuilders() {\r
+            return m_map;\r
+        }\r
+    \r
+        /**\r
+         * Registers a new builder for the given key.\r
+         * \r
+         * @param builderKey the key used to retrieve this builder later\r
+         * @param builder the builder\r
+         */\r
+        static void registerBuilder(const QName& builderKey, XMLObjectBuilder* builder) {\r
+            m_map[builderKey]=builder;\r
+        }\r
+    \r
+        /**\r
+         * Deregisters a builder.\r
+         * \r
+         * @param builderKey the key for the builder to be deregistered\r
+         */\r
+        static void deregisterBuilder(const QName& builderKey) {\r
+            delete getBuilder(builderKey);\r
+            m_map.erase(builderKey);\r
+        }\r
+        \r
+        /**\r
+         * Unregisters and destroys all registered builders. \r
+         */\r
+        static void destroyBuilders();\r
+    \r
+    private:\r
+        static std::map<QName,XMLObjectBuilder*> m_map;\r
     };\r
 \r
 };\r
 \r
+#if defined (_MSC_VER)\r
+    #pragma warning( pop )\r
+#endif\r
+\r
 #endif /* __xmltooling_xmlobjbuilder_h__ */\r