summaryrefslogtreecommitdiff
path: root/ACE/ace/Parse_Node.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/Parse_Node.h')
-rw-r--r--ACE/ace/Parse_Node.h523
1 files changed, 523 insertions, 0 deletions
diff --git a/ACE/ace/Parse_Node.h b/ACE/ace/Parse_Node.h
new file mode 100644
index 00000000000..1bbf8a347c3
--- /dev/null
+++ b/ACE/ace/Parse_Node.h
@@ -0,0 +1,523 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Parse_Node.h
+ *
+ * $Id$
+ *
+ * @author Doug Schmidt
+ */
+//=============================================================================
+
+
+#ifndef ACE_PARSE_NODE_H
+#define ACE_PARSE_NODE_H
+
+#include /**/ "ace/pre.h"
+
+#include /**/ "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if (ACE_USES_CLASSIC_SVC_CONF == 1)
+
+#include "ace/DLL.h"
+#include "ace/SString.h"
+#include "ace/Svc_Conf.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/// Forward declarations.
+class ACE_Service_Config;
+class ACE_Service_Type;
+
+/**
+ * @class ACE_Parse_Node
+ *
+ * @brief Provide the base of the object hierarchy that defines the parse
+ * tree of Service Nodes.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Parse_Node
+{
+public:
+ ACE_Parse_Node (void);
+ explicit ACE_Parse_Node (const ACE_TCHAR *name);
+ virtual ~ACE_Parse_Node (void);
+
+ ACE_Parse_Node *link (void) const;
+ void link (ACE_Parse_Node *);
+
+ /// Will update the yyereno member and/or the corresponding configuration
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno) = 0;
+
+ const ACE_TCHAR *name (void) const;
+ void print (void) const;
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ const ACE_TCHAR *name_;
+ ACE_Parse_Node *next_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Parse_Node (const ACE_Parse_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Parse_Node& operator= (const ACE_Parse_Node&))
+};
+
+/**
+ * @class ACE_Suspend_Node
+ *
+ * @brief Suspend a Service Node.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Suspend_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Suspend_Node (const ACE_TCHAR *name);
+ ~ACE_Suspend_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Suspend_Node (const ACE_Suspend_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Suspend_Node& operator= (const ACE_Suspend_Node&))
+};
+
+/**
+ * @class ACE_Resume_Node
+ *
+ * @brief Resume a Service Node.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Resume_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Resume_Node (const ACE_TCHAR *name);
+ ~ACE_Resume_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Resume_Node (const ACE_Resume_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Resume_Node& operator= (const ACE_Resume_Node&))
+};
+
+/**
+ * @class ACE_Remove_Node
+ *
+ * @brief Remove a Service Node.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Remove_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Remove_Node (const ACE_TCHAR *name);
+ ~ACE_Remove_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Remove_Node (const ACE_Remove_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Remove_Node& operator= (const ACE_Remove_Node&))
+};
+
+/**
+ * @class ACE_Static_Node
+ *
+ * @brief Handle a statically linked node.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Static_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Static_Node (const ACE_TCHAR *name, ACE_TCHAR *params = 0);
+ virtual ~ACE_Static_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+ virtual const ACE_Service_Type *record (const ACE_Service_Gestalt *g) const;
+
+ ACE_TCHAR *parameters (void) const;
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// "Command-line" parameters.
+ ACE_TCHAR *parameters_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Static_Node (const ACE_Static_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Static_Node& operator= (const ACE_Static_Node&))
+};
+
+
+class ACE_Service_Type_Factory;
+
+/**
+ * @class ACE_Dynamic_Node
+ *
+ * @brief Handle a dynamically linked node.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Dynamic_Node : public ACE_Static_Node
+{
+public:
+ ACE_Dynamic_Node (ACE_Service_Type_Factory const *, ACE_TCHAR *params);
+
+ virtual ~ACE_Dynamic_Node (void);
+
+ // virtual const ACE_Service_Type *record (void) const;
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Pointer to a descriptor that describes this node.
+ ACE_Auto_Ptr<const ACE_Service_Type_Factory> factory_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Dynamic_Node (const ACE_Dynamic_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Dynamic_Node& operator= (const ACE_Dynamic_Node&))
+};
+
+/**
+ * @class ACE_Stream_Node
+ *
+ * @brief Handle a Stream.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Stream_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Stream_Node (const ACE_Static_Node *, const ACE_Parse_Node *);
+ virtual ~ACE_Stream_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Linked list of modules that are part of the stream.
+ const ACE_Static_Node *node_;
+ const ACE_Parse_Node *mods_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Stream_Node (const ACE_Stream_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Stream_Node& operator= (const ACE_Stream_Node&))
+};
+
+/**
+ * @class ACE_Dummy_Node
+ *
+ * @brief I forget why this is here... ;-)
+ * @brief Used in a special case of static STREAM definintion
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ */
+class ACE_Dummy_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Dummy_Node (const ACE_Static_Node *, const ACE_Parse_Node *);
+ ~ACE_Dummy_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Linked list of modules that we're dealing with.
+ const ACE_Static_Node *node_;
+ const ACE_Parse_Node *mods_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Dummy_Node (const ACE_Dummy_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Dummy_Node& operator= (const ACE_Dummy_Node&))
+};
+
+/**
+ * @class ACE_Location_Node
+ *
+ * @brief Keep track of where a shared library is located.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Location_Node
+{
+public:
+ ACE_Location_Node (void);
+ const ACE_DLL &dll (void);
+ const ACE_TCHAR *pathname (void) const;
+ void pathname (const ACE_TCHAR *h);
+ int dispose (void) const;
+
+ virtual ~ACE_Location_Node (void);
+ virtual void set_symbol (void *h);
+
+ /// Will update the yyerrno member and/or corresponding configuration
+ /// repository
+ virtual void *symbol (ACE_Service_Gestalt *cfgptr,
+ int &yyerrno,
+ ACE_Service_Object_Exterminator * = 0) = 0;
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+protected:
+ int open_dll (int & yyerrno);
+
+ /// Pathname to the shared library we are working on.
+ const ACE_TCHAR *pathname_;
+
+ /**
+ * Flag indicating whether the Service_Object generated by this
+ * Location Node should be deleted or not
+ * (ACE_Service_Type::DELETE_OBJ.)
+ */
+ int must_delete_;
+
+ /// The open shared library.
+ ACE_DLL dll_;
+
+ /// Symbol that we've obtained from the shared library.
+ void *symbol_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Location_Node (const ACE_Location_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Location_Node& operator= (const ACE_Location_Node&))
+};
+
+/**
+ * @class ACE_Object_Node
+ *
+ * @brief Keeps track of the symbol name for a shared object.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Object_Node : public ACE_Location_Node
+{
+public:
+ ACE_Object_Node (const ACE_TCHAR *pathname, const ACE_TCHAR *obj_name);
+ virtual void *symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
+ ACE_Service_Object_Exterminator * = 0);
+ virtual ~ACE_Object_Node (void);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Name of the object that we're parsing.
+ const ACE_TCHAR *object_name_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Object_Node (const ACE_Object_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Object_Node& operator= (const ACE_Object_Node&))
+};
+
+/**
+ * @class ACE_Function_Node
+ *
+ * @brief Keeps track of the symbol name of for a shared function.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Function_Node : public ACE_Location_Node
+{
+public:
+ ACE_Function_Node (const ACE_TCHAR *pathname, const ACE_TCHAR *func_name);
+ virtual void *symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
+ ACE_Service_Object_Exterminator *gobbler = 0);
+ virtual ~ACE_Function_Node (void);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+
+ /// Return mangled function name that takes into account ACE
+ /// versioned namespace.
+ /**
+ * This function embeds the ACE versioned namespace name into the
+ * original function name if versioned namespace support has been
+ * enabled and the original function name conforms to the ACE
+ * Service Object factory function naming conventions. For example
+ * "@c _make_Foo" becomes "@c make_ACE_5_4_7_Foo".
+ * @par
+ * If versioned namespace support is disabled or the factory
+ * function name does conform to ACE conventions, no mangling will
+ * occur and the verbatim function name is returned.
+ *
+ * @return Function name that takes into account versioned namespace
+ * name. Caller is responsible for calling operator
+ * delete[] or ACE::strdelete() on the returned string.
+ */
+ ACE_TCHAR * make_func_name (ACE_TCHAR const * func_name);
+
+private:
+
+ /// Name of the function that we're parsing.
+ const ACE_TCHAR *function_name_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Function_Node (const ACE_Function_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Function_Node& operator= (const ACE_Function_Node&))
+};
+
+/**
+ * @class ACE_Static_Function_Node
+ *
+ * @brief Keeps track of the symbol name for a function that is not
+ * linked in from a DLL, but is statically linked with the
+ * application.
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ *
+ * @internal
+ */
+class ACE_Static_Function_Node : public ACE_Location_Node
+{
+public:
+ explicit ACE_Static_Function_Node (const ACE_TCHAR *func_name);
+ virtual void *symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
+ ACE_Service_Object_Exterminator * = 0);
+ virtual ~ACE_Static_Function_Node (void);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Name of the function that we're parsing.
+ const ACE_TCHAR *function_name_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Static_Function_Node (const ACE_Static_Function_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Static_Function_Node& operator= (const ACE_Static_Function_Node&))
+};
+
+/// A helper class used to safely register dynamic services, which may contains
+/// subordinate static services. It is used to capture the necessary data during
+/// the parsing, but perform the actuall instantiation later.
+class ACE_Service_Type_Factory
+{
+public:
+ ACE_Service_Type_Factory (ACE_TCHAR const *name,
+ int type,
+ ACE_Location_Node *location,
+ int active);
+
+ ~ACE_Service_Type_Factory (void);
+
+ ACE_Service_Type *make_service_type (ACE_Service_Gestalt *pcfg) const;
+
+ ACE_TCHAR const* name (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+
+ /**
+ * Not implemented to enforce no copying
+ */
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Service_Type_Factory(const ACE_Service_Type_Factory&))
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Service_Type_Factory& operator=(const ACE_Service_Type_Factory&))
+
+private:
+ ACE_TString name_;
+ int type_;
+ ACE_Auto_Ptr<ACE_Location_Node> location_;
+ int is_active_;
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* ACE_USES_CLASSIC_SVC_CONF == 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_PARSE_NODE_H */