summaryrefslogtreecommitdiff
path: root/trunk/TAO/TAO_IDL/include/ast_component.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/TAO_IDL/include/ast_component.h')
-rw-r--r--trunk/TAO/TAO_IDL/include/ast_component.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/trunk/TAO/TAO_IDL/include/ast_component.h b/trunk/TAO/TAO_IDL/include/ast_component.h
new file mode 100644
index 00000000000..b3369adf483
--- /dev/null
+++ b/trunk/TAO/TAO_IDL/include/ast_component.h
@@ -0,0 +1,88 @@
+// This may look like C, but it's really -*- C++ -*-
+// $Id$
+
+#ifndef _AST_COMPONENT_AST_COMPONENT_HH
+#define _AST_COMPONENT_AST_COMPONENT_HH
+
+#include "ast_interface.h"
+#include "ace/Unbounded_Queue.h"
+
+class TAO_IDL_FE_Export AST_Component : public virtual AST_Interface
+{
+public:
+ AST_Component (void);
+
+ AST_Component (UTL_ScopedName *n,
+ AST_Component *base_component,
+ AST_Interface **supports,
+ long n_supports,
+ AST_Interface **supports_flat,
+ long n_supports_flat);
+
+ virtual ~AST_Component (void);
+
+ // This also calls the base class version.
+ virtual void redefine (AST_Interface *from);
+
+ // Extend lookup to the base component.
+ virtual AST_Decl *look_in_inherited (UTL_ScopedName *e,
+ bool treat_as_ref);
+
+ // Extend lookup to the supported interfaces.
+ virtual AST_Decl *look_in_supported (UTL_ScopedName *e,
+ bool treat_as_ref);
+
+ // Utility data structure for port declarations.
+ struct port_description
+ {
+ // Constructor.
+ port_description (void) : id (0), impl (0), is_multiple (false) {}
+
+ // Fields.
+ Identifier *id;
+ AST_Type *impl;
+ bool is_multiple;
+ };
+
+ // Accessors.
+
+ AST_Component *base_component (void) const;
+
+ AST_Interface **supports (void) const;
+
+ long n_supports (void) const;
+
+ ACE_Unbounded_Queue<port_description> &provides (void);
+ ACE_Unbounded_Queue<port_description> &uses (void);
+ ACE_Unbounded_Queue<port_description> &emits (void);
+ ACE_Unbounded_Queue<port_description> &publishes (void);
+ ACE_Unbounded_Queue<port_description> &consumes (void);
+
+ // Cleanup function.
+ virtual void destroy (void);
+
+ // Narrowing.
+ DEF_NARROW_METHODS1(AST_Component, AST_Interface);
+ DEF_NARROW_FROM_DECL(AST_Component);
+ DEF_NARROW_FROM_SCOPE(AST_Component);
+
+ // AST Dumping.
+ virtual void dump (ACE_OSTREAM_TYPE &);
+
+ // Visiting.
+ virtual int ast_accept (ast_visitor *visitor);
+
+ // Check if we have redefined any of our parents' operations or attributes,
+ // and check if there is such a clash among the parents
+ virtual bool redef_clash (void);
+
+private:
+ AST_Component *pd_base_component;
+ ACE_Unbounded_Queue<port_description> pd_provides;
+ ACE_Unbounded_Queue<port_description> pd_uses;
+ ACE_Unbounded_Queue<port_description> pd_emits;
+ ACE_Unbounded_Queue<port_description> pd_publishes;
+ ACE_Unbounded_Queue<port_description> pd_consumes;
+};
+
+#endif // _AST_COMPONENT_AST_COMPONENT_HH