summaryrefslogtreecommitdiff
path: root/CIAO/CIDLC/ServantSourceGenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/CIDLC/ServantSourceGenerator.cpp')
-rw-r--r--CIAO/CIDLC/ServantSourceGenerator.cpp4530
1 files changed, 0 insertions, 4530 deletions
diff --git a/CIAO/CIDLC/ServantSourceGenerator.cpp b/CIAO/CIDLC/ServantSourceGenerator.cpp
deleted file mode 100644
index df7722c77d1..00000000000
--- a/CIAO/CIDLC/ServantSourceGenerator.cpp
+++ /dev/null
@@ -1,4530 +0,0 @@
-// file : CIDLC/ServantSourceGenerator.cpp
-// author : Jeff Parsons <j.parsons@vanderbilt.edu>
-// cvs-id : $Id$
-
-#include "ServantSourceGenerator.hpp"
-#include "CorbaTypeNameEmitters.hpp"
-#include "UtilityTypeNameEmitters.hpp"
-#include "ParameterEmitter_T.hpp"
-#include "AttributeSourceEmitters_T.hpp"
-#include "CompositionEmitter.hpp"
-#include "ModuleEmitter.hpp"
-#include "InterfaceEmitter.hpp"
-#include "Literals.hpp"
-
-#include <ostream>
-#include <sstream>
-
-#include "CCF/CodeGenerationKit/Regex.hpp"
-
-using namespace CCF::CIDL;
-using namespace CCF::CIDL::SemanticGraph;
-using namespace StringLiterals;
-
-using std::string;
-
-namespace
-{
- struct RepoIdEmitter : Traversal::Type,
- EmitterBase
- {
- RepoIdEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Type& t)
- {
- os << "\"" << t.context ().get<string> (STRS[REPO_ID]) << "\"";
- }
- };
-
- struct ConsumerRepoIdEmitter : Traversal::Type,
- EmitterBase
- {
- ConsumerRepoIdEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Type& t)
- {
- string holder (t.context ().get<string> (STRS[REPO_ID]));
- os << "\"" << holder.substr (0, holder.rfind (':'))
- << "Consumer:1.0\"";
- }
- };
-
- struct FlatNameEmitter : Traversal::Type,
- EmitterBase
- {
- FlatNameEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Type& t)
- {
- // We need to escape C++ keywords before flattening the name.
- //
- std::ostringstream ostr;
- ostr.pword (name_printer_index) = os.pword (name_printer_index);
- ostr << t.scoped_name ();
- os << regex::perl_s (ostr.str (), "/::/_/");
- }
- };
-
- struct OperationExecEmitter : Traversal::Operation,
- EmitterBase
- {
- OperationExecEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- virtual void
- name (Type& o)
- {
- os << o.name ();
- }
-
- virtual void
- receives_pre (Type&)
- {
- os << " (" << endl;
- }
-
- virtual void
- receives_none (Type&)
- {
- os << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");";
- }
-
- virtual void
- receives_post (Type&)
- {
- os << endl << STRS[ENV_ARG] << ");";
- }
-
- /// If we don't do this, the comma() method just below
- /// gets used not only with the arguments, but also
- /// in raises(). Even though we are not generating the
- /// exception list here, the front end iterator still
- /// executes, and picks up the overridden comma(). So
- /// we override raises() itself to do nothing.
- virtual void
- raises (Type&)
- {
- }
-
- virtual void
- comma (Type&)
- {
- os << "," << endl;
- }
- };
-
- struct OpExecReturnEmitter : Traversal::Type,
- Traversal::Void
- {
- OpExecReturnEmitter (std::ostream& os_)
- : os (os_)
- {}
-
- virtual void
- traverse (Void&)
- {
- os << "this->executor_->";
- }
-
- virtual void
- traverse (SemanticGraph::Type&)
- {
- os << "return this->executor_->";
- }
-
- private:
- std::ostream& os;
- };
-
- // For generating parameter names in operation delegation.
- template <typename T>
- struct ParameterExecEmitter : T
- {
- ParameterExecEmitter (std::ostream& os_)
- : os (os_)
- {}
-
- virtual void
- name (typename T::Type& p)
- {
- os << p.name ();
- }
-
- private:
- std::ostream& os;
- };
-
- template <typename T>
- struct OperationEmitter : Traversal::Operation, EmitterBase
- {
- OperationEmitter (Context& c,
- T& scope)
- : EmitterBase (c),
- scope_ (scope),
- ace_check_return_emitter_ (c)
- {
- ace_check_returns_.node_traverser (ace_check_return_emitter_);
- }
-
- // Overridden by facet and home operation emitters to do nothing.
- virtual void
- gen_swap_related (Type& o)
- {
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");";
-
- Traversal::Operation::returns (o, ace_check_returns_);
-
- os << endl;
- }
- }
-
- virtual void
- name (Type& o)
- {
- os << endl
- << scope_.name () << "_Servant::" << o.name ();
- }
-
- virtual void
- receives_pre (Type&)
- {
- os << " (" << endl;
- }
-
- virtual void
- receives_none (Type&)
- {
- os << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
-
- virtual void
- receives_post (Type&)
- {
- os << endl << STRS[ENV_SRC] << ")" << endl;
- }
-
- virtual void
- raises_pre (Type&)
- {
- os << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- raises_none (Type&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- raises_post (Type&)
- {
- os << "))";
- }
-
- virtual void
- post (Type& o)
- {
- os << "{";
-
- this->gen_swap_related (o);
-
- OperationExecEmitter operation_emitter (ctx);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- operation_emitter.edge_traverser (receives);
- operation_emitter.edge_traverser (returns);
-
- ParameterExecEmitter<Traversal::Parameter> param (os);
- receives.node_traverser (param);
-
- OpExecReturnEmitter return_emitter (os);
- returns.node_traverser (return_emitter);
-
- operation_emitter.traverse (o);
-
- os << "}";
- }
-
- virtual void
- comma (Type&)
- {
- os << "," << endl;
- }
-
- protected:
- T& scope_;
- AceCheckReturnEmitter ace_check_return_emitter_;
- Traversal::Returns ace_check_returns_;
- };
-
- struct FacetEmitter : Traversal::UnconstrainedInterface,
- EmitterBase
- {
- FacetEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- struct FacetOperationEmitter
- : OperationEmitter<SemanticGraph::UnconstrainedInterface>
- {
- FacetOperationEmitter (Context& c,
- SemanticGraph::UnconstrainedInterface& i)
- : OperationEmitter<SemanticGraph::UnconstrainedInterface> (c, i)
- {}
-
- // Overriden to do nothing since we don't want to generate
- // component swapping related code for facet operations.
- virtual void
- gen_swap_related (Type&)
- {
- }
-
- virtual void
- pre (Type&)
- {
- os << "template <typename T>" << endl;
- }
-
- virtual void
- name (Type& o)
- {
- os << endl
- << scope_.name () << "_Servant_T<T>::" << o.name ();
- }
- };
-
- struct FacetWriteAttributeEmitter
- : WriteAttributeSourceEmitter<SemanticGraph::Interface>
- {
- // Since swapping does not affect facets, we can just pass 'false'
- // to the base class constructor, and not override gen_swapping_set().
- FacetWriteAttributeEmitter (Context& c, SemanticGraph::Interface& i)
- : WriteAttributeSourceEmitter<SemanticGraph::Interface> (c,
- i,
- false,
- false)
- {}
-
- virtual void
- pre (SemanticGraph::ReadWriteAttribute& a)
- {
- os << "template <typename T>" << endl;
-
- WriteAttributeSourceEmitter<SemanticGraph::Interface>::pre (a);
- }
-
- virtual void
- name (SemanticGraph::ReadWriteAttribute& a)
- {
- os << scope_.name () << "_Servant_T<T>::"
- << a.name () << " (" << endl;
-
- Traversal::ReadWriteAttribute::belongs (a, write_belongs_);
-
- os << " " << a.name () << endl
- << STRS[ENV_SRC] << ")" << endl;
- }
- };
-
- struct FacetAttributeEmitter
- : AttributeSourceEmitter<SemanticGraph::Interface>
- {
- FacetAttributeEmitter (Context& c,
- SemanticGraph::Interface& i)
- : AttributeSourceEmitter<SemanticGraph::Interface> (c, i)
- {}
-
- // ReadWriteAttribute
- //
-
- // No-op override because we don't want to generate any swapping
- // code for facets.
- virtual void gen_swapping_get (SemanticGraph::ReadWriteAttribute&)
- {
- }
-
- virtual void
- gen_write_operation (SemanticGraph::ReadWriteAttribute& a,
- bool /* swapping */)
- {
- FacetWriteAttributeEmitter write_attribute_emitter (ctx, scope_);
- write_attribute_emitter.traverse (a);
- }
-
- virtual void
- pre (SemanticGraph::ReadWriteAttribute& a)
- {
- os << "template <typename T>" << endl;
-
- AttributeSourceEmitter<SemanticGraph::Interface>::pre (a);
- }
-
- virtual void
- name (SemanticGraph::ReadWriteAttribute& a)
- {
- os << scope_.name () << "_Servant_T<T>::"
- << a.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
-
- // ReadAttribute
- //
-
- // No-op override because we don't want to generate any swapping
- // code for facets.
- virtual void gen_swapping_get (SemanticGraph::ReadAttribute&)
- {
- }
-
- virtual void
- pre (SemanticGraph::ReadAttribute& a)
- {
- os << "template <typename T>" << endl;
-
- AttributeSourceEmitter<SemanticGraph::Interface>::pre (a);
- }
-
- virtual void
- name (SemanticGraph::ReadAttribute& a)
- {
- os << scope_.name () << "_Servant_T<T>::"
- << a.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
- };
-
- virtual void
- traverse (UnconstrainedInterface& i)
- {
- if (i.context ().count ("facet_src_gen")) return;
-
- // We need to escape C++ keywords before flattening the name.
- //
- string name;
- {
- std::ostringstream ostr;
- ostr.pword (name_printer_index) = os.pword (name_printer_index);
- ostr << i.scoped_name ().scope_name ();
- name = regex::perl_s (ostr.str (), "/::/_/");
- }
-
-
- /// Open a namespace made from the interface scope's name.
- os << "namespace " << STRS[FACET_PREFIX] << name
- << "{";
-
- os << "template <typename T>" << endl
- << i.name () << "_Servant_T<T>::" << i.name ()
- << "_Servant_T (" << endl
- << i.scoped_name ().scope_name () << "::CCM_" << i.name ()
- << "_ptr executor," << endl
- << "::Components::CCMContext_ptr c)" << endl
- << " : executor_ ( " << i.scoped_name ().scope_name () << "::CCM_"
- << i.name () << "::_duplicate (executor))," << endl
- << " ctx_ ( ::Components::CCMContext::_duplicate (c))" << endl
- << "{"
- << "}";
-
- os << "template <typename T>" << endl
- << i.name () << "_Servant_T<T>::~" << i.name ()
- << "_Servant_T (void)" << endl
- << "{"
- << "}";
-
- {
- InterfaceEmitter interface_emitter (ctx);
-
- Traversal::Defines defines_;
- Traversal::Inherits inherits_;
- interface_emitter.edge_traverser (defines_);
- interface_emitter.edge_traverser (inherits_);
-
- FacetAttributeEmitter attribute_emitter (ctx, i);
- defines_.node_traverser (attribute_emitter);
-
- FacetOperationEmitter operation_emitter (ctx, i);
- defines_.node_traverser (operation_emitter);
- inherits_.node_traverser (interface_emitter);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- Traversal::Raises raises;
- operation_emitter.edge_traverser (receives);
- operation_emitter.edge_traverser (returns);
- operation_emitter.edge_traverser (raises);
-
- ParameterEmitter<Traversal::InParameter> in_param (ctx);
- ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
- ParameterEmitter<Traversal::OutParameter> out_param (ctx);
- receives.node_traverser (in_param);
- receives.node_traverser (inout_param);
- receives.node_traverser (out_param);
-
- ReturnTypeNameEmitter return_type_emitter (ctx);
- FullTypeNameEmitter type_name_emitter (ctx);
- returns.node_traverser (return_type_emitter);
- raises.node_traverser (type_name_emitter);
-
- Traversal::Belongs in_belongs, inout_belongs, out_belongs;
- in_param.edge_traverser (in_belongs);
- inout_param.edge_traverser (inout_belongs);
- out_param.edge_traverser (out_belongs);
-
- INArgTypeNameEmitter in_arg_emitter (ctx);
- INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
- OUTArgTypeNameEmitter out_arg_emitter (ctx);
- in_belongs.node_traverser (in_arg_emitter);
- inout_belongs.node_traverser (inout_arg_emitter);
- out_belongs.node_traverser (out_arg_emitter);
-
- inherits (i, inherits_);
- names (i, defines_);
- }
-
- os << "template <typename T>" << endl
- << "::CORBA::Object_ptr" << endl
- << i.name () << "_Servant_T<T>::_get_component (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << STRS[COMP_SC] << "_var sc =" << endl
- << " " << STRS[COMP_SC] << "::_narrow (" << endl
- << " this->ctx_.in ()" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl
- << "if (! ::CORBA::is_nil (sc.in ()))" << endl
- << "{"
- << "return sc->get_CCM_object (" << endl
- << STRS[ENV_SNGL_ARG] << ");"
- << "}"
- << "::Components::EntityContext_var ec =" << endl
- << "::Components::EntityContext::_narrow (" << endl
- << "this->ctx_.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl
- << "if (! ::CORBA::is_nil (ec.in ()))" << endl
- << "{"
- << "return ec->get_CCM_object (" << endl
- << STRS[ENV_SNGL_ARG] << ");"
- << "}"
- << STRS[ACE_TR] << " ( ::CORBA::INTERNAL (), 0);" << endl
- << "}" << endl;
-
- // Close the facet servant's namespace.
- os << "}";
-
- i.context ().set ("facet_src_gen", true);
- }
- };
-
- struct ContextEmitter : Traversal::Component, EmitterBase
- {
- ContextEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- // Nested classes used by ContextEmitter.
- private:
- struct ContextPortsEmitter : Traversal::SingleUserData,
- Traversal::MultiUserData,
- Traversal::PublisherData,
- Traversal::EmitterData,
- EmitterBase
- {
- ContextPortsEmitter (Context& c, SemanticGraph::Component& scope)
- : EmitterBase (c),
- type_name_emitter_ (c),
- simple_type_name_emitter_ (c),
- scope_ (scope)
- {
- belongs_.node_traverser (type_name_emitter_);
- simple_belongs_.node_traverser (simple_type_name_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::SingleUser& u)
- {
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_ptr" << endl
- << scope_.name () << "_Context::get_connection_"
- << u.name () << " (" << endl
- << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "return ";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "::_duplicate (" << endl
- << "this->ciao_uses_" << u.name ()
- << "_.in ());" << endl
- << "}";
-
- os << "void" << endl
- << scope_.name () << "_Context::connect_"
- << u.name () << " (" << endl;
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "if (! ::CORBA::is_nil (this->ciao_uses_"
- << u.name () << "_.in ()))" << endl
- << "{"
- << "ACE_THROW ( " << STRS[EXCP_AC] << " ());"
- << "}"
- << "if ( ::CORBA::is_nil (c))" << endl
- << "{"
- << "ACE_THROW ( " << STRS[EXCP_IC] << " ());"
- << "}"
- << "this->ciao_uses_" << u.name () << "_ =" << endl
- << " ";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "::_duplicate (c);" << endl
- << "}";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_ptr" << endl
- << scope_.name () << "_Context::disconnect_"
- << u.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "))" << endl
- << "{"
- << "if ( ::CORBA::is_nil (this->ciao_uses_"
- << u.name () << "_.in ()))" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_NC] << " ()," << endl;
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "::_nil ());" << endl
- << "}"
- << "return this->ciao_uses_" << u.name ()
- << "_._retn ();" << endl
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::MultiUser& u)
- {
- os << u.scoped_name () << "Connections *" << endl
- << scope_.name () << "_Context::get_connections_"
- << u.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << u.scoped_name () << "Connections *tmp_retv = 0;"
- << "ACE_NEW_THROW_EX ("
- << "tmp_retv," << endl
- << u.scoped_name () << "Connections (" << endl
- << "this->ciao_uses_"
- << u.name () << "_.current_size ())," << endl
- << "::CORBA::NO_MEMORY ());" << endl
- << u.scoped_name () << "Connections_var retv"
- << " = tmp_retv;" << endl
- << "retv->length (this->ciao_uses_" << u.name ()
- << "_.current_size ());" << endl;
-
- os << "::CORBA::ULong i = 0;" << endl;
-
- os << "for (ACE_Active_Map_Manager< " << endl
- << " ";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_var>::iterator iter =" << endl
- << " this->ciao_uses_" << u.name () << "_.begin ();" << endl
- << "iter != this->ciao_uses_" << u.name () << "_.end ();"
- << endl
- << "++iter)" << endl
- << "{"
- << "ACE_Active_Map_Manager< " << endl;
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_var>::ENTRY & entry = *iter;" << endl
- << "retv[i].objref = ";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "::_narrow (" << endl
- << "entry.int_id_.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
-
- os << "ACE_NEW_THROW_EX ("
- << "retv[i].ck.inout ()," << endl
- << "::CIAO::Map_Key_Cookie (entry.ext_id_)," << endl
- << "::CORBA::NO_MEMORY ());" << endl
- << "++i;" << endl
- << "}";
-
- os << "return retv._retn ();" << endl
- << "}";
-
- os << STRS[COMP_CK] << " *" << endl
- << scope_.name () << "_Context::connect_"
- << u.name () << " (" << endl;
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "if ( ::CORBA::is_nil (c))" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IC] << " (), 0);" << endl
- << "}";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_var conn = ";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "::_duplicate (c);"
- << "ACE_Active_Map_Manager_Key key;" << endl;
-
- os << "if (this->ciao_uses_" << u.name ()
- << "_.bind (conn.in (), key) == -1)" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IC] << " (), 0);" << endl
- << "}";
-
- os << "conn._retn ();" << endl;
-
- os << STRS[COMP_CK] << " * ck = 0;"
- << "ACE_NEW_THROW_EX ("
- << "ck," << endl
- << "::CIAO::Map_Key_Cookie (key)," << endl
- << "::CORBA::NO_MEMORY ());" << endl;
-
-
- os << "return ck;" << endl
- << "}";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_ptr" << endl
- << scope_.name () << "_Context::disconnect_"
- << u.name () << " (" << endl
- << STRS[COMP_CK] << " * ck" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_var retv;"
- << "ACE_Active_Map_Manager_Key key;" << endl;
-
- os << "if (! CIAO::Map_Key_Cookie::extract (ck, key))"
- << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IC] << " ()," << endl;
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "::_nil ());" << endl
- << "}";
-
- os << "if (this->ciao_uses_" << u.name ()
- << "_.unbind (key, retv) != 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IC] << " ()," << endl;
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "::_nil ());" << endl
- << "}";
-
- os << "return retv._retn ();" << endl
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::Publisher& p)
- {
- os << "void" << endl
- << scope_.name () << "_Context::push_"
- << p.name () << " (" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << " *ev" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "for (ACE_Active_Map_Manager< " << endl
- << " ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var>::iterator iter =" << endl
- << " this->ciao_publishes_" << p.name ()
- << "_map_.begin ();" << endl
- << "iter != this->ciao_publishes_" << p.name ()
- << "_map_.end ();" << endl
- << "++iter)" << endl
- << "{"
- << "(*iter).int_id_->push_";
-
- Traversal::PublisherData::belongs (p, simple_belongs_);
-
- os << " (" << endl
- << "ev" << endl
- << STRS[ENV_ARG] << ");"
- << "ACE_CHECK;" << endl
- << "}";
-
- os << "for (ACE_Active_Map_Manager< " << endl
- << " " << STRS[COMP_ECB] << "_var>::iterator giter =" << endl
- << " this->ciao_publishes_" << p.name ()
- << "_generic_map_.begin ();" << endl
- << "giter != this->ciao_publishes_" << p.name ()
- << "_generic_map_.end ();" << endl
- << "++giter)" << endl
- << "{"
- << "(*giter).int_id_->push_event" << " (" << endl
- << "ev" << endl
- << STRS[ENV_ARG] << ");"
- << "ACE_CHECK;" << endl
- << "}"
- << "}";
-
- os << STRS[COMP_CK] << " *" << endl
- << scope_.name () << "_Context::subscribe_"
- << p.name () << " (" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "))" << endl
- << "{"
- << "if ( ::CORBA::is_nil (c))" << endl
- << "{"
- << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), 0);" << endl
- << "}";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var sub =" << endl
- << " ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_duplicate (c);" << endl
- << "ACE_Active_Map_Manager_Key key;"
- << "this->ciao_publishes_" << p.name ()
- << "_map_.bind (sub.in (), key);"
- << "sub._retn ();" << endl
- << STRS[COMP_CK] << " * retv = 0;"
- << "ACE_NEW_THROW_EX ("
- << "retv," << endl
- << "::CIAO::Map_Key_Cookie (key)," << endl
- << "::CORBA::NO_MEMORY ());" << endl
- << "return retv;" << endl
- << "}";
-
- os << STRS[COMP_CK] << " *" << endl
- << scope_.name () << "_Context::subscribe_"
- << p.name () << "_generic (" << endl
- << STRS[COMP_ECB] << "_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "))" << endl
- << "{"
- << "if ( ::CORBA::is_nil (c))" << endl
- << "{"
- << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), 0);" << endl
- << "}";
-
- os << STRS[COMP_ECB] << "_var sub =" << endl
- << " " << STRS[COMP_ECB] << "::_duplicate (c);" << endl
- << "ACE_Active_Map_Manager_Key key;"
- << "this->ciao_publishes_" << p.name ()
- << "_generic_map_.bind (sub.in (), key);"
- << "sub._retn ();" << endl
- << STRS[COMP_CK] << " * retv = 0;"
- << "ACE_NEW_THROW_EX ("
- << "retv," << endl
- << "::CIAO::Map_Key_Cookie (key)," << endl
- << "::CORBA::NO_MEMORY ());" << endl
- << "return retv;" << endl
- << "}";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_ptr" << endl
- << scope_.name () << "_Context::unsubscribe_"
- << p.name () << " (" << endl
- << STRS[COMP_CK] << " *ck" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "ACE_Active_Map_Manager_Key key;" << endl
- << "if (ck == 0 || ::CIAO::Map_Key_Cookie::extract (ck, key) == false)"
- << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IC] << " ()," << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_nil ());" << endl
- << "}";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var retv;"
- << "if (this->ciao_publishes_" << p.name ()
- << "_map_.unbind (key, retv) == 0)" << endl
- << "{"
- << "return retv._retn ();" << endl
- << "}";
-
- os << STRS[COMP_ECB] << "_var ecb;" << endl;
-
- os << "if (this->ciao_publishes_" << p.name ()
- << "_generic_map_.unbind (key, ecb) != 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IC] << " ()," << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_nil ());" << endl
- << "}"
- << "return ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_nil ();" << endl
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::Emitter& e)
- {
- os << "void" << endl
- << scope_.name () << "_Context::push_"
- << e.name () << " (" << endl;
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << " *ev" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "this->ciao_emits_" << e.name ()
- << "_consumer_->push_";
-
- Traversal::EmitterData::belongs (e, simple_belongs_);
-
- os << " (" << endl
- << "ev" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
-
- os << "void" << endl
- << scope_.name () << "_Context::connect_"
- << e.name () << " (" << endl;
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_AC] << "))" << endl
- << "{"
- << "if ( ::CORBA::is_nil (c))" << endl
- << "{"
- << "ACE_THROW ( ::CORBA::BAD_PARAM ());" << endl
- << "}"
- << "if (! ::CORBA::is_nil (this->ciao_emits_" << e.name ()
- << "_consumer_.in ()))" << endl
- << "{"
- << "ACE_THROW ( " << STRS[EXCP_AC] << " ());" << endl
- << "}"
- << "this->ciao_emits_" << e.name ()
- << "_consumer_ = " << endl;
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer::_duplicate (c);" << endl
- << "}";
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer_ptr" << endl
- << scope_.name () << "_Context::disconnect_"
- << e.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "))" << endl
- << "{"
- << "if ( ::CORBA::is_nil (this->ciao_emits_" << e.name ()
- << "_consumer_.in ()))" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_NC] << " ()," << endl;
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer::_nil ());" << endl
- << "}"
- << "return this->ciao_emits_" << e.name ()
- << "_consumer_._retn ();" << endl
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- SimpleTypeNameEmitter simple_type_name_emitter_;
- Traversal::Belongs belongs_;
- Traversal::Belongs simple_belongs_;
- SemanticGraph::Component& scope_;
- };
-
- struct SwappableGetConsumersEmitter : Traversal::PublisherData,
- Traversal::EmitterData,
- EmitterBase
- {
- SwappableGetConsumersEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::Publisher& p)
- {
- os << "if (ACE_OS::strcmp (publisher_name, \""
- << p.name ().unescaped_str () << "\") == 0)" << endl
- << "{"
- << "_ciao_size = this->ciao_publishes_" << p.name ()
- << "_map_.current_size ();" << endl
- << "ACE_NEW_THROW_EX ("
- << "tmp," << endl
- << STRS[COMP_CD] << " (_ciao_size)," << endl
- << "::CORBA::NO_MEMORY ());" << endl
- << "retval = tmp;"
- << "retval->length (_ciao_size);" << endl
- << "ACE_Active_Map_Manager<" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var>::iterator end =" << endl
- << " this->ciao_publishes_" << p.name ()
- << "_map_.end ();" << endl
- << "for (ACE_Active_Map_Manager<" << endl
- << " ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var>::iterator iter =" << endl
- << " this->ciao_publishes_" << p.name ()
- << "_map_.begin ();"
- << "iter != end;"
- << "++iter)" << endl
- << "{"
- << "ACE_Active_Map_Manager<" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var>::entry &e = *iter;" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var c =" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_narrow (" << endl
- << "e.int_id_.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl
- << "if ( ::CORBA::is_nil (c.in ()))"
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);"
- << "}"
- << "::Components::ConsumerDescription *cd = 0;"
- << "ACE_NEW_THROW_EX ("
- << "cd," << endl
- << "OBV_Components::ConsumerDescription ()," << endl
- << "::CORBA::NO_MEMORY ());" << endl
- << "::Components::ConsumerDescription_var safe = cd;"
- << "safe->name (\"\");"
- << "safe->type_id (\"\");"
- << "safe->consumer (c.in ());" << endl
- << "retval[_ciao_index++] = safe;"
- << "}"
- << "return retval._retn ();"
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::Emitter&)
- {
- // Don't know yet if swappable components need anything here.
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- };
-
- public:
- virtual void
- pre (Type& t)
- {
- os << t.name () << "_Context::"
- << t.name () << "_Context (" << endl
- << "::Components::CCMHome_ptr h," << endl
- << "::CIAO::Session_Container *c," << endl
- << t.name () << "_Servant *sv)" << endl
- << " : ::CIAO::Context_Impl_Base (h, c), " << endl
- << " ::CIAO::Context_Impl<" << endl
- << " " << t.scoped_name ().scope_name () << "::CCM_"
- << t.name () << "_Context," << endl
- << " " << t.name () << "_Servant," << endl
- << " " << t.scoped_name () << "," << endl
- << " " << t.scoped_name () << "_var" << endl
- << " > (h, c, sv)";
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- os << "," << endl
- << " ::CIAO::Upgradeable_Context_Impl<" << endl
- << " " << t.scoped_name ().scope_name () << "::CCM_"
- << t.name () << "_Context," << endl
- << " " << t.name () << "_Servant," << endl
- << " " << t.scoped_name () << "," << endl
- << " " << t.scoped_name () << "_var" << endl
- << " > (h, c, sv)" << endl;
- }
- else
- {
- os << endl;
- }
-
- os << "{"
- << "}";
-
- os << t.name () << "_Context::~"
- << t.name () << "_Context (void)" << endl
- << "{"
- << "}";
-
- os << "// Operations for " << t.name () << " receptacles"
- << " and event sources," << endl
- << "// defined in " << t.scoped_name ().scope_name () << "::CCM_"
- << t.name () << "_Context."
- << endl << endl;
-
- // Generate Context class operations for receptacles and event sources.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- ContextPortsEmitter ports_emitter (ctx, t);
- defines.node_traverser (ports_emitter);
-
- component_emitter.traverse (t);
- }
-
- // Extra *_Context methods for swapping container.
- if (swapping)
- {
- os << "// Operations defined in " << t.scoped_name ().scope_name ()
- << "::CCM_" << t.name () << "_Context" << endl
- << "// that enable component swapping in the container"
- << endl << endl;
-
- os << STRS[COMP_CD] << " *" << endl
- << t.name () << "_Context::get_registered_consumers (" << endl
- << "const char *publisher_name" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "if (publisher_name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);"
- << "}"
- << STRS[COMP_CD] << " *tmp = 0;"
- << STRS[COMP_CD] << "_var retval;"
- << "CORBA::ULong _ciao_index = 0;"
- << "CORBA::ULong _ciao_size = 0;"
- << STRS[ACE_UA] << " (tmp);"
- << STRS[ACE_UA] << " (retval);"
- << STRS[ACE_UA] << " (_ciao_index);"
- << STRS[ACE_UA] << " (_ciao_size);" << endl;
-
- // Generate IF block for each event sources.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- SwappableGetConsumersEmitter get_consumers_emitter (ctx);
- defines.node_traverser (get_consumers_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);"
- << "}";
- }
-
- os << "// CIAO-specific." << endl << endl;
-
- os << t.name () << "_Context *" << endl
- << t.name () << "_Context::_narrow (" << endl
- << STRS[COMP_SC] << "_ptr p" << endl
- << STRS[ENV_SRC_NOTUSED] << ")" << endl
- << "{"
- << "return dynamic_cast<" << t.name () << "_Context *> (p);"
- << endl
- << "}";
- }
- };
-
- struct ServantEmitter : Traversal::Component, EmitterBase
- {
- ServantEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- // Nested classes used by ServantEmitter.
- private:
- struct EmitsConnectEmitter : Traversal::EmitterData,
- EmitterBase
-
- {
- EmitsConnectEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (Type& t)
- {
- os << "if (ACE_OS::strcmp (emitter_name, \""
- << t.name ().unescaped_str () << "\") == 0)" << endl
- << "{";
-
- Traversal::EmitterData::belongs (t, belongs_);
-
- os << "Consumer_var _ciao_consumer =" << endl
- << " ";
-
- Traversal::EmitterData::belongs (t, belongs_);
-
- os << "Consumer::_narrow (" << endl
- << " consumer" << endl
- << " " << STRS[ENV_ARG] << ");"
- << "ACE_CHECK;" << endl
- << "if ( ::CORBA::is_nil (_ciao_consumer.in ()))" << endl
- << "{"
- << "ACE_THROW ( " << STRS[EXCP_IC] << " ());"
- << endl
- << "}"
- << "this->connect_" << t.name ()
- << " (" << endl
- << "_ciao_consumer.in ()" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "return;"
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- };
-
- struct EmitsDisconnectEmitter : Traversal::EmitterData,
- EmitterBase
- {
- EmitsDisconnectEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (Type& t)
- {
- os << "if (ACE_OS::strcmp (source_name, \""
- << t.name ().unescaped_str () << "\") == 0)" << endl
- << "{"
- << "return this->disconnect_" << t.name ()
- << " (" << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
- };
-
- struct NavigationGetFacetExecEmitter : Traversal::ProviderData,
- EmitterBase
- {
- NavigationGetFacetExecEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- virtual void
- traverse (Type& t)
- {
- os << "if (ACE_OS::strcmp (name, \""
- << t.name ().unescaped_str () << "\") == 0)" << endl
- << "{"
- << "return this->executor_->get_" << t.name ()
- << " (" << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
- };
-
- struct PublishesEmitter : Traversal::PublisherData,
- EmitterBase
- {
- PublishesEmitter (Context& c,
- SemanticGraph::Component& scope)
- : EmitterBase (c),
- type_name_emitter_ (c),
- scope_ (scope)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (Type& p)
- {
- os << STRS[COMP_CK] << " *" << endl
- << scope_.name ()
- << "_Servant::subscribe_" << p.name () << " (" << endl;
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "))" << endl
- << "{";
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
- }
-
- os << "return this->context_->subscribe_" << p.name ()
- << " (" << endl
- << "c" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
-
- os << STRS[COMP_CK] << " *" << endl
- << scope_.name ()
- << "_Servant::subscribe_" << p.name () << "_generic (" << endl
- << STRS[COMP_ECB] << "_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
- }
-
- os << "return this->context_->subscribe_" << p.name ()
- << "_generic (" << endl
- << "c" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_ptr" << endl
- << scope_.name ()
- << "_Servant::unsubscribe_" << p.name () << " (" << endl
- << STRS[COMP_CK] << " *ck" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_nil ());" << endl;
- }
-
- os << "return this->context_->unsubscribe_"
- << p.name () << " (" << endl
- << "ck" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- SemanticGraph::Component& scope_;
- };
-
- struct UsesConnectEmitter : Traversal::SingleUserData,
- Traversal::MultiUserData,
- EmitterBase
- {
- UsesConnectEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::SingleUser& u)
- {
- os << "if (ACE_OS::strcmp (name, \""
- << u.name ().unescaped_str () << "\") == 0)" << endl
- << "{";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_var _ciao_conn =" << endl;
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "::_narrow (" << endl
- << "connection" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl
- << "if ( ::CORBA::is_nil (_ciao_conn.in ()))" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);"
- << endl
- << "}"
- << "// Simplex connect." << endl
- << "this->connect_" << u.name () << " (" << endl
- << "_ciao_conn.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl
- << "return 0;" << endl
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::MultiUser& u)
- {
- os << "if (ACE_OS::strcmp (name, \""
- << u.name ().unescaped_str () << "\") == 0)" << endl
- << "{";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_var _ciao_conn =" << endl;
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "::_narrow (" << endl
- << "connection" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl
- << "if ( ::CORBA::is_nil (_ciao_conn.in ()))" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);"
- << endl
- << "}"
- << "// Multiplex connect." << endl
- << "return this->connect_" << u.name () << " (" << endl
- << "_ciao_conn.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- };
-
- struct UsesDisconnectEmitter : Traversal::SingleUserData,
- Traversal::MultiUserData,
- EmitterBase
- {
- UsesDisconnectEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (SemanticGraph::SingleUser& u)
- {
- os << "if (ACE_OS::strcmp (name, \""
- << u.name ().unescaped_str () << "\") == 0)" << endl
- << "{"
- << "// Simplex disconnect." << endl
- << "return this->disconnect_" << u.name ()
- << " (" << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::MultiUser& u)
- {
- os << "if (ACE_OS::strcmp (name, \""
- << u.name ().unescaped_str () << "\") == 0)" << endl
- << "{"
- << "// Multiplex disconnect." << endl
- << "if (ck == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_CR] << " ()," << endl
- << "::CORBA::Object::_nil ());" << endl
- << "}"
- << "return this->disconnect_" << u.name () << " (" << endl
- << "ck" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
- }
- };
-
- struct UsesEmitter : Traversal::SingleUserData,
- Traversal::MultiUserData,
- EmitterBase
- {
- UsesEmitter (Context& c, SemanticGraph::Component& scope)
- : EmitterBase (c),
- type_name_emitter_ (c),
- scope_ (scope)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::SingleUser& u)
- {
- os << "void" << endl
- << scope_.name () << "_Servant::connect_"
- << u.name () << " (" << endl;
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "this->context_->connect_" << u.name () << " ("
- << endl
- << "c" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "this->add_receptacle (\"" << u.name ().unescaped_str ()
- << "\", c, 0);" << endl
- << "}";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_ptr" << endl
- << scope_.name () << "_Servant::disconnect_"
- << u.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "))" << endl
- << "{"
- << "return this->context_->disconnect_" << u.name ()
- << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_ptr" << endl
- << scope_.name ()
- << "_Servant::get_connection_" << u.name ()
- << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "return this->context_->get_connection_"
- << u.name () << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
-
- virtual void
- traverse (SemanticGraph::MultiUser& u)
- {
- os << STRS[COMP_CK] << " *" << endl
- << scope_.name () << "_Servant::connect_"
- << u.name () << " (" << endl;
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "::Components::Cookie * cookie = "
- "this->context_->connect_" << u.name () << " ("
- << endl
- << "c" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "this->add_receptacle (\"" << u.name ().unescaped_str ()
- << "\", c, cookie);" << endl
- << "return cookie;" << endl
- << "}";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_ptr" << endl
- << scope_.name () << "_Servant::disconnect_"
- << u.name () << " (" << endl
- << STRS[COMP_CK] << " * ck" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{"
- << "return this->context_->disconnect_" << u.name ()
- << " (" << endl
- << "ck" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
-
- os << u.scoped_name () << "Connections *" << endl
- << scope_.name ()
- << "_Servant::get_connections_" << u.name ()
- << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "return this->context_->get_connections_"
- << u.name () << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- SemanticGraph::Component& scope_;
- };
-
- struct PublishesSubscribeEmitter : Traversal::PublisherData,
- EmitterBase
- {
- PublishesSubscribeEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (Type& p)
- {
- os << "if (ACE_OS::strcmp (publisher_name, \""
- << p.name ().unescaped_str () << "\") == 0)" << endl
- << "{";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var sub =" << endl
- << " ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer::_narrow (" << endl
- << "subscribe" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
-
- os << "if ( ::CORBA::is_nil (sub.in ()))" << endl
- << "{"
- << "::CORBA::Boolean substitutable =" << endl
- << " subscribe->ciao_is_substitutable (" << endl
- << " ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "::_tao_obv_static_repository_id ()" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
-
- os << "if (substitutable)" << endl
- << "{"
- << "return this->subscribe_" << p.name () << "_generic (" << endl
- << "subscribe" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}"
- << "else" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);" << endl
- << "}"
- << "}"
- << "else" << endl
- << "{"
- << "return this->subscribe_" << p.name () << " (" << endl
- << "sub.in ()" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}"
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- };
-
- struct PublishesUnsubscribeEmitter : Traversal::PublisherData,
- EmitterBase
- {
- PublishesUnsubscribeEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- virtual void
- traverse (Type& p)
- {
- os << "if (ACE_OS::strcmp (publisher_name, \""
- << p.name ().unescaped_str () << "\") == 0)" << endl
- << "{"
- << "return this->unsubscribe_" << p.name ()
- << " (" << endl
- << "ck" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
- }
- };
-
- struct EmitsEmitter : Traversal::EmitterData,
- EmitterBase
- {
- EmitsEmitter (Context& c, SemanticGraph::Component& scope)
- : EmitterBase (c),
- type_name_emitter_ (c),
- scope_ (scope)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- traverse (Type& e)
- {
- os << "void" << endl
- << scope_.name () << "_Servant::connect_"
- << e.name () << " (" << endl;
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer_ptr c" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_AC] << "))" << endl
- << "{"
- << "this->context_->connect_" << e.name ()
- << " (" << endl
- << "c" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer_ptr" << endl
- << scope_.name () << "_Servant::disconnect_"
- << e.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "))" << endl
- << "{"
- << "return this->context_->disconnect_"
- << e.name () << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- SemanticGraph::Component& scope_;
- };
-
- struct ServantTypeNameEmitter : Traversal::Type,
- EmitterBase
- {
- ServantTypeNameEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Type& t)
- {
- os << t.name () << "_Servant";
- }
- };
-
- struct FacetProvidesEmitter : Traversal::ProviderData,
- EmitterBase
- {
- FacetProvidesEmitter (Context& c,
- SemanticGraph::Component& scope)
- : EmitterBase (c),
- type_name_emitter_ (c),
- simple_type_name_emitter_ (c),
- servant_type_name_emitter_ (c),
- enclosing_type_name_emitter_ (c),
- facet_enclosing_type_name_emitter_ (c),
- repo_id_emitter_ (c),
- scope_ (scope)
- {
- belongs_.node_traverser (type_name_emitter_);
- simple_belongs_.node_traverser (simple_type_name_emitter_);
- servant_belongs_.node_traverser (servant_type_name_emitter_);
- enclosing_belongs_.node_traverser (enclosing_type_name_emitter_);
- facet_enclosing_belongs_.node_traverser (
- facet_enclosing_type_name_emitter_
- );
- repo_id_belongs_.node_traverser (repo_id_emitter_);
- }
-
- virtual void
- traverse (Type& p)
- {
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "_ptr" << endl
- << scope_.name ()
- << "_Servant::provide_" << p.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{";
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
-
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_nil ());" << endl;
- }
-
- os << "if (! ::CORBA::is_nil (this->provide_"
- << p.name () << "_.in ()))" << endl
- << "{"
- << "return ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_duplicate (this->provide_" << p.name () << "_.in ());"
- << "}";
-
- os << "::CORBA::Object_var obj =" << endl
- << " this->provide_" << p.name () << "_i ("
- << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_nil ());" << endl;
-
- ScopedName scoped (scope_.scoped_name ());
- Name stripped (scoped.begin () + 1, scoped.end ());
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "_var fo =" << endl
- << " ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_narrow ("
- << "obj.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_nil ());" << endl
- << "this->provide_" << p.name () << "_ = fo;"
- << "return ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_duplicate (this->provide_"
- << p.name () << "_.in ());" << endl
- << "}";
-
- // Corresponding private provide_*_i() method.
-
- os << "::CORBA::Object_ptr" << endl
- << scope_.name ()
- << "_Servant::provide_" << p.name () << "_i (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "::CORBA::Object_ptr ret =" << endl
- << " this->lookup_facet (\""
- << p.name ().unescaped_str () << "\");" << endl;
-
- os << "if (! ::CORBA::is_nil (ret))" << endl
- << "{"
- << "return ret;"
- << "}";
-
- os << "::CIAO::Port_Activator_T<" << endl
- << " ::" << STRS[FACET_PREFIX];
-
- Traversal::ProviderData::belongs (p, facet_enclosing_belongs_);
-
- os << "::";
-
- Traversal::ProviderData::belongs (p, servant_belongs_);
-
- os << "," << endl
- << " ";
-
- Traversal::ProviderData::belongs (p, enclosing_belongs_);
-
- os << "::CCM_";
-
- Traversal::ProviderData::belongs (p, simple_belongs_);
-
- os << "," << endl
- << " ::Components::CCMContext," << endl
- << " " << scope_.name () << "_Servant" << endl
- << " > *tmp = 0;" << endl
- << "typedef ::CIAO::Port_Activator_T<" << endl
- << " ::" << STRS[FACET_PREFIX];
-
- Traversal::ProviderData::belongs (p, facet_enclosing_belongs_);
-
- os << "::";
-
- Traversal::ProviderData::belongs (p, servant_belongs_);
-
- os << "," << endl
- << " ";
-
- Traversal::ProviderData::belongs (p, enclosing_belongs_);
-
- os << "::CCM_";
-
- Traversal::ProviderData::belongs (p, simple_belongs_);
-
- os << "," << endl
- << " ::Components::CCMContext," << endl
- << " " << scope_.name () << "_Servant" << endl
- << " >" << endl
- << "MACRO_MADNESS_TYPEDEF;" << endl;
-
- os << "ACE_CString obj_id (this->ins_name_);"
- << "obj_id += \"_" << p.name ().unescaped_str () << "\";" << endl;
-
- os << "ACE_NEW_THROW_EX ("
- << "tmp," << endl
- << "MACRO_MADNESS_TYPEDEF (" << endl
- << "obj_id.c_str ()," << endl
- << "\"" << p.name ().unescaped_str () << "\"," << endl
- << "::CIAO::Port_Activator::Facet," << endl
- << "0," << endl
- << "this->context_," << endl
- << "this)," << endl
- << "::CORBA::NO_MEMORY ());" << endl;
-
- os << "::CIAO::Servant_Activator *sa = " << endl
- << "this->container_->ports_servant_activator ();" << endl
- << "if (!sa->register_port_activator (tmp))" << endl
- << "{"
- << "return ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_nil ();"
- << "}";
-
- os << "::CORBA::Object_var obj =" << endl
- << " this->container_->generate_reference (" << endl
- << " obj_id.c_str ()," << endl
- << " ";
-
- Traversal::ProviderData::belongs (p, repo_id_belongs_);
-
- os << "," << endl
- << " ::CIAO::Container::Facet_Consumer" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_nil ());" << endl
- << "this->add_facet (\""
- << p.name ().unescaped_str () << "\"," << endl
- << "obj.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ProviderData::belongs (p, belongs_);
-
- os << "::_nil ());" << endl;
-
- os << "return obj._retn ();" << endl
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- SimpleTypeNameEmitter simple_type_name_emitter_;
- ServantTypeNameEmitter servant_type_name_emitter_;
- EnclosingTypeNameEmitter enclosing_type_name_emitter_;
- FacetEnclosingTypeNameEmitter facet_enclosing_type_name_emitter_;
- RepoIdEmitter repo_id_emitter_;
- Traversal::Belongs belongs_;
- Traversal::Belongs simple_belongs_;
- Traversal::Belongs servant_belongs_;
- Traversal::Belongs enclosing_belongs_;
- Traversal::Belongs facet_enclosing_belongs_;
- Traversal::Belongs repo_id_belongs_;
- SemanticGraph::Component& scope_;
- };
-
- struct ConsumesEmitter : Traversal::ConsumerData,
- EmitterBase
- {
- ConsumesEmitter (Context& c, SemanticGraph::Component& scope)
- : EmitterBase (c),
- type_name_emitter_ (c),
- simple_type_name_emitter_ (c),
- repo_id_emitter_ (c),
- scope_ (scope)
- {
- belongs_.node_traverser (type_name_emitter_);
- simple_belongs_.node_traverser (simple_type_name_emitter_);
- repo_id_belongs_.node_traverser (repo_id_emitter_);
- }
-
- virtual void
- traverse (Type& c)
- {
- os << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant (" << endl
- << c.scoped_name ().scope_name ().scope_name () << "::CCM_"
- << c.scoped_name ().scope_name ().simple_name ()
- << "_ptr executor,"
- << endl
- << c.scoped_name ().scope_name ().scope_name () << "::CCM_"
- << c.scoped_name ().scope_name ().simple_name ()
- << "_Context_ptr c)" << endl
- << " : executor_ ( " << c.scoped_name ().scope_name ().scope_name ()
- << "::CCM_" << c.scoped_name ().scope_name ().simple_name ()
- << "::_duplicate (executor))," << endl
- << " ctx_ ( " << c.scoped_name ().scope_name ().scope_name ()
- << "::CCM_" << c.scoped_name ().scope_name ().simple_name ()
- << "_Context::_duplicate (c))" << endl
- << "{"
- << "}";
-
- os << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant::~";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant (void)" << endl
- << "{"
- << "}";
-
- os << "::CORBA::Object_ptr" << endl
- << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant::_get_component (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "return this->ctx_->get_CCM_object "
- << "(" << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
-
- os << "void" << endl
- << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant::push_";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << " (" << endl;
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << " *evt" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "this->executor_->push_" << c.name ()
- << " (" << endl
- << "evt" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
-
- os << "// Inherited from " << STRS[COMP_ECB] << "." << endl
- << "void" << endl
- << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant::push_event (" << endl
- << "::Components::EventBase *ev" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_BET] << "))" << endl
- << "{";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << " *ev_type =" << endl
- << " ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "::_downcast (ev);" << endl
- << "if (ev_type != 0)" << endl
- << "{"
- << "this->push_";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << " (" << endl
- << "ev_type" << endl
- << STRS[ENV_ARG] << ");" << endl
- << "return;" << endl
- << "}"
- << "ACE_THROW ( " << STRS[EXCP_BET] << " ());" << endl
- << "}";
-
- os << "CORBA::Boolean" << endl
- << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant::ciao_is_substitutable (" << endl
- << "const char * event_repo_id" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "if (event_repo_id == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), false);" << endl
- << "}"
- << scope_.name () << "_Context *ctx =" << endl
- << " " << scope_.name () << "_Context::_narrow (" << endl
- << " this->ctx_.in ()" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (false);" << endl;
-
- os << "CORBA::ORB_ptr orb = ctx->_ciao_the_Container ()->the_ORB ();"
- << endl;
-
- os << "CORBA::ValueFactory f =" << endl
- << " orb->lookup_value_factory (" << endl
- << " event_repo_id" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (false);" << endl;
-
- os << "if (f == 0)" << endl
- << "{"
- << "return false;" << endl
- << "}"
- << "CORBA::ValueBase_var v =" << endl
- << " f->create_for_unmarshal (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (false);" << endl;
-
- os << "f->_remove_ref ();" << endl;
-
- os << "if (v.in () == 0)" << endl
- << "{"
- << "return false;" << endl
- << "}";
-
- os << "return dynamic_cast< ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << " *> (v.in ()) != 0;" << endl
- << "}" << endl;
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer_ptr" << endl
- << scope_.name () << "_Servant::"
- << "get_consumer_" << c.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "if (! ::CORBA::is_nil (this->consumes_" << c.name ()
- << "_.in ()))" << endl
- << "{"
- << "return ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_duplicate (this->consumes_"
- << c.name () << "_.in ());"
- << "}";
-
- os << "::Components::EventConsumerBase_var obj =" << endl
- << " this->get_consumer_" << c.name () << "_i (" << endl
- << " " << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_nil ());" << endl;
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer_var eco =" << endl
- << " ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_narrow (" << endl
- << " obj.in ()" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_nil ());" << endl
- << "this->consumes_" << c.name () << "_ = eco;"
- << "return ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_duplicate (this->consumes_" << c.name ()
- << "_.in ());" << endl
- << "}";
-
- // Corresponding private get_consumer_*_i() method.
-
- os << "::Components::EventConsumerBase_ptr" << endl
- << scope_.name () << "_Servant::"
- << "get_consumer_" << c.name () << "_i (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "::Components::EventConsumerBase_ptr ret =" << endl
- << " this->lookup_consumer (\""
- << c.name ().unescaped_str () << "\");" << endl;
-
- os << "if (! ::CORBA::is_nil (ret))" << endl
- << "{"
- << "return ret;"
- << "}";
-
- os << "::CIAO::Port_Activator_T<" << endl;
-
- os << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant," << endl
- << c.scoped_name ().scope_name ().scope_name ()
- << "::CCM_"
- << c.scoped_name ().scope_name ().simple_name ()
- << "," << endl
- << c.scoped_name ().scope_name ().scope_name () << "::CCM_"
- << c.scoped_name ().scope_name ().simple_name ()
- << "_Context," << endl
- << scope_.name () << "_Servant"
- << " > *tmp = 0;" << endl
- << "typedef CIAO::Port_Activator_T<" << endl;
-
- os << " " << scope_.name () << "_Servant::";
-
- Traversal::ConsumerData::belongs (c, simple_belongs_);
-
- os << "Consumer_" << c.name ()
- << "_Servant," << endl
- << " " << c.scoped_name ().scope_name ().scope_name ()
- << "::CCM_"
- << c.scoped_name ().scope_name ().simple_name ()
- << "," << endl
- << " " << c.scoped_name ().scope_name ().scope_name () << "::CCM_"
- << c.scoped_name ().scope_name ().simple_name ()
- << "_Context, " << endl
- << " " << scope_.name () << "_Servant" << endl
- << " >" << endl
- << "MACRO_MADNESS_TYPEDEF;" << endl;
-
- os << "ACE_CString obj_id (this->ins_name_);"
- << "obj_id += \"_" << c.name ().unescaped_str () << "\";" << endl;
-
- os << "ACE_NEW_THROW_EX (" << endl
- << "tmp," << endl
- << "MACRO_MADNESS_TYPEDEF ("
- << "obj_id.c_str ()," << endl
- << "\"" << c.name ().unescaped_str () << "\"," << endl
- << "::CIAO::Port_Activator::Sink," << endl
- << "this->executor_.in ()," << endl
- << "this->context_," << endl
- << "this)," << endl
- << "::CORBA::NO_MEMORY ());" << endl;
-
- os << "::CIAO::Servant_Activator *sa =" << endl
- << " this->container_->ports_servant_activator ();" << endl
- << "if (!sa->register_port_activator (tmp))" << endl
- << "{"
- << "return ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_nil ();"
- << "}";
-
- os << "::CORBA::Object_var obj =" << endl
- << " this->container_->generate_reference (" << endl
- << " obj_id.c_str ()," << endl
- << " ";
-
- Traversal::ConsumerData::belongs (c, repo_id_belongs_);
-
- os << "," << endl
- << " ::CIAO::Container::Facet_Consumer" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_nil ());" << endl;
-
- os << "::Components::EventConsumerBase_var ecb =" << endl
- << " ::Components::EventConsumerBase::_narrow (" << endl
- << " obj.in ()" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_nil ());" << endl;
-
- os << "this->add_consumer (\""
- << c.name ().unescaped_str () << "\"," << endl
- << "ecb.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " ( ";
-
- Traversal::ConsumerData::belongs (c, belongs_);
-
- os << "Consumer::_nil ());" << endl;
-
- os << "return ecb._retn ();" << endl
- << "}";
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- SimpleTypeNameEmitter simple_type_name_emitter_;
- ConsumerRepoIdEmitter repo_id_emitter_;
- Traversal::Belongs belongs_;
- Traversal::Belongs simple_belongs_;
- Traversal::Belongs repo_id_belongs_;
- SemanticGraph::Component& scope_;
- };
-
- struct OperationExistsEmitter;
-
- struct RegisterValueFactoryEmitter : Traversal::ConsumerData,
- Traversal::PublisherData,
- Traversal::EmitterData,
- EmitterBase
- {
- RegisterValueFactoryEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c),
- gen_factory_ (true)
- {
- belongs_.node_traverser (type_name_emitter_);
- }
-
- void factory_gen_off (void)
- {
- gen_factory_ = false;
- }
-
- bool gen_factory (void) const
- {
- return gen_factory_;
- }
-
- virtual void
- traverse (SemanticGraph::Publisher& p)
- {
- Traversal::PublisherData publisher;
- RegisterValueFactoryEmitter::traverse_common<
- SemanticGraph::Publisher,
- Traversal::PublisherData> (p, publisher, this, os, belongs_);
- }
-
- virtual void
- traverse (SemanticGraph::Emitter& e)
- {
- Traversal::EmitterData emitter;
- RegisterValueFactoryEmitter::traverse_common<
- SemanticGraph::Emitter,
- Traversal::EmitterData> (e, emitter, this, os, belongs_);
- }
-
- virtual void
- traverse (SemanticGraph::Consumer& c)
- {
- Traversal::ConsumerData consumer;
- RegisterValueFactoryEmitter::traverse_common<
- SemanticGraph::Consumer,
- Traversal::ConsumerData> (c, consumer, this, os, belongs_);
- }
-
- template<typename SemanticType, typename TraversalType>
- static void
- traverse_common (SemanticType& st,
- TraversalType& tt,
- RegisterValueFactoryEmitter* r,
- ostream& os,
- Traversal::Belongs& blongs)
- {
- {
- Traversal::Belongs tt_belongs;
- tt.edge_traverser (tt_belongs);
-
- // Separate traversers because we want to catch inherited
- // operations, but not base class factories or private
- // members.
- Traversal::ValueType event_type_operations;
- Traversal::ValueType event_type_factories;
- tt_belongs.node_traverser (event_type_operations);
- tt_belongs.node_traverser (event_type_factories);
-
- Traversal::Inherits inherits;
- inherits.node_traverser (event_type_operations);
- event_type_operations.edge_traverser (inherits);
-
- Traversal::Defines include_inherit_defines;
- event_type_operations.edge_traverser (include_inherit_defines);
- OperationExistsEmitter op_emitter (r);
- include_inherit_defines.node_traverser (op_emitter);
-
- Traversal::Supports supports;
- event_type_operations.edge_traverser (supports);
- Traversal::Interface iface;
- supports.node_traverser (iface);
- inherits.node_traverser (iface);
- iface.edge_traverser (inherits);
- iface.edge_traverser (include_inherit_defines);
-
- Traversal::Defines no_include_inherit_defines;
- event_type_factories.edge_traverser (no_include_inherit_defines);
- PrivateExistsEmitter priv_emitter (r);
- FactoryExistsEmitter factory_emitter (r);
- no_include_inherit_defines.node_traverser (priv_emitter);
- no_include_inherit_defines.node_traverser (factory_emitter);
-
- tt.traverse (st);
- }
-
- if (r->gen_factory ())
- {
- os << "CIAO_REGISTER_OBV_FACTORY (" << endl;
-
- r->TraversalType::belongs (st, blongs);
-
- os << "_init," << endl;
-
- r->TraversalType::belongs (st, blongs);
-
- os << ");" << endl;
- }
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Belongs belongs_;
- bool gen_factory_;
- };
-
- struct OperationExistsEmitter : Traversal::Operation,
- Traversal::ValueTypeFactory
- {
- OperationExistsEmitter (RegisterValueFactoryEmitter* r)
- : r_ (r)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Operation&)
- {
- r_->factory_gen_off ();
- }
-
- virtual void
- traverse (SemanticGraph::ValueTypeFactory&)
- {
- // This gets called for base eventtypes as well, so
- // we don't want to catch this here, but there's no
- // way to avoid it, so we make it a no-op. This
- // catches both valuetype and eventtype factories.
- }
-
- private:
- RegisterValueFactoryEmitter* r_;
- };
-
- // Since we're not interested in ancestors' factories, we can
- // specialize all the way to EventTypeFactory.
- struct FactoryExistsEmitter : Traversal::EventTypeFactory
- {
- FactoryExistsEmitter (RegisterValueFactoryEmitter* r)
- : r_ (r)
- {
- }
-
- virtual void
- traverse (SemanticGraph::EventTypeFactory&)
- {
- r_->factory_gen_off ();
- }
-
- private:
- RegisterValueFactoryEmitter* r_;
- };
-
- struct PrivateExistsEmitter : Traversal::ValueTypePrivateMember
- {
- PrivateExistsEmitter (RegisterValueFactoryEmitter* r)
- : r_ (r)
- {
- }
-
- virtual void
- traverse (Type&)
- {
- r_->factory_gen_off ();
- }
-
- private:
- RegisterValueFactoryEmitter* r_;
- };
-
- struct PortTablePopulator : Traversal::ProviderData,
- Traversal::UserData,
- Traversal::PublisherData,
- Traversal::EmitterData,
- Traversal::ConsumerData,
- EmitterBase
- {
- PortTablePopulator (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Provider& p)
- {
- os << "obj_var =" << endl
- << " this->provide_" << p.name () << "_i (" << endl
- << " " << STRS[ENV_SNGL_ARG] << ");"
- << "ACE_CHECK;" << endl;
- }
-
- virtual void
- traverse (SemanticGraph::User&)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Publisher&)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Emitter&)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Consumer& p)
- {
- os << "ecb_var =" << endl
- << " this->get_consumer_" << p.name () << "_i (" << endl
- << " " << STRS[ENV_SNGL_ARG] << ");"
- << "ACE_CHECK;" << endl;
- }
- };
-
- struct SetAttributesEmitter : Traversal::ReadWriteAttribute,
- EmitterBase
- {
- SetAttributesEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- pre (SemanticGraph::ReadWriteAttribute& a)
- {
- Traversal::Belongs delegate_belongs;
-
- SetAttributeDelegationEmitter delegater (ctx, a);
- delegate_belongs.node_traverser (delegater);
-
- Traversal::ReadWriteAttribute::belongs (a, delegate_belongs);
- }
- };
-
- struct UsesSizeCalculator : Traversal::SingleUserData,
- Traversal::MultiUserData,
- EmitterBase
- {
- UsesSizeCalculator (Context& c, unsigned long& size)
- : EmitterBase (c),
- size_ (size)
- {
- }
-
- virtual void
- traverse (SemanticGraph::SingleUser&)
- {
- ++size_;
- }
-
- virtual void
- traverse (SemanticGraph::MultiUser&)
- {
- ++size_;
- }
-
- private:
- unsigned long& size_;
- };
-
- struct UsesGetAllEmitter : Traversal::SingleUserData,
- Traversal::MultiUserData,
- EmitterBase
- {
- UsesGetAllEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c),
- repo_id_emitter_ (c),
- slot_ (0UL)
- {
- belongs_.node_traverser (type_name_emitter_);
- repo_id_belongs_.node_traverser (repo_id_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::SingleUser& u)
- {
- os << "::CIAO::Servant_Impl_Base::describe_simplex_receptacle<"
- << endl
- << " ";
-
- Traversal::SingleUserData::belongs (u, belongs_);
-
- os << "_var" << endl
- << " > (\"" << u.name ().unescaped_str () << "\"," << endl;
-
- Traversal::SingleUserData::belongs (u, repo_id_belongs_);
-
- os << "," << endl
- << "this->context_->ciao_uses_" << u.name () << "_," << endl
- << "safe_retval," << endl
- << slot_ << "UL);" << endl;
-
- ++slot_;
- }
-
- virtual void
- traverse (SemanticGraph::MultiUser& u)
- {
- os << "::CIAO::Servant_Impl_Base::describe_multiplex_receptacle<"
- << endl
- << " ";
-
- Traversal::MultiUserData::belongs (u, belongs_);
-
- os << "_var" << endl
- << " > (\"" << u.name ().unescaped_str () << "\"," << endl;
-
- Traversal::MultiUserData::belongs (u, repo_id_belongs_);
-
- os << "," << endl
- << "this->context_->ciao_uses_" << u.name () << "_," << endl
- << "safe_retval," << endl
- << slot_ << "UL);" << endl;
-
- ++slot_;
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- RepoIdEmitter repo_id_emitter_;
- Traversal::Belongs belongs_;
- Traversal::Belongs repo_id_belongs_;
- unsigned long slot_;
- };
-
- struct PublishesSizeCalculator : Traversal::PublisherData,
- EmitterBase
- {
- PublishesSizeCalculator (Context& c, unsigned long& size)
- : EmitterBase (c),
- size_ (size)
- {
- }
-
- virtual void
- traverse (SemanticGraph::Publisher&)
- {
- ++size_;
- }
-
- private:
- unsigned long& size_;
- };
-
- struct PublishesGetAllEmitter : Traversal::PublisherData,
- EmitterBase
- {
- PublishesGetAllEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c),
- repo_id_emitter_ (c),
- slot_ (0UL)
- {
- belongs_.node_traverser (type_name_emitter_);
- repo_id_belongs_.node_traverser (repo_id_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::Publisher& p)
- {
- os << "::CIAO::Servant_Impl_Base::describe_pub_event_source<"
- << endl
- << " ";
-
- Traversal::PublisherData::belongs (p, belongs_);
-
- os << "Consumer_var" << endl
- << " > (\"" << p.name ().unescaped_str () << "\"," << endl;
-
- Traversal::PublisherData::belongs (p, repo_id_belongs_);
-
- os << "," << endl
- << "this->context_->ciao_publishes_" << p.name ()
- << "_map_," << endl
- << "safe_retval," << endl
- << slot_ << "UL);" << endl;
-
- ++slot_;
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- RepoIdEmitter repo_id_emitter_;
- Traversal::Belongs belongs_;
- Traversal::Belongs repo_id_belongs_;
- unsigned long slot_;
- };
-
- struct EmitsSizeCalculator : Traversal::EmitterData,
- EmitterBase
- {
- EmitsSizeCalculator (Context& c, unsigned long& size)
- : EmitterBase (c),
- size_ (size)
-
- {
- }
-
- virtual void
- traverse (SemanticGraph::Emitter&)
- {
- ++size_;
- }
-
- private:
- unsigned long& size_;
- };
-
- struct EmitsGetAllEmitter : Traversal::EmitterData,
- EmitterBase
- {
- EmitsGetAllEmitter (Context& c)
- : EmitterBase (c),
- type_name_emitter_ (c),
- repo_id_emitter_ (c),
- slot_ (0UL)
- {
- belongs_.node_traverser (type_name_emitter_);
- repo_id_belongs_.node_traverser (repo_id_emitter_);
- }
-
- virtual void
- traverse (SemanticGraph::Emitter& e)
- {
- os << "::CIAO::Servant_Impl_Base::describe_emit_event_source<"
- << endl
- << " ";
-
- Traversal::EmitterData::belongs (e, belongs_);
-
- os << "Consumer_var" << endl
- << " > (\"" << e.name ().unescaped_str () << "\"," << endl;
-
- Traversal::EmitterData::belongs (e, repo_id_belongs_);
-
- os << "," << endl
- << "this->context_->ciao_emits_" << e.name ()
- << "_consumer_," << endl
- << "safe_retval," << endl
- << slot_ << "UL);" << endl;
-
- ++slot_;
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- RepoIdEmitter repo_id_emitter_;
- Traversal::Belongs belongs_;
- Traversal::Belongs repo_id_belongs_;
- unsigned long slot_;
- };
-
- public:
- virtual void
- pre (Type& t)
- {
- ScopedName scoped (t.scoped_name ());
- Name stripped (scoped.begin () + 1, scoped.end ());
-
- // Servant Constructor
- os << t.name () << "_Servant::"
- << t.name () << "_Servant (" << endl
- << t.scoped_name ().scope_name () << "::CCM_" << t.name ()
- << "_ptr exe," << endl
- << "::Components::CCMHome_ptr h," << endl
- << "const char *ins_name," << endl
- << "::CIAO::Home_Servant_Impl_Base *hs," << endl
- << "::CIAO::Session_Container *c)" << endl
- << " : ::CIAO::Servant_Impl_Base "
- << "(h, hs, c)," << endl
- << " ::CIAO::Servant_Impl<" << endl
- << " ::POA_" << stripped << "," << endl
- << " " << t.scoped_name ().scope_name () << "::CCM_"
- << t.name () << "," << endl
- << " " << t.name () << "_Context" << endl
- << " > (exe, h, hs, c)," << endl
- << " ins_name_ (ins_name)" << endl
- << "{"
- << "ACE_NEW ("
- << "this->context_," << endl
- << t.name () << "_Context (h, c, this));" << endl;
-
- os << "// Set the instance id of the component on the context" << endl
- << endl
- << "this->context_->_ciao_instance_id (this->ins_name_);" << endl;
-
-
- // Generate the macro to register a value factory for each
- // eventtype consumed.
- if (!ctx.cl ().get_value ("suppress-register-factory", false))
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- RegisterValueFactoryEmitter factory_emitter (ctx);
- defines.node_traverser (factory_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "ACE_TRY_NEW_ENV" << endl
- << "{"
- << "::Components::SessionComponent_var scom =" << endl
- << " ::Components::SessionComponent::_narrow (" << endl
- << " exe" << endl
- << " " << STRS[ENV_ARG] << ");"
- << "ACE_TRY_CHECK;" << endl
- << "if (! ::CORBA::is_nil (scom.in ()))" << endl
- << "{"
- << "scom->set_session_context (" << endl
- << "this->context_" << endl
- << STRS[ENV_ARG] << ");"
- << "ACE_TRY_CHECK;"
- << "}"
- << "this->populate_port_tables (" << endl
- << STRS[ENV_SNGL_ARG] << ");"
- << "ACE_TRY_CHECK;"
- << "}"
- << "ACE_CATCHANY" << endl
- << "{"
- << "}"
- << "ACE_ENDTRY;" << endl
- << "}";
-
- // Servant Destructor
- os << t.name () << "_Servant::~"
- << t.name () << "_Servant (void)" << endl
- << "{"
- << "}";
-
- // Override pure virtual set_attributes() operation.
- os << "void" << endl
- << t.name () << "_Servant::set_attributes (" << endl
- << "const ::Components::ConfigValues &descr" << endl
- << STRS[ENV_SRC] << ")" << endl
- << "{"
- << "ACE_ENV_EMIT_CODE (ACE_UNUSED_ARG (ACE_TRY_ENV));" << endl;
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << "ACE_CHECK;" << endl;
- }
-
- os << "for ( ::CORBA::ULong i = 0; i < descr.length (); ++i)" << endl
- << "{"
- << "const char *descr_name = descr[i]->name ();"
- << "::CORBA::Any &descr_value = descr[i]->value ();" << endl;
-
- // Generate string compare and set for each attribute.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- SetAttributesEmitter set_attributes_emitter (ctx);
- defines.node_traverser (set_attributes_emitter);
-
- component_emitter.traverse (t);
- }
-
-
- os << STRS[ACE_UA] << " (descr_name);"
- << STRS[ACE_UA] << " (descr_value);" << endl;
-
- os << "}"
- << "}";
-
- // Generate provides_<facet> operation.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- FacetProvidesEmitter provides_emitter (ctx, t);
- defines.node_traverser (provides_emitter);
-
- component_emitter.traverse (t);
- }
-
- // Generate subscribe_* and unsubscribe_* operations.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- PublishesEmitter publishes_emitter (ctx, t);
- defines.node_traverser (publishes_emitter);
-
- component_emitter.traverse (t);
- }
-
- // Generate operations for nested Consumer classes.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- ConsumesEmitter consumes_emitter (ctx, t);
- defines.node_traverser (consumes_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[COMP_CK] << " *" << endl
- << t.name () << "_Servant::connect (" << endl
- << "const char *name," << endl
- << "::CORBA::Object_ptr connection" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_IC] << "," << endl
- << STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_ECL] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
- }
-
- os << "// If the component has no receptacles, this will be unused."
- << endl
- << STRS[ACE_UA] << " (connection);" << endl
- << "if (name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl
- << "}";
-
- // Generate IF block in connect operation for each receptacle.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- UsesConnectEmitter uses_emitter (ctx);
- defines.node_traverser (uses_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl
- << "}";
-
- os << "::CORBA::Object_ptr" << endl
- << t.name () << "_Servant::disconnect (" << endl
- << "const char *name," << endl
- << STRS[COMP_CK] << " * ck" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_IC] << "," << endl
- << STRS[EXCP_CR] << "," << endl
- << STRS[EXCP_NC] << "))" << endl
- << "{"
- << STRS[ACE_UA] << " (ck);" << endl;
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl;
- }
-
- os << "if (name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_BP] << "," << endl
- << "::CORBA::Object::_nil ());" << endl
- << "}";
-
- // Generate IF block in disconnect operation for each receptacle.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- UsesDisconnectEmitter uses_emitter (ctx);
- defines.node_traverser (uses_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IN] << " ()," << endl
- << "::CORBA::Object::_nil ());"
- << "}";
-
- os << STRS[COMP_RD] << " *" << endl
- << t.name () << "_Servant::get_all_receptacles (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << STRS[COMP_RD] << " *retval = 0;"
- << "ACE_NEW_RETURN (retval," << endl
- << STRS[COMP_RD] << "," << endl
- << "0);"
- << STRS[COMP_RD] << "_var safe_retval = retval;";
-
- unsigned long size = 0;
-
- // Calculate the number of uses ports.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- UsesSizeCalculator size_calculator (ctx, size);
- defines.node_traverser (size_calculator);
-
- component_emitter.traverse (t);
- }
-
- os << "safe_retval->length (" << size << "UL);" << endl;
-
- // Generate a sequence element assignment for each uses port.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- UsesGetAllEmitter get_all_emitter (ctx);
- defines.node_traverser (get_all_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "return safe_retval._retn ();"
- << "}";
-
- // Generate generic operations for receptacles.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- UsesEmitter uses_emitter (ctx, t);
- defines.node_traverser (uses_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "void" << endl
- << t.name () << "_Servant::connect_consumer ("
- << endl
- << "const char * emitter_name," << endl
- << STRS[COMP_ECB] << "_ptr consumer" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CK] << ";" << endl;
- }
-
- os << "if (emitter_name == 0)" << endl
- << "{"
- << STRS[ACE_TH] << " ( " << STRS[EXCP_BP] << ");" << endl
- << "}";
-
- // Generate an IF block for each 'emits' declaration.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- EmitsConnectEmitter emits_connect_emitter (ctx);
- defines.node_traverser (emits_connect_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_UA] << " (consumer);"
- << STRS[ACE_TH] << " ( "
- << STRS[EXCP_IN] << " ());" << endl
- << "}";
-
- os << STRS[COMP_ECB] << "_ptr" << endl
- << t.name () << "_Servant::disconnect_consumer (" << endl
- << "const char *source_name" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_NC] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( "
- << STRS[COMP_ECB] << "::_nil ());" << endl;
- }
-
- os << "if (source_name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_BP] << "," << endl
- << STRS[COMP_ECB] << "::_nil ());" << endl
- << "}";
-
- // Generate an IF block for each 'emits' declaration.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- EmitsDisconnectEmitter emits_disconnect_emitter (ctx);
- defines.node_traverser (emits_disconnect_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IN] << " ()," << endl
- << STRS[COMP_ECB] << "::_nil ());" << endl
- << "}";
-
- os << STRS[COMP_PD] << " *" << endl
- << t.name () << "_Servant::get_all_publishers (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << STRS[COMP_PD] << " *retval = 0;"
- << "ACE_NEW_RETURN (retval," << endl
- << STRS[COMP_PD] << "," << endl
- << "0);"
- << STRS[COMP_PD] << "_var safe_retval = retval;";
-
- size = 0UL;
-
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- PublishesSizeCalculator publishes_size_calculator (ctx, size);
- defines.node_traverser (publishes_size_calculator);
-
- component_emitter.traverse (t);
- }
-
- os << "safe_retval->length (" << size << "UL);" << endl;
-
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- PublishesGetAllEmitter publishes_get_all_emitter (ctx);
- defines.node_traverser (publishes_get_all_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "return safe_retval._retn ();"
- << "}";
-
- os << STRS[COMP_ED] << " *" << endl
- << t.name () << "_Servant::get_all_emitters (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << STRS[COMP_ED] << " *retval = 0;"
- << "ACE_NEW_RETURN (retval," << endl
- << STRS[COMP_ED] << "," << endl
- << "0);"
- << STRS[COMP_ED] << "_var safe_retval = retval;";
-
- size = 0UL;
-
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- EmitsSizeCalculator emits_size_calculator (ctx, size);
- defines.node_traverser (emits_size_calculator);
-
- component_emitter.traverse (t);
- }
-
- os << "safe_retval->length (" << size << "UL);" << endl;
-
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- EmitsGetAllEmitter emits_get_all_emitter (ctx);
- defines.node_traverser (emits_get_all_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "return safe_retval._retn ();"
- << "}";
-
- os << STRS[COMP_CK] << " *" << endl
- << t.name () << "_Servant::subscribe (" << endl
- << "const char *publisher_name," << endl
- << STRS[COMP_ECB] << "_ptr subscribe" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_IC] << "," << endl
- << STRS[EXCP_ECL] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl;
- }
-
- os << "// Just in case there are no if blocks" << endl
- << STRS[ACE_UA] << " (subscribe);" << endl
- << "if (publisher_name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);"
- << endl
- << "}";
-
- // Generate an IF block in for each publisher in subscribe().
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- PublishesSubscribeEmitter publishes_emitter (ctx);
- defines.node_traverser (publishes_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl
- << "}";
-
- os << STRS[COMP_ECB] << "_ptr" << endl
- << t.name () << "_Servant::unsubscribe ("
- << endl
- << "const char *publisher_name," << endl
- << STRS[COMP_CK] << " *ck" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_IC] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( " << STRS[COMP_ECB]
- << "::_nil ());" << endl;
- }
-
- os << "// Just in case there are no if blocks" << endl
- << STRS[ACE_UA] << " (ck);" << endl
- << "if (publisher_name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IN] << " ()," << endl
- << STRS[COMP_ECB] << "::_nil ());" << endl
- << "}";
-
- // Generate an IF block in for each publisher in unsubscribe().
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- PublishesUnsubscribeEmitter publishes_emitter (ctx);
- defines.node_traverser (publishes_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << STRS[ACE_TR] << " ( "
- << STRS[EXCP_IN] << " ()," << endl
- << STRS[COMP_ECB] << "::_nil ());" << endl
- << "}";
-
- // Generate connect() and disconnect() for each emits declaration.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- EmitsEmitter emits_emitter (ctx, t);
- defines.node_traverser (emits_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "::CORBA::Object_ptr" << endl
- << t.name ()
- << "_Servant::get_facet_executor (" << endl
- << "const char *name" << endl
- << STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "))" << endl
- << "{";
-
- if (swapping)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl;
- }
-
- os << "if (name == 0)" << endl
- << "{"
- << STRS[ACE_TR] << " ( " << STRS[EXCP_BP] << "," << endl
- << "::CORBA::Object::_nil ());" << endl
- << "}";
-
-
- // Generate an IF block for each facet inside provide_facet().
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
- component_emitter.edge_traverser (inherits);
-
- NavigationGetFacetExecEmitter navigation_facet_exec_emitter (ctx);
- defines.node_traverser (navigation_facet_exec_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "return ::CORBA::Object::_nil ();"
- << "}";
-
- os << "// Supported operations." << endl << endl;
-
- // Generate operations for all supported interfaces.
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits component_inherits;
- component_inherits.node_traverser (component_emitter);
-
- Traversal::Supports supports_;
- component_emitter.edge_traverser (supports_);
- component_emitter.edge_traverser (component_inherits);
-
- InterfaceEmitter interface_emitter (ctx);
- supports_.node_traverser (interface_emitter);
-
- Traversal::Defines defines;
- Traversal::Inherits interface_inherits;
- interface_emitter.edge_traverser (defines);
- interface_emitter.edge_traverser (interface_inherits);
-
- AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
- defines.node_traverser (attribute_emitter);
-
- OperationEmitter<SemanticGraph::Component> operation_emitter (ctx, t);
- defines.node_traverser (operation_emitter);
- interface_inherits.node_traverser (interface_emitter);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- Traversal::Raises raises;
- operation_emitter.edge_traverser (receives);
- operation_emitter.edge_traverser (returns);
- operation_emitter.edge_traverser (raises);
-
- ParameterEmitter<Traversal::InParameter> in_param (ctx);
- ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
- ParameterEmitter<Traversal::OutParameter> out_param (ctx);
- receives.node_traverser (in_param);
- receives.node_traverser (inout_param);
- receives.node_traverser (out_param);
-
- ReturnTypeNameEmitter return_type_emitter (ctx);
- FullTypeNameEmitter type_name_emitter (ctx);
- returns.node_traverser (return_type_emitter);
- raises.node_traverser (type_name_emitter);
-
- Traversal::Belongs in_belongs, inout_belongs, out_belongs;
- in_param.edge_traverser (in_belongs);
- inout_param.edge_traverser (inout_belongs);
- out_param.edge_traverser (out_belongs);
-
- INArgTypeNameEmitter in_arg_emitter (ctx);
- INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
- OUTArgTypeNameEmitter out_arg_emitter (ctx);
- in_belongs.node_traverser (in_arg_emitter);
- inout_belongs.node_traverser (inout_arg_emitter);
- out_belongs.node_traverser (out_arg_emitter);
-
- component_emitter.traverse (t);
- }
-
- // Generate operations for component attributes.
- os << "// Component attribute operations." << endl << endl;
-
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- component_emitter.edge_traverser (inherits);
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
-
- AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
- defines.node_traverser (attribute_emitter);
-
- component_emitter.traverse (t);
- }
-
- os << "// Private method to populate the port tables."
- << endl;
-
- os << "void" << endl
- << t.name () << "_Servant::populate_port_tables (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{"
- << "ACE_ENV_ARG_NOT_USED;"
- << "::CORBA::Object_var obj_var;"
- << "::Components::EventConsumerBase_var ecb_var;" << endl;
-
- {
- Traversal::Component component_emitter;
-
- Traversal::Inherits inherits;
- component_emitter.edge_traverser (inherits);
- inherits.node_traverser (component_emitter);
-
- Traversal::Defines defines;
- component_emitter.edge_traverser (defines);
-
- PortTablePopulator port_table_populator (ctx);
- defines.node_traverser (port_table_populator);
-
- component_emitter.traverse (t);
- }
-
- os << "}";
- }
- };
-
- struct HomeEmitter : Traversal::Home, EmitterBase
- {
- HomeEmitter (Context& c, CommandLine const& cl)
- : EmitterBase (c),
- cl_ (cl),
- simple_type_name_emitter_ (c),
- repo_id_emitter_ (c),
- flat_name_emitter_ (c)
- {
- simple_manages_.node_traverser (simple_type_name_emitter_);
- repo_id_manages_.node_traverser (repo_id_emitter_);
- flat_name_manages_.node_traverser (flat_name_emitter_);
- }
-
- // Nested classes used by this emitter.
- private:
- struct HomeOpExecReturnEmitter : Traversal::Type
- {
- HomeOpExecReturnEmitter (std::ostream& os_)
- : os (os_)
- {}
-
- virtual void
- traverse (SemanticGraph::Type&)
- {
- os << STRS[COMP_EC] << "_var _ciao_ec =" << endl
- << "this->executor_->";
- }
-
- private:
- std::ostream& os;
- };
-
- // HomeFactory and HomeFinder are tied to Operation in
- // the front end. Since we want to treat them differently
- // than regular operations in a home (we don't want to
- // generate anything for base class factory operations,
- // example), we use this class for regular home operations
- // that overrides HomeFactory and HomeFinder traversals
- // to do nothing.
- struct HomeOperationEmitter : OperationEmitter<SemanticGraph::Home>,
- Traversal::HomeFactory,
- Traversal::HomeFinder
- {
- HomeOperationEmitter (Context& c, SemanticGraph::Home& home)
- : OperationEmitter<SemanticGraph::Home> (c, home)
- {}
-
- // Overriden to do nothing since we don't want to generate
- // component swapping related code for facet operations.
- virtual void
- gen_swap_related (SemanticGraph::Operation&)
- {
- }
-
- virtual void
- traverse (SemanticGraph::HomeFactory&)
- {
- }
-
- virtual void
- traverse (SemanticGraph::HomeFinder&)
- {
- }
- };
-
- struct FactoryOperationEmitter : Traversal::HomeFactory,
- Traversal::Home,
- EmitterBase
- {
- FactoryOperationEmitter (Context& c, SemanticGraph::Home& home)
- : EmitterBase (c),
- return_type_name_emitter_ (c),
- enclosing_type_name_emitter_ (c),
- simple_type_name_emitter_ (c),
- type_name_emitter_ (c),
- scope_ (home)
- {
- returns_.node_traverser (return_type_name_emitter_);
- enclosing_manages_.node_traverser (enclosing_type_name_emitter_);
- simple_manages_.node_traverser (simple_type_name_emitter_);
- manages_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- returns (SemanticGraph::HomeFactory& hf)
- {
- Traversal::HomeFactory::returns (hf, returns_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::HomeFactory& hf)
- {
- os << scope_.name () << "_Servant::" << hf.name ();
- }
-
- virtual void
- receives_none (SemanticGraph::HomeFactory&)
- {
- os << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
-
- virtual void
- receives_pre (SemanticGraph::HomeFactory&)
- {
- os << " (" << endl;
- }
-
- virtual void
- receives_post (SemanticGraph::HomeFactory&)
- {
- os << endl << STRS[ENV_SRC] << ")" << endl;
- }
-
- virtual void
- raises_none (SemanticGraph::HomeFactory&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- raises_pre (SemanticGraph::HomeFactory&)
- {
- os << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- raises_post (SemanticGraph::HomeFactory&)
- {
- os << "))";
- }
-
- virtual void
- post (SemanticGraph::HomeFactory& hf)
- {
- os << "{";
-
- {
- OperationExecEmitter operation_emitter (ctx);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- operation_emitter.edge_traverser (receives);
- operation_emitter.edge_traverser (returns);
-
- ParameterExecEmitter<Traversal::InParameter> in_param (os);
- ParameterExecEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterExecEmitter<Traversal::OutParameter> out_param (os);
- receives.node_traverser (in_param);
- receives.node_traverser (inout_param);
- receives.node_traverser (out_param);
-
- HomeOpExecReturnEmitter return_emitter (os);
- returns.node_traverser (return_emitter);
-
- operation_emitter.traverse (hf);
- }
-
- os << STRS[ACE_CR] << " ( ";
-
- Traversal::Home::manages (scope_, manages_);
-
- os << "::_nil ());" << endl;
-
- Traversal::Home::manages (scope_, enclosing_manages_);
-
- os << "::CCM_";
-
- Traversal::Home::manages (scope_, simple_manages_);
-
- os << "_var _ciao_comp =" << endl;
-
- Traversal::Home::manages (scope_, enclosing_manages_);
-
- os << "::CCM_";
-
- Traversal::Home::manages (scope_, simple_manages_);
-
- os << "::_narrow (" << endl
- << "_ciao_ec.in ()" << endl
- << STRS[ENV_ARG] << ");" << endl;
-
- os << STRS[ACE_CR] << " ( ";
-
- Traversal::Home::manages (scope_, manages_);
-
- os << "::_nil ());" << endl;
-
- os << "return this->_ciao_activate_component (" << endl
- << "_ciao_comp.in ()" << endl
- << STRS[ENV_ARG] << ");" << endl;
-
- os << "}";
- }
-
- virtual void
- comma (SemanticGraph::HomeFactory&)
- {
- os << "," << endl;
- }
-
- private:
- ReturnTypeNameEmitter return_type_name_emitter_;
- EnclosingTypeNameEmitter enclosing_type_name_emitter_;
- SimpleTypeNameEmitter simple_type_name_emitter_;
- FullTypeNameEmitter type_name_emitter_;
- Traversal::Returns returns_;
- Traversal::Manages enclosing_manages_;
- Traversal::Manages simple_manages_;
- Traversal::Manages manages_;
- SemanticGraph::Home& scope_;
- };
-
- struct FinderOperationEmitter : Traversal::HomeFinder,
- Traversal::Home,
- EmitterBase
- {
- FinderOperationEmitter (Context& c, SemanticGraph::Home& home)
- : EmitterBase (c),
- type_name_emitter_ (c),
- return_type_name_emitter_ (c),
- enclosing_type_name_emitter_ (c),
- simple_type_name_emitter_ (c),
- scope_ (home)
- {
- returns_.node_traverser (return_type_name_emitter_);
- simple_returns_.node_traverser (type_name_emitter_);
- enclosing_manages_.node_traverser (enclosing_type_name_emitter_);
- simple_manages_.node_traverser (simple_type_name_emitter_);
- }
-
- virtual void
- returns (SemanticGraph::HomeFinder& hf)
- {
- Traversal::HomeFinder::returns (hf, returns_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::HomeFinder& hf)
- {
- os << scope_.name () << "_Servant::" << hf.name ();
- }
-
- virtual void
- receives_none (SemanticGraph::HomeFinder&)
- {
- os << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
-
- virtual void
- receives_pre (SemanticGraph::HomeFinder&)
- {
- os << " (" << endl;
- }
-
- virtual void
- receives_post (SemanticGraph::HomeFinder&)
- {
- os << endl << STRS[ENV_SRC] << ")" << endl;
- }
-
- virtual void
- raises_none (SemanticGraph::HomeFinder&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- raises_pre (SemanticGraph::HomeFinder&)
- {
- os << STRS[EXCP_START] << " "
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- raises_post (SemanticGraph::HomeFinder&)
- {
- os << "))";
- }
-
- virtual void
- post (SemanticGraph::HomeFinder& hf)
- {
- os << "{"
- << STRS[ACE_TR] << " ( ::CORBA::NO_IMPLEMENT ()," << endl;
-
- Traversal::HomeFinder::returns (hf, simple_returns_);
-
- os << "::_nil ());"
- << "}";
- }
-
- virtual void
- comma (SemanticGraph::HomeFinder&)
- {
- os << "," << endl;
- }
-
- private:
- FullTypeNameEmitter type_name_emitter_;
- ReturnTypeNameEmitter return_type_name_emitter_;
- EnclosingTypeNameEmitter enclosing_type_name_emitter_;
- SimpleTypeNameEmitter simple_type_name_emitter_;
- Traversal::Returns returns_;
- Traversal::Returns simple_returns_;
- Traversal::Manages enclosing_manages_;
- Traversal::Manages simple_manages_;
- SemanticGraph::Home& scope_;
- };
-
- public:
- virtual void
- pre (Type& t)
- {
- os << t.name () << "_Servant::"
- << t.name () << "_Servant (" << endl
- << t.scoped_name ().scope_name () << "::CCM_" << t.name ()
- << "_ptr exe," << endl
- << "const char *ins_name," << endl
- << "::CIAO::Session_Container *c)" << endl
- << " : ::CIAO::Home_Servant_Impl_Base (c)," << endl
- << " ::CIAO::";
-
- string swap_option = cl_.get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- ScopedName scoped (t.scoped_name ());
- Name stripped (scoped.begin () + 1, scoped.end ());
-
- os << (swapping ? "Swapping_" : "") << "Home_Servant_Impl<" << endl
- << " ::POA_" << stripped << "," << endl
- << " " << t.scoped_name ().scope_name () << "::CCM_"
- << t.name () << "," << endl
- << " ";
-
- Traversal::Home::manages (t, simple_manages_);
-
- os << "_Servant" << endl
- << " > (exe, c, ins_name";
-
- if (swapping)
- {
- os << ", \"" << ctx.composition_name ();
-
- Traversal::Home::manages (t, flat_name_manages_);
-
- os << "\", ";
-
- Traversal::Home::manages (t, repo_id_manages_);
- }
-
- os << ")" << endl
- << "{"
- << "}";
-
- os << t.name () << "_Servant::~"
- << t.name () << "_Servant (void)" << endl
- << "{"
- << "}";
-
- os << "// Home operations." << endl << endl;
-
- {
- Traversal::Home home_emitter;
-
- Traversal::Inherits inherits;
- home_emitter.edge_traverser (inherits);
- inherits.node_traverser (home_emitter);
-
- Traversal::Defines defines;
- home_emitter.edge_traverser (defines);
-
- HomeOperationEmitter home_operation_emitter (ctx, t);
- defines.node_traverser (home_operation_emitter);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- Traversal::Raises raises;
- home_operation_emitter.edge_traverser (receives);
- home_operation_emitter.edge_traverser (returns);
- home_operation_emitter.edge_traverser (raises);
-
- ParameterEmitter<Traversal::InParameter> in_param (ctx);
- ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
- ParameterEmitter<Traversal::OutParameter> out_param (ctx);
- receives.node_traverser (in_param);
- receives.node_traverser (inout_param);
- receives.node_traverser (out_param);
-
- ReturnTypeNameEmitter return_type_emitter (ctx);
- FullTypeNameEmitter type_name_emitter (ctx);
- returns.node_traverser (return_type_emitter);
- raises.node_traverser (type_name_emitter);
-
- Traversal::Belongs in_belongs, inout_belongs, out_belongs;
- in_param.edge_traverser (in_belongs);
- inout_param.edge_traverser (inout_belongs);
- out_param.edge_traverser (out_belongs);
-
- INArgTypeNameEmitter in_arg_emitter (ctx);
- INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
- OUTArgTypeNameEmitter out_arg_emitter (ctx);
- in_belongs.node_traverser (in_arg_emitter);
- inout_belongs.node_traverser (inout_arg_emitter);
- out_belongs.node_traverser (out_arg_emitter);
-
- home_emitter.traverse (t);
- }
-
- os << "// Home supported interface operations." << endl << endl;
-
- {
- Traversal::Home home_emitter;
-
- Traversal::Inherits home_inherits;
- home_inherits.node_traverser (home_emitter);
- home_emitter.edge_traverser (home_inherits);
-
- Traversal::Supports supports_;
- home_emitter.edge_traverser (supports_);
-
- InterfaceEmitter interface_emitter (ctx);
- supports_.node_traverser (interface_emitter);
-
- Traversal::Defines defines;
- Traversal::Inherits interface_inherits;
- interface_emitter.edge_traverser (defines);
- interface_emitter.edge_traverser (interface_inherits);
-
- AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
- defines.node_traverser (attribute_emitter);
-
- OperationEmitter<SemanticGraph::Home> operation_emitter (ctx, t);
- defines.node_traverser (operation_emitter);
- interface_inherits.node_traverser (interface_emitter);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- Traversal::Raises raises;
- operation_emitter.edge_traverser (receives);
- operation_emitter.edge_traverser (returns);
- operation_emitter.edge_traverser (raises);
-
- ParameterEmitter<Traversal::InParameter> in_param (ctx);
- ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
- ParameterEmitter<Traversal::OutParameter> out_param (ctx);
- receives.node_traverser (in_param);
- receives.node_traverser (inout_param);
- receives.node_traverser (out_param);
-
- ReturnTypeNameEmitter return_type_emitter (ctx);
- FullTypeNameEmitter type_name_emitter (ctx);
- returns.node_traverser (return_type_emitter);
- raises.node_traverser (type_name_emitter);
-
- Traversal::Belongs in_belongs, inout_belongs, out_belongs;
- in_param.edge_traverser (in_belongs);
- inout_param.edge_traverser (inout_belongs);
- out_param.edge_traverser (out_belongs);
-
- INArgTypeNameEmitter in_arg_emitter (ctx);
- INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
- OUTArgTypeNameEmitter out_arg_emitter (ctx);
- in_belongs.node_traverser (in_arg_emitter);
- inout_belongs.node_traverser (inout_arg_emitter);
- out_belongs.node_traverser (out_arg_emitter);
-
- home_emitter.traverse (t);
- }
-
- os << "// Home factory and finder operations." << endl << endl;
-
- {
- Traversal::Home home_emitter;
-
- Traversal::Inherits inherits;
- home_emitter.edge_traverser (inherits);
- inherits.node_traverser (home_emitter);
-
- Traversal::Defines defines;
- home_emitter.edge_traverser (defines);
-
- FactoryOperationEmitter factory_operation_emitter (ctx, t);
- FinderOperationEmitter finder_operation_emitter (ctx, t);
- defines.node_traverser (factory_operation_emitter);
- defines.node_traverser (finder_operation_emitter);
-
- Traversal::Receives receives;
- Traversal::Belongs returns;
- Traversal::Raises raises;
- factory_operation_emitter.edge_traverser (receives);
- factory_operation_emitter.edge_traverser (returns);
- factory_operation_emitter.edge_traverser (raises);
- finder_operation_emitter.edge_traverser (receives);
- finder_operation_emitter.edge_traverser (returns);
- finder_operation_emitter.edge_traverser (raises);
-
- ParameterEmitter<Traversal::InParameter> in_param (ctx);
- ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
- ParameterEmitter<Traversal::OutParameter> out_param (ctx);
- receives.node_traverser (in_param);
- receives.node_traverser (inout_param);
- receives.node_traverser (out_param);
-
- ReturnTypeNameEmitter return_type_emitter (ctx);
- FullTypeNameEmitter type_name_emitter (ctx);
- returns.node_traverser (return_type_emitter);
- raises.node_traverser (type_name_emitter);
-
- Traversal::Belongs in_belongs, inout_belongs, out_belongs;
- in_param.edge_traverser (in_belongs);
- inout_param.edge_traverser (inout_belongs);
- out_param.edge_traverser (out_belongs);
-
- INArgTypeNameEmitter in_arg_emitter (ctx);
- INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
- OUTArgTypeNameEmitter out_arg_emitter (ctx);
- in_belongs.node_traverser (in_arg_emitter);
- inout_belongs.node_traverser (inout_arg_emitter);
- out_belongs.node_traverser (out_arg_emitter);
-
- home_emitter.traverse (t);
- }
-
- // Generate operations for component attributes.
- os << "// Home attribute operations." << endl << endl;
-
- {
- Traversal::Home home_emitter;
-
- Traversal::Inherits inherits;
- home_emitter.edge_traverser (inherits);
- inherits.node_traverser (home_emitter);
-
- Traversal::Defines defines;
- home_emitter.edge_traverser (defines);
-
- AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
- defines.node_traverser (attribute_emitter);
-
- home_emitter.traverse (t);
- }
- }
-
- virtual void
- post (Type& t)
- {
- // We need to escape C++ keywords before flattening the name.
- //
- string name;
- {
- std::ostringstream ostr;
- ostr.pword (name_printer_index) = os.pword (name_printer_index);
- ostr << t.scoped_name ();
- name = regex::perl_s (ostr.str (), "/::/_/");
- }
-
- os << "extern \"C\" " << ctx.export_macro ()
- << " ::PortableServer::Servant"
- << endl
- << "create" << name << "_Servant (" << endl
- << "::Components::HomeExecutorBase_ptr p," << endl
- << "::CIAO::Session_Container *c," << endl
- << "const char *ins_name" << endl
- << STRS[ENV_SRC] << ")" << endl
- << "{"
- << "if (p == 0)" << endl
- << "{"
- << "return 0;" << endl
- << "}"
- << t.scoped_name ().scope_name () << "::CCM_"
- << t.name () << "_var x =" << endl
- << t.scoped_name ().scope_name () << "::CCM_" << t.name ()
- << "::_narrow (" << endl
- << "p" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (0);" << endl
- << "if (::CORBA::is_nil (x.in ()))" << endl
- << "{"
- << "return 0;" << endl
- << "}"
- << "return new" << endl;
-
- os << t.name () << "_Servant (" << endl
- << "x.in ()," << endl
- << "ins_name," << endl
- << "c);" << endl
- << "}";
- }
-
- private:
- CommandLine const& cl_;
- SimpleTypeNameEmitter simple_type_name_emitter_;
- RepoIdEmitter repo_id_emitter_;
- FlatNameEmitter flat_name_emitter_;
- Traversal::Manages simple_manages_;
- Traversal::Manages repo_id_manages_;
- Traversal::Manages flat_name_manages_;
- };
-}
-
-ServantSourceEmitter::ServantSourceEmitter (std::ostream& os_,
- CommandLine const& cl,
- string export_macro,
- fs::path const& file)
- : os (os_),
- cl_ (cl),
- export_macro_ (export_macro),
- file_ (file)
-{}
-
-void
-ServantSourceEmitter::generate (TranslationUnit& u)
-{
- pre (u);
-
- Context c (os, export_macro_, cl_);
-
- /// CIAO has facet classes outside the context and servant classes.
- /// We launch it here to generate the classes inside namespaces
- /// constructed to be unique for each interface type used in a facet.
- generate_facets (u, c);
-
- Traversal::TranslationUnit unit;
-
- // Layer 1
- //
- Traversal::ContainsPrincipal contains_principal;
- unit.edge_traverser (contains_principal);
-
- //--
- Traversal::TranslationRegion region;
- contains_principal.node_traverser (region);
-
- // Layer 2
- //
- Traversal::ContainsRoot contains_root;
- Traversal::Includes includes;
-
- region.edge_traverser (includes);
- region.edge_traverser (contains_root);
-
- //--
- Traversal::Root root;
- contains_root.node_traverser (root);
-
- // Layer 3
- //
- Traversal::Defines defines;
- root.edge_traverser (defines);
-
- //--
- ModuleEmitter module (c);
- CompositionEmitter composition (c);
- defines.node_traverser (module);
- defines.node_traverser (composition);
-
- // Layer 4
- //
- Traversal::Defines composition_defines;
- composition.edge_traverser (composition_defines);
-
- //--
- Traversal::ComponentExecutor component_executor;
- Traversal::HomeExecutor home_executor;
- composition_defines.node_traverser (component_executor);
- composition_defines.node_traverser (home_executor);
-
- module.edge_traverser (defines);
-
- // Layer 5
- //
- Traversal::Implements implements;
- component_executor.edge_traverser (implements);
- home_executor.edge_traverser (implements);
-
- //--
- ContextEmitter context_emitter (c);
- ServantEmitter servant_emitter (c);
- HomeEmitter home_emitter (c, cl_);
- implements.node_traverser (context_emitter);
- implements.node_traverser (servant_emitter);
- implements.node_traverser (home_emitter);
-
- unit.traverse (u);
-}
-
-void
-ServantSourceEmitter::pre (TranslationUnit&)
-{
- os << COPYRIGHT;
-
- string file_name ("");
-
- if (! file_.empty ())
- {
- file_name = file_.leaf ();
- }
-
- string file_suffix = cl_.get_value ("svnt-hdr-file-suffix",
- "_svnt.h");
-
- file_name = regex::perl_s (file_name,
- "/^(.+?)(\\.(idl|cidl|cdl))?$/$1"
- + file_suffix
- + "/");
-
- string swap_option = cl_.get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- os << "#include \"" << file_name << "\"" << endl
- << "#include \"Cookies.h\"" << endl
- << "#include \"ciao/Servant_Activator.h\"" << endl
- << (swapping ? "#include \"ciao/Dynamic_Component_Activator.h\"\n" : "")
- << "#include \"ciao/Port_Activator_T.h\"" << endl
- << "#include \"ace/SString.h\"" << endl << endl;
-}
-
-void
-ServantSourceEmitter::generate_facets (TranslationUnit& u, Context& c)
-{
- Traversal::TranslationUnit unit;
-
- // Layer 1
- //
- Traversal::ContainsPrincipal contains_principal;
- unit.edge_traverser (contains_principal);
-
- //--
- Traversal::TranslationRegion region;
- contains_principal.node_traverser (region);
-
- // Layer 2
- //
- Traversal::ContainsRoot contains_root;
- Traversal::Includes includes;
-
- region.edge_traverser (includes);
- region.edge_traverser (contains_root);
-
- //--
- Traversal::Root root;
- contains_root.node_traverser (root);
-
- // Layer 3
- //
- Traversal::Defines defines;
- root.edge_traverser (defines);
-
- //--
- Traversal::Module module;
- Traversal::Composition composition;
- defines.node_traverser (module);
- defines.node_traverser (composition);
-
- // Layer 4
- //
- Traversal::Defines composition_defines;
- composition.edge_traverser (composition_defines);
-
- //--
- Traversal::ComponentExecutor component_executor;
- Traversal::HomeExecutor home_executor;
- composition_defines.node_traverser (component_executor);
- composition_defines.node_traverser (home_executor);
-
- module.edge_traverser (defines);
-
- // Layer 5
- //
- Traversal::Implements implements;
- component_executor.edge_traverser (implements);
- home_executor.edge_traverser (implements);
-
- // Layer 6
- //
- Traversal::Component component_emitter;
- implements.node_traverser (component_emitter);
-
- Traversal::Inherits component_inherits;
- component_inherits.node_traverser (component_emitter);
-
- Traversal::Defines component_defines;
- component_emitter.edge_traverser (component_defines);
- component_emitter.edge_traverser (component_inherits);
-
- // Layer 7
- //
- Traversal::Provider provider;
- component_defines.node_traverser (provider);
-
- Traversal::Belongs belongs;
- provider.edge_traverser (belongs);
-
- FacetEmitter facet_emitter (c);
- belongs.node_traverser (facet_emitter);
-
- unit.traverse (u);
-}