diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-03-17 14:44:19 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-03-17 14:44:19 +0000 |
commit | 72abb7a2d472ed5847e05fe9a47bc7d77ae44f20 (patch) | |
tree | 3a4285035b66dde76ae484455ccd8a07451471e6 | |
parent | 87faef7a0d6b82edbbab2ec64af539c7607e8db6 (diff) | |
download | ATCD-72abb7a2d472ed5847e05fe9a47bc7d77ae44f20.tar.gz |
ChangeLogTag: Fri Mar 17 14:23:53 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
35 files changed, 5957 insertions, 2923 deletions
diff --git a/TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp new file mode 100644 index 00000000000..2442ef3f958 --- /dev/null +++ b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp @@ -0,0 +1,199 @@ +// file : CIDLC/AttributeHeaderEmitters.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "AttributeHeaderEmitters.hpp" +#include "Literals.hpp" + +using namespace StringLiterals; + +WriteAttributeHeaderEmitter::WriteAttributeHeaderEmitter (Context& c) + : EmitterBase (c), + write_type_name_emitter_ (c), + type_name_emitter_ (c) +{ + write_belongs_.node_traverser (write_type_name_emitter_); + + edge_traverser (set_raises_); + set_raises_.node_traverser (type_name_emitter_); +} + +void +WriteAttributeHeaderEmitter::pre (SemanticGraph::ReadWriteAttribute&) +{ + os << "void" << endl; +} + +void +WriteAttributeHeaderEmitter::name (SemanticGraph::ReadWriteAttribute& a) +{ + os << a.name () << " (" << endl; + + Traversal::ReadWriteAttribute::belongs (a, write_belongs_); + + os << " " << a.name () << endl + << STRS[ENV_HDR] << ")" << endl; +} + +void +WriteAttributeHeaderEmitter::get_raises (SemanticGraph::ReadWriteAttribute&) +{ +} + +void +WriteAttributeHeaderEmitter::set_raises_none (SemanticGraph::ReadWriteAttribute&) +{ + os << STRS[EXCP_SNGL]; +} + +void +WriteAttributeHeaderEmitter::set_raises_pre (SemanticGraph::ReadWriteAttribute&) +{ + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; +} + +void +WriteAttributeHeaderEmitter::set_raises_post (SemanticGraph::ReadWriteAttribute&) +{ + os << "))"; +} + +void +WriteAttributeHeaderEmitter::post (SemanticGraph::ReadWriteAttribute&) +{ + os << ";" << endl; +} + +void +WriteAttributeHeaderEmitter::comma (SemanticGraph::ReadWriteAttribute&) +{ + os << "," << endl; +} + +// ============================================================ + +AttributeHeaderEmitter::AttributeHeaderEmitter (Context& c) + : EmitterBase (c), + read_type_name_emitter_ (c), + type_name_emitter_ (c) +{ + read_belongs_.node_traverser (read_type_name_emitter_); + + edge_traverser (get_raises_); + get_raises_.node_traverser (type_name_emitter_); +} + +// ReadWriteAttribute +// +void +AttributeHeaderEmitter::pre (SemanticGraph::ReadWriteAttribute& a) +{ + os << "virtual "; + + Traversal::ReadWriteAttribute::belongs (a, read_belongs_); + + os << endl; +} + +void +AttributeHeaderEmitter::name (SemanticGraph::ReadWriteAttribute& a) +{ + os << a.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; +} + +void +AttributeHeaderEmitter::get_raises_none (SemanticGraph::ReadWriteAttribute&) +{ + os << STRS[EXCP_SNGL]; +} + +void +AttributeHeaderEmitter::get_raises_pre (SemanticGraph::ReadWriteAttribute&) +{ + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; +} + +void +AttributeHeaderEmitter::get_raises_post (SemanticGraph::ReadWriteAttribute&) +{ + os << "))"; +} + +void +AttributeHeaderEmitter::set_raises (SemanticGraph::ReadWriteAttribute&) +{ +} + +void +AttributeHeaderEmitter::post (SemanticGraph::ReadWriteAttribute& a) +{ + os << ";" << endl; + + WriteAttributeHeaderEmitter write_attribute_emitter (ctx); + write_attribute_emitter.traverse (a); +} + +void +AttributeHeaderEmitter::comma (SemanticGraph::ReadWriteAttribute&) +{ + os << "," << endl; +} + +// ReadAttribute +// +void +AttributeHeaderEmitter::pre (SemanticGraph::ReadAttribute& a) +{ + os << "virtual "; + + Traversal::ReadAttribute::belongs (a, read_belongs_); + + os << endl; +} + +void +AttributeHeaderEmitter::name (SemanticGraph::ReadAttribute& a) +{ + os << a.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; +} + +void +AttributeHeaderEmitter::get_raises_none (SemanticGraph::ReadAttribute&) +{ + os << STRS[EXCP_SNGL]; +} + +void +AttributeHeaderEmitter::get_raises_pre (SemanticGraph::ReadAttribute&) +{ + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; +} + +void +AttributeHeaderEmitter::get_raises_post (SemanticGraph::ReadAttribute&) +{ + os << "))"; +} + +void +AttributeHeaderEmitter::set_raises (SemanticGraph::ReadAttribute&) +{ +} + +void +AttributeHeaderEmitter::post (SemanticGraph::ReadAttribute&) +{ + os << ";" << endl; +} + +void +AttributeHeaderEmitter::comma (SemanticGraph::ReadAttribute&) +{ + os << "," << endl; +} + diff --git a/TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp new file mode 100644 index 00000000000..f4318ad0073 --- /dev/null +++ b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp @@ -0,0 +1,119 @@ +// file : CIDLC/AttributeHeaderEmitters.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef ATTRIBUTEHEADEREMITTERS_HPP +#define ATTRIBUTEHEADEREMITTERS_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "CorbaTypeNameEmitters.hpp" +#include "UtilityTypeNameEmitters.hpp" +#include "EmitterBase.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +struct WriteAttributeHeaderEmitter : Traversal::ReadWriteAttribute, + EmitterBase +{ + WriteAttributeHeaderEmitter (Context& c); + + virtual void + pre (SemanticGraph::ReadWriteAttribute&); + + virtual void + name (SemanticGraph::ReadWriteAttribute&); + + virtual void + get_raises (SemanticGraph::ReadWriteAttribute&); + + virtual void + set_raises_none (SemanticGraph::ReadWriteAttribute&); + + virtual void + set_raises_pre (SemanticGraph::ReadWriteAttribute&); + + virtual void + set_raises_post (SemanticGraph::ReadWriteAttribute&); + + virtual void + post (SemanticGraph::ReadWriteAttribute&); + + virtual void + comma (SemanticGraph::ReadWriteAttribute&); + + private: + INArgTypeNameEmitter write_type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; + Traversal::Belongs write_belongs_; + Traversal::SetRaises set_raises_; +}; + +struct AttributeHeaderEmitter : Traversal::ReadAttribute, + Traversal::ReadWriteAttribute, + EmitterBase +{ + AttributeHeaderEmitter (Context&); + + // ReadWriteAttribute + // + virtual void + pre (SemanticGraph::ReadWriteAttribute&); + + virtual void + name (SemanticGraph::ReadWriteAttribute&); + + virtual void + get_raises_none (SemanticGraph::ReadWriteAttribute&); + + virtual void + get_raises_pre (SemanticGraph::ReadWriteAttribute&); + + virtual void + get_raises_post (SemanticGraph::ReadWriteAttribute&); + + virtual void + set_raises (SemanticGraph::ReadWriteAttribute&); + + virtual void + post (SemanticGraph::ReadWriteAttribute&); + + virtual void + comma (SemanticGraph::ReadWriteAttribute&); + + // ReadAttribute + // + virtual void + pre (SemanticGraph::ReadAttribute&); + + virtual void + name (SemanticGraph::ReadAttribute&); + + virtual void + get_raises_none (SemanticGraph::ReadAttribute&); + + virtual void + get_raises_pre (SemanticGraph::ReadAttribute&); + + virtual void + get_raises_post (SemanticGraph::ReadAttribute&); + + virtual void + set_raises (SemanticGraph::ReadAttribute&); + + virtual void + post (SemanticGraph::ReadAttribute&); + + virtual void + comma (SemanticGraph::ReadAttribute&); + +private: + ReturnTypeNameEmitter read_type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; + Traversal::Belongs read_belongs_; + Traversal::GetRaises get_raises_; +}; + +#endif // ATTRIBUTEHEADEREMITTERS_HPP diff --git a/TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp b/TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp new file mode 100644 index 00000000000..d7079b3908b --- /dev/null +++ b/TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp @@ -0,0 +1,366 @@ +// file : CIDLC/AttributeSourceEmitters_T.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef ATTRIBUTESOURCEEMITTERS_T_HPP +#define ATTRIBUTESOURCEEMITTERS_T_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "CorbaTypeNameEmitters.hpp" +#include "UtilityTypeNameEmitters.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +template <typename T> +struct WriteAttributeSourceEmitter : Traversal::ReadWriteAttribute, + EmitterBase +{ + WriteAttributeSourceEmitter (Context& c, + T& scope, + bool swapping, + bool exec_src) + : EmitterBase (c), + scope_ (scope), + write_type_name_emitter_ (c), + type_name_emitter_ (c), + swapping_ (swapping), + exec_src_ (exec_src) + { + write_belongs_.node_traverser (write_type_name_emitter_); + edge_traverser (set_raises_); + set_raises_.node_traverser (type_name_emitter_); + } + + virtual void + gen_swapping_set () + { + os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK;" << endl; + } + + virtual void + pre (SemanticGraph::ReadWriteAttribute&) + { + os << "void" << endl; + } + + virtual void + name (SemanticGraph::ReadWriteAttribute& a) + { + os << scope_.name () + << (exec_src_ ? "_exec_i::" : "_Servant::") + << a.name () << " (" << endl; + + Traversal::ReadWriteAttribute::belongs (a, write_belongs_); + + os << (exec_src_ ? " /* " : " ") + << a.name () + << (exec_src_ ? " */" : "") << endl + << (exec_src_ ? STRS[ENV_SRC_NOTUSED] : STRS[ENV_SRC]) + << ")" << endl; + } + + virtual void + get_raises (SemanticGraph::ReadWriteAttribute&) + { + } + + virtual void + set_raises_none (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + set_raises_pre (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + set_raises_post (SemanticGraph::ReadWriteAttribute&) + { + os << "))" << endl; + } + + virtual void + post (SemanticGraph::ReadWriteAttribute& a) + { + os << "{"; + + if (exec_src_) + { + os << STRS[YCH]; + } + else + { + if (swapping_) + { + this->gen_swapping_set (); + } + + os << "this->executor_->" << a.name () << " (" << endl + << a.name () << endl + << STRS[ENV_ARG] << ");" << endl; + } + + os << "}"; + } + + virtual void + comma (SemanticGraph::ReadWriteAttribute&) + { + os << "," << endl; + } + +protected: + T& scope_; + Traversal::Belongs write_belongs_; + +private: + INArgTypeNameEmitter write_type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; + Traversal::SetRaises set_raises_; + bool swapping_; + bool exec_src_; +}; + +template <typename T> +struct AttributeSourceEmitter : Traversal::ReadAttribute, + Traversal::ReadWriteAttribute, + EmitterBase +{ + AttributeSourceEmitter (Context& c, T& scope, bool exec_src = false) + : EmitterBase (c), + scope_ (scope), + read_type_name_emitter_ (c), + type_name_emitter_ (c), + return_emitter_ (c), + ace_check_return_emitter_ (c), + exec_src_ (exec_src) + { + read_belongs_.node_traverser (read_type_name_emitter_); + return_belongs_.node_traverser (return_emitter_); + ace_check_return_belongs_.node_traverser (ace_check_return_emitter_); + edge_traverser (get_raises_); + get_raises_.node_traverser (type_name_emitter_); + } + + // ReadWriteAttribute + // + + // Overridden by facet attribute emitter in servant source generator. + virtual void + gen_swapping_get (SemanticGraph::ReadWriteAttribute& a) + { + os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"; + + Traversal::ReadWriteAttribute::belongs (a, ace_check_return_belongs_); + + os << endl; + } + + // Overridden by facet attribute emitter in servant source generator. + virtual void + gen_write_operation (SemanticGraph::ReadWriteAttribute& a, + bool swapping) + { + WriteAttributeSourceEmitter<T> write_attribute_emitter (ctx, + scope_, + swapping, + exec_src_); + write_attribute_emitter.traverse (a); + } + + virtual void + pre (SemanticGraph::ReadWriteAttribute& a) + { + Traversal::ReadWriteAttribute::belongs (a, read_belongs_); + + os << endl; + } + + virtual void + name (SemanticGraph::ReadWriteAttribute& a) + { + os << scope_.name () + << (exec_src_ ? "_exec_i::" : "_Servant::") + << a.name () << " (" << endl + << (exec_src_ ? STRS[ENV_SNGL_SRC_NOTUSED] : STRS[ENV_SNGL_SRC]) + << ")" << endl; + } + + virtual void + get_raises_none (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_SNGL] << endl; + } + + virtual void + get_raises_pre (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + get_raises_post (SemanticGraph::ReadWriteAttribute&) + { + os << "))" << endl; + } + + virtual void + set_raises (SemanticGraph::ReadWriteAttribute&) + { + } + + virtual void + post (SemanticGraph::ReadWriteAttribute& a) + { + bool swapping = false; + + os << "{"; + + if (exec_src_) + { + os << STRS[YCH] << endl; + + Traversal::ReadWriteAttribute::belongs (a, return_belongs_); + } + else + { + string swap_option = ctx.cl ().get_value ("custom-container", ""); + swapping = (swap_option == "upgradeable"); + + if (swapping) + { + this->gen_swapping_get (a); + } + + os << "return this->executor_->" << a.name () << " (" << endl + << STRS[ENV_SNGL_ARG] << ");"; + } + + os << "}"; + + this->gen_write_operation (a, swapping); + } + + virtual void + comma (SemanticGraph::ReadWriteAttribute&) + { + os << "," << endl; + } + + // ReadAttribute + // + + // Overridden by facet attribute emitter in servant source generator. + virtual void + gen_swapping_get (SemanticGraph::ReadAttribute& a) + { + os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"; + + Traversal::ReadAttribute::belongs (a, ace_check_return_belongs_); + + os << endl; + } + + virtual void + pre (SemanticGraph::ReadAttribute& a) + { + Traversal::ReadAttribute::belongs (a, read_belongs_); + + os << endl; + } + + virtual void + name (SemanticGraph::ReadAttribute& a) + { + os << scope_.name () + << (exec_src_ ? "_exec_i::" : "_Servant::") + << a.name () << " (" << endl + << (exec_src_ ? STRS[ENV_SNGL_SRC_NOTUSED] : STRS[ENV_SNGL_SRC]) + << ")" << endl; + } + + virtual void + get_raises_none (SemanticGraph::ReadAttribute&) + { + os << STRS[EXCP_SNGL] << endl; + } + + virtual void + get_raises_pre (SemanticGraph::ReadAttribute&) + { + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + get_raises_post (SemanticGraph::ReadAttribute&) + { + os << "))" << endl; + } + + virtual void + set_raises (SemanticGraph::ReadAttribute&) + { + } + + virtual void + post (SemanticGraph::ReadAttribute& a) + { + bool swapping = false; + + os << "{"; + + if (exec_src_) + { + os << STRS[YCH] << endl; + + Traversal::ReadAttribute::belongs (a, return_belongs_); + } + else + { + string swap_option = ctx.cl ().get_value ("custom-container", ""); + swapping = (swap_option == "upgradeable"); + + if (swapping) + { + this->gen_swapping_get (a); + } + + os << "return this->executor_->" << a.name () << " (" << endl + << STRS[ENV_SNGL_ARG] << ");"; + } + + os << "}"; + } + + virtual void + comma (SemanticGraph::ReadAttribute&) + { + os << "," << endl; + } + +protected: + T& scope_; + +private: + ReturnTypeNameEmitter read_type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; + NullReturnEmitter return_emitter_; + AceCheckReturnEmitter ace_check_return_emitter_; + Traversal::Belongs read_belongs_; + Traversal::Belongs return_belongs_; + Traversal::Belongs ace_check_return_belongs_; + Traversal::GetRaises get_raises_; + bool exec_src_; +}; + +#endif // ATTRIBUTESOURCEEMITTERS_T_HPP diff --git a/TAO/CIAO/CIDLC/CIDLC.mpc b/TAO/CIAO/CIDLC/CIDLC.mpc index 9a153b3858f..034bf35a71b 100644 --- a/TAO/CIAO/CIDLC/CIDLC.mpc +++ b/TAO/CIAO/CIDLC/CIDLC.mpc @@ -7,20 +7,10 @@ project(CIDLC): cidlc { libs += CIDL IDL3 IDL2 CodeGenerationKit CompilerElements Source_Files { - ExecutorMappingGenerator.cpp - DescriptorGenerator.cpp - ExecImplGenerator.cpp - ExecImplHeaderGenerator.cpp - ExecImplSourceGenerator.cpp - ExecutorMappingGenerator.cpp - RepositoryIdGenerator.cpp - SizeTypeCalculator.cpp - ServantGenerator.cpp - ServantHeaderGenerator.cpp - ServantSourceGenerator.cpp - TypeNameEmitter.cpp - Literals.cpp - cidlc.cpp + *.cpp } + Header_Files { + *.hpp + } } diff --git a/TAO/CIAO/CIDLC/CompositionEmitter.cpp b/TAO/CIAO/CIDLC/CompositionEmitter.cpp new file mode 100644 index 00000000000..c7f9754b651 --- /dev/null +++ b/TAO/CIAO/CIDLC/CompositionEmitter.cpp @@ -0,0 +1,27 @@ +// file : CIDLC/CompositionEmitter.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "CompositionEmitter.hpp" +#include "Literals.hpp" + +using namespace StringLiterals; + +CompositionEmitter::CompositionEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +CompositionEmitter::pre (Type& t) +{ + ctx.composition_name (t.name ().str ()); + + os << STRS[CIDL_NS] << t.name () << "{"; +} + +void +CompositionEmitter::post (Type&) +{ + os << "}"; +} diff --git a/TAO/CIAO/CIDLC/CompositionEmitter.hpp b/TAO/CIAO/CIDLC/CompositionEmitter.hpp new file mode 100644 index 00000000000..c6aeab17229 --- /dev/null +++ b/TAO/CIAO/CIDLC/CompositionEmitter.hpp @@ -0,0 +1,26 @@ +// file : CIDLC/CompositionEmitter.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef COMPOSITIONEMITTER_HPP +#define COMPOSITIONEMITTER_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "EmitterBase.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +struct CompositionEmitter : Traversal::Composition, + EmitterBase +{ + CompositionEmitter (Context& c); + + virtual void pre (Type&); + + virtual void post (Type&); +}; + +#endif // COMPOSITIONEMITTER_HPP diff --git a/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp new file mode 100644 index 00000000000..390e49c6c2b --- /dev/null +++ b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp @@ -0,0 +1,2235 @@ +// file : CIDLC/CorbaTypeNameEmitter.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "CorbaTypeNameEmitters.hpp" +#include "Literals.hpp" + +#include <ostream> + +using namespace std; +using namespace StringLiterals; + +CorbaTypeNameEmitter::CorbaTypeNameEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +CorbaTypeNameEmitter::traverse (Void&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Boolean&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Octet&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Char&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Wchar&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Short&) +{ +} + +void +CorbaTypeNameEmitter::traverse (UnsignedShort&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Long&) +{ +} + +void +CorbaTypeNameEmitter::traverse (UnsignedLong&) +{ +} + +void +CorbaTypeNameEmitter::traverse (LongLong&) +{ +} + +void +CorbaTypeNameEmitter::traverse (UnsignedLongLong&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Float&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Double&) +{ +} + +void +CorbaTypeNameEmitter::traverse (String&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::BoundedString&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Wstring&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Object&) +{ +} + +void +CorbaTypeNameEmitter::traverse (ValueBase&) +{ +} + +void +CorbaTypeNameEmitter::traverse (Any&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Array&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Enum&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Struct&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Union&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::BoundedSequence&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Interface&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::ValueType&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::EventType&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Component&) +{ +} + +void +CorbaTypeNameEmitter::traverse (SemanticGraph::Home&) +{ +} + +// ==================================================================== + +ReturnTypeNameEmitter::ReturnTypeNameEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +ReturnTypeNameEmitter::traverse (Void&) +{ + os << "void"; +} + +void +ReturnTypeNameEmitter::traverse (Boolean&) +{ + os << "::CORBA::Boolean"; +} + +void +ReturnTypeNameEmitter::traverse (Octet&) +{ + os << "::CORBA::Octet"; +} + +void +ReturnTypeNameEmitter::traverse (Char&) +{ + os << "::CORBA::Char"; +} + +void +ReturnTypeNameEmitter::traverse (Wchar&) +{ + os << "::CORBA::WChar"; +} + +void +ReturnTypeNameEmitter::traverse (Short&) +{ + os << "::CORBA::Short"; +} + +void +ReturnTypeNameEmitter::traverse (UnsignedShort&) +{ + os << "::CORBA::UShort"; +} + +void +ReturnTypeNameEmitter::traverse (Long&) +{ + os << "::CORBA::Long"; +} + +void +ReturnTypeNameEmitter::traverse (UnsignedLong&) +{ + os << "::CORBA::ULong"; +} + +void +ReturnTypeNameEmitter::traverse (LongLong&) +{ + os << "::CORBA::LongLong"; +} + +void +ReturnTypeNameEmitter::traverse (UnsignedLongLong&) +{ + os << "::CORBA::ULongLong"; +} + +void +ReturnTypeNameEmitter::traverse (Float&) +{ + os << "::CORBA::Float"; +} + +void +ReturnTypeNameEmitter::traverse (Double&) +{ + os << "::CORBA::Double"; +} + +void +ReturnTypeNameEmitter::traverse (String&) +{ + os << "char *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << "char *"; +} + +void +ReturnTypeNameEmitter::traverse (Wstring&) +{ + os << "::CORBA::WChar *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << "::CORBA::WChar *"; +} + +void +ReturnTypeNameEmitter::traverse (Object&) +{ + os << "::CORBA::Object_ptr"; +} + +void +ReturnTypeNameEmitter::traverse (ValueBase&) +{ + os << "::CORBA::ValueBase *"; +} + +void +ReturnTypeNameEmitter::traverse (Any&) +{ + os << "::CORBA::Any *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Array& a) +{ + os << a.scoped_name () << "_slice *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name (); +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Struct& s) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]); + + os << s.scoped_name (); + + if (var_size) + { + os << " *"; + } +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Union& u) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]); + + os << u.scoped_name (); + + if (var_size) + { + os << " *"; + } +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s) +{ + os << s.scoped_name () << " *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s) +{ + os << s.scoped_name () << " *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Interface& i) +{ + os << i.scoped_name () << "_ptr"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::ValueType& v) +{ + os << v.scoped_name () << " *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::EventType& e) +{ + os << e.scoped_name () << " *"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Component& c) +{ + os << c.scoped_name () << "_ptr"; +} + +void +ReturnTypeNameEmitter::traverse (SemanticGraph::Home& h) +{ + os << h.scoped_name () << "_ptr"; +} + +// =============================================================== + +INArgTypeNameEmitter::INArgTypeNameEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +INArgTypeNameEmitter::traverse (Boolean&) +{ + os << "::CORBA::Boolean"; +} + +void +INArgTypeNameEmitter::traverse (Octet&) +{ + os << "::CORBA::Octet"; +} + +void +INArgTypeNameEmitter::traverse (Char&) +{ + os << "::CORBA::Char"; +} + +void +INArgTypeNameEmitter::traverse (Wchar&) +{ + os << "::CORBA::WChar"; +} + +void +INArgTypeNameEmitter::traverse (Short&) +{ + os << "::CORBA::Short"; +} + +void +INArgTypeNameEmitter::traverse (UnsignedShort&) +{ + os << "::CORBA::UShort"; +} + +void +INArgTypeNameEmitter::traverse (Long&) +{ + os << "::CORBA::Long"; +} + +void +INArgTypeNameEmitter::traverse (UnsignedLong&) +{ + os << "::CORBA::ULong"; +} + +void +INArgTypeNameEmitter::traverse (LongLong&) +{ + os << "::CORBA::LongLong"; +} + +void +INArgTypeNameEmitter::traverse (UnsignedLongLong&) +{ + os << "::CORBA::ULongLong"; +} + +void +INArgTypeNameEmitter::traverse (Float&) +{ + os << "::CORBA::Float"; +} + +void +INArgTypeNameEmitter::traverse (Double&) +{ + os << "::CORBA::Double"; +} + +void +INArgTypeNameEmitter::traverse (String&) +{ + os << "const char *"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << "const char *"; +} + +void +INArgTypeNameEmitter::traverse (Wstring&) +{ + os << "const ::CORBA::WChar *"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << "const ::CORBA::WChar *"; +} + +void +INArgTypeNameEmitter::traverse (Object&) +{ + os << "::CORBA::Object_ptr"; +} + +void +INArgTypeNameEmitter::traverse (ValueBase&) +{ + os << "::CORBA::ValueBase *"; +} + +void +INArgTypeNameEmitter::traverse (Any&) +{ + os << "const ::CORBA::Any &"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::Array& a) +{ + os << "const " << a.scoped_name (); +} +void +INArgTypeNameEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name (); +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::Struct& s) +{ + os << "const " << s.scoped_name () << " &";; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::Union& u) +{ + os << "const " << u.scoped_name () << " &";; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s) +{ + os << "const " << s.scoped_name () << " &";; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s) +{ + os << "const " << s.scoped_name () << " &";; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::Interface& i) +{ + os << i.scoped_name () << "_ptr"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v) +{ + os << v.scoped_name () << " *"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::EventType& e) +{ + os << e.scoped_name () << " *"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::Component& c) +{ + os << c.scoped_name () << "_ptr"; +} + +void +INArgTypeNameEmitter::traverse (SemanticGraph::Home& h) +{ + os << h.scoped_name () << "_ptr"; +} + +// =============================================================== + +INOUTArgTypeNameEmitter::INOUTArgTypeNameEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +INOUTArgTypeNameEmitter::traverse (Boolean&) +{ + os << "::CORBA::Boolean &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Octet&) +{ + os << "::CORBA::Octet &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Char&) +{ + os << "::CORBA::Char &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Wchar&) +{ + os << "::CORBA::WChar &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Short&) +{ + os << "::CORBA::Short &"; +} + +void +INOUTArgTypeNameEmitter::traverse (UnsignedShort&) +{ + os << "::CORBA::UShort &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Long&) +{ + os << "::CORBA::Long &"; +} + +void +INOUTArgTypeNameEmitter::traverse (UnsignedLong&) +{ + os << "::CORBA::ULong &"; +} + +void +INOUTArgTypeNameEmitter::traverse (LongLong&) +{ + os << "::CORBA::LongLong &"; +} + +void +INOUTArgTypeNameEmitter::traverse (UnsignedLongLong&) +{ + os << "::CORBA::ULongLong &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Float&) +{ + os << "::CORBA::Float &"; +} + +void +INOUTArgTypeNameEmitter::traverse (Double&) +{ + os << "::CORBA::Double &"; +} + +void +INOUTArgTypeNameEmitter::traverse (String&) +{ + os << "char *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << "char *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (Wstring&) +{ + os << "::CORBA::WChar *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << "::CORBA::WChar *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (Object&) +{ + os << "::CORBA::Object_ptr &"; +} + +void +INOUTArgTypeNameEmitter::traverse (ValueBase&) +{ + os << "::CORBA::ValueBase *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (Any&) +{ + os << "::CORBA::Any &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Array& a) +{ + os << a.scoped_name (); +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name () << " &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Struct& s) +{ + os << s.scoped_name () << " &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Union& u) +{ + os << u.scoped_name () << " &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s) +{ + os << s.scoped_name () << " &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s) +{ + os << s.scoped_name () << " &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Interface& i) +{ + os << i.scoped_name () << "_ptr &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v) +{ + os << v.scoped_name () << " *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::EventType& e) +{ + os << e.scoped_name () << " *&"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Component& c) +{ + os << c.scoped_name () << "_ptr &"; +} + +void +INOUTArgTypeNameEmitter::traverse (SemanticGraph::Home& h) +{ + os << h.scoped_name () << "_ptr"; +} + +// ================================================================= + +OUTArgTypeNameEmitter::OUTArgTypeNameEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +OUTArgTypeNameEmitter::traverse (Boolean&) +{ + os << "::CORBA::Boolean_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Octet&) +{ + os << "::CORBA::Octet_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Char&) +{ + os << "::CORBA::Char_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Wchar&) +{ + os << "::CORBA::WChar_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Short&) +{ + os << "::CORBA::Short_out"; +} + +void +OUTArgTypeNameEmitter::traverse (UnsignedShort&) +{ + os << "::CORBA::UShort_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Long&) +{ + os << "::CORBA::Long_out"; +} + +void +OUTArgTypeNameEmitter::traverse (UnsignedLong&) +{ + os << "::CORBA::ULong_out"; +} + +void +OUTArgTypeNameEmitter::traverse (LongLong&) +{ + os << "::CORBA::LongLong_out"; +} + +void +OUTArgTypeNameEmitter::traverse (UnsignedLongLong&) +{ + os << "::CORBA::ULongLong_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Float&) +{ + os << "::CORBA::Float_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Double&) +{ + os << "::CORBA::Double_out"; +} + +void +OUTArgTypeNameEmitter::traverse (String&) +{ + os << "::CORBA::String_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedString& s) +{ + os << s.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Wstring&) +{ + os << "::CORBA::WString_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedWideString& s) +{ + os << s.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Object&) +{ + os << "::CORBA::Object_out"; +} + +void +OUTArgTypeNameEmitter::traverse (ValueBase&) +{ + os << "::CORBA::ValueBase_out"; +} + +void +OUTArgTypeNameEmitter::traverse (Any&) +{ + os << "::CORBA::Any_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Array& a) +{ + os << a.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Struct& s) +{ + os << s.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Union& u) +{ + os << u.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s) +{ + os << s.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s) +{ + os << s.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Interface& i) +{ + os << i.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v) +{ + os << v.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::EventType& e) +{ + os << e.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Component& c) +{ + os << c.scoped_name () << "_out"; +} + +void +OUTArgTypeNameEmitter::traverse (SemanticGraph::Home& h) +{ + os << h.scoped_name () << "_ptr"; +} + +// ==================================================================== + +NullReturnEmitter::NullReturnEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +NullReturnEmitter::traverse (Boolean&) +{ + os << "return false;"; +} + +void +NullReturnEmitter::traverse (Octet&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Char&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Wchar&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Short&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (UnsignedShort&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Long&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (UnsignedLong&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (LongLong&) +{ + os << "return ACE_CDR_LONGLONG_INITIALIZER;"; +} + +void +NullReturnEmitter::traverse (UnsignedLongLong&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Float&) +{ + os << "return 0.0f;"; +} + +void +NullReturnEmitter::traverse (Double&) +{ + os << "return 0.0;"; +} + +void +NullReturnEmitter::traverse (String&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Wstring&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Object&) +{ + os << "return ::CORBA::Object::_nil ();"; +} + +void +NullReturnEmitter::traverse (ValueBase&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (Any&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::Array&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name () << " retval;" << endl + << "return retval;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::Struct& s) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]); + + if (var_size) + { + os << "return 0;"; + } + else + { + os << s.scoped_name () << " retval;" << endl + << "return retval;"; + } +} + +void +NullReturnEmitter::traverse (SemanticGraph::Union& u) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]); + + if (var_size) + { + os << "return 0;"; + } + else + { + os << u.scoped_name () << " retval;" << endl + << "return retval;"; + } +} + +void +NullReturnEmitter::traverse (SemanticGraph::BoundedSequence&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::UnboundedSequence&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::Interface& i) +{ + os << "return " << i.scoped_name () << "::_nil ();"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::ValueType&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::EventType&) +{ + os << "return 0;"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::Component& c) +{ + os << "return " << c.scoped_name () << "::_nil ();"; +} + +void +NullReturnEmitter::traverse (SemanticGraph::Home& h) +{ + os << "return " << h.scoped_name () << "::_nil ();"; +} + +// ==================================================================== + +AceCheckReturnEmitter::AceCheckReturnEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +AceCheckReturnEmitter::traverse (Void&) +{ + os << "ACE_CHECK;"; +} + +void +AceCheckReturnEmitter::traverse (Boolean&) +{ + os << STRS[ACE_CR] << " (false);"; +} + +void +AceCheckReturnEmitter::traverse (Octet&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Char&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Wchar&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Short&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (UnsignedShort&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Long&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (UnsignedLong&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (LongLong&) +{ + os << STRS[ACE_CR] << " (ACE_CDR_LONGLONG_INITIALIZER);"; +} + +void +AceCheckReturnEmitter::traverse (UnsignedLongLong&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Float&) +{ + os << STRS[ACE_CR] << " (0.0f);"; +} + +void +AceCheckReturnEmitter::traverse (Double&) +{ + os << STRS[ACE_CR] << " (0.0);"; +} + +void +AceCheckReturnEmitter::traverse (String&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Wstring&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Object&) +{ + os << STRS[ACE_CR] << " (::CORBA::Object::_nil ());"; +} + +void +AceCheckReturnEmitter::traverse (ValueBase&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (Any&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Array&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name () << " retval;" + << STRS[ACE_UA] << " (retval);" + << STRS[ACE_CR] << " (retval);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Struct& s) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]); + + if (var_size) + { + os << STRS[ACE_CR] << " (0);"; + } + else + { + os << s.scoped_name () << " retval;" + << STRS[ACE_UA] << " (retval);" + << STRS[ACE_CR] << " (retval);"; + } +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Union& u) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]); + + if (var_size) + { + os << STRS[ACE_CR] << " (0);"; + } + else + { + os << u.scoped_name () << " retval;" + << STRS[ACE_UA] << " (retval);" + << STRS[ACE_CR] << " (retval);"; + } +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::BoundedSequence&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::UnboundedSequence&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Interface& i) +{ + os << STRS[ACE_CR] << " (" << i.scoped_name () << "::_nil ());"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::ValueType&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::EventType&) +{ + os << STRS[ACE_CR] << " (0);"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Component& c) +{ + os << STRS[ACE_CR] << " (" << c.scoped_name () << "::_nil ());"; +} + +void +AceCheckReturnEmitter::traverse (SemanticGraph::Home& h) +{ + os << STRS[ACE_CR] << " (" << h.scoped_name () << "::_nil ());"; +} + +// ==================================================================== +/* Not currently used, but it was at one time and may be useful again. + +NullRHSEmitter::NullRHSEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +NullRHSEmitter::traverse (Boolean&) +{ + os << "= false;"; +} + +void +NullRHSEmitter::traverse (Octet&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Char&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Wchar&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Short&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (UnsignedShort&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Long&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (UnsignedLong&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (LongLong&) +{ + os << "= ACE_CDR_LONGLONG_INITIALIZER;"; +} + +void +NullRHSEmitter::traverse (UnsignedLongLong&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Float&) +{ + os << "= 0.0f;"; +} + +void +NullRHSEmitter::traverse (Double&) +{ + os << "= 0.0;"; +} + +void +NullRHSEmitter::traverse (String&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Wstring&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Object&) +{ + os << "= ::CORBA::Object::_nil ();"; +} + +void +NullRHSEmitter::traverse (ValueBase&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (Any&) +{ + // This will hopefully work both if the lhs is a pointer (for example + // RetunrTypeNameEmitter) or not (for example INArgTypeNameEmitter). + os << ";"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::Array&) +{ + // This will hopefully work both if the lhs is a slice pointer (for example + // RetunrTypeNameEmitter) or not (for example INArgTypeNameEmitter). + os << ";"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::Enum&) +{ + os << ";"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::Struct& s) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]); + + if (var_size) + { + os << "= 0;"; + } + else + { + os << ";"; + } +} + +void +NullRHSEmitter::traverse (SemanticGraph::Union& u) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]); + + if (var_size) + { + os << "= 0;"; + } + else + { + os << ";"; + } +} + +void +NullRHSEmitter::traverse (SemanticGraph::BoundedSequence&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::UnboundedSequence&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::Interface& i) +{ + os << "= " << i.scoped_name () << "::_nil ();"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::ValueType&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::EventType&) +{ + os << "= 0;"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::Component& c) +{ + os << "= " << c.scoped_name () << "::_nil ();"; +} + +void +NullRHSEmitter::traverse (SemanticGraph::Home& h) +{ + os << "= " << h.scoped_name () << "::_nil ();"; +} +*/ +// ==================================================================== + +ExtractedTypeDeclEmitter::ExtractedTypeDeclEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +ExtractedTypeDeclEmitter::traverse (Boolean&) +{ + os << "::CORBA::Boolean " << STRS[EXTRACT_TMP] << " = false;" + << "::CORBA::Any::to_boolean " << STRS[EXTRACT] + << " (" << STRS[EXTRACT_TMP] << ");"; +} + +void +ExtractedTypeDeclEmitter::traverse (Octet&) +{ + os << "::CORBA::Octet " << STRS[EXTRACT_TMP] << " = 0;" + << "::CORBA::Any::to_octet " << STRS[EXTRACT] + << " (" << STRS[EXTRACT_TMP] << ");"; +} + +void +ExtractedTypeDeclEmitter::traverse (Char&) +{ + os << "::CORBA::Char " << STRS[EXTRACT_TMP] << " = 0;" + << "::CORBA::Any::to_char " << STRS[EXTRACT] + << " (" << STRS[EXTRACT_TMP] << ");"; +} + +void +ExtractedTypeDeclEmitter::traverse (Wchar&) +{ + os << "::CORBA::WChar " << STRS[EXTRACT_TMP] << " = 0;" + << "::CORBA::Any::to_wchar " << STRS[EXTRACT] + << " (" << STRS[EXTRACT_TMP] << ");"; +} + +void +ExtractedTypeDeclEmitter::traverse (Short&) +{ + os << "::CORBA::Short " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (UnsignedShort&) +{ + os << "::CORBA::UShort " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (Long&) +{ + os << "::CORBA::Long " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (UnsignedLong&) +{ + os << "::CORBA::ULong " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (LongLong&) +{ + os << "::CORBA::LongLong " << STRS[EXTRACT] + << " = ACE_CDR_LONGLONG_INITIALIZER;"; +} + +void +ExtractedTypeDeclEmitter::traverse (UnsignedLongLong&) +{ + os << "::CORBA::ULongLong " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (Float&) +{ + os << "::CORBA::Float " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (Double&) +{ + os << "::CORBA::Double " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (String&) +{ + os << "const char * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << "const char * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (Wstring&) +{ + os << "::CORBA::WChar * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << "::CORBA::WChar * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (Object&) +{ + os << "::CORBA::Object_ptr " << STRS[EXTRACT] + << " = ::CORBA::Object::_nil ();"; +} + +void +ExtractedTypeDeclEmitter::traverse (ValueBase&) +{ + os << "::CORBA::ValueBase * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (Any&) +{ + os << "::CORBA::Any * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Array& a) +{ + os << a.scoped_name () << "_forany & " << STRS[EXTRACT] << ";"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Enum& e) +{ + os << e.scoped_name () << " " << STRS[EXTRACT] << ";"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Struct& s) +{ + os << s.scoped_name () << " * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Union& u) +{ + os << u.scoped_name () << " * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::BoundedSequence& s) +{ + os << s.scoped_name () << " * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::UnboundedSequence& s) +{ + os << s.scoped_name () << " * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Interface& i) +{ + os << i.scoped_name () << "_ptr " << STRS[EXTRACT] << " = " + << i.scoped_name () << "::_nil ();"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::ValueType& v) +{ + os << v.scoped_name () << " * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::EventType& e) +{ + os << e.scoped_name () << " * " << STRS[EXTRACT] << " = 0;"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Component& c) +{ + os << c.scoped_name () << "_ptr " << STRS[EXTRACT] << " = " + << c.scoped_name () << "::_nil ();"; +} + +void +ExtractedTypeDeclEmitter::traverse (SemanticGraph::Home& h) +{ + os << h.scoped_name () << "_ptr " << STRS[EXTRACT] << " = " + << h.scoped_name () << "::_nil ();"; +} + +// ==================================================================== + +AssignFromExtractedEmitter::AssignFromExtractedEmitter (Context& c) + : CorbaTypeNameEmitter (c) +{ +} + +void +AssignFromExtractedEmitter::traverse (Boolean&) +{ + os << STRS[EXTRACT] << ".ref_"; +} + +void +AssignFromExtractedEmitter::traverse (Octet&) +{ + os << STRS[EXTRACT] << ".ref_"; +} + +void +AssignFromExtractedEmitter::traverse (Char&) +{ + os << STRS[EXTRACT] << ".ref_"; +} + +void +AssignFromExtractedEmitter::traverse (Wchar&) +{ + os << STRS[EXTRACT] << ".ref_"; +} + +void +AssignFromExtractedEmitter::traverse (Short&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (UnsignedShort&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (Long&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (UnsignedLong&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (LongLong&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (UnsignedLongLong&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (Float&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (Double&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (String&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::BoundedString&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (Wstring&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (Object&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (ValueBase&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (Any&) +{ + os << "*" << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Array&) +{ + os << STRS[EXTRACT] << ".in ()"; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Enum&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Struct& s) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]); + + if (!var_size) + { + os << "*"; + } + + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Union& u) +{ + // This should always be in the context, since the SizeTypeCalculator + // is executed before the servant code generators. + bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]); + + if (!var_size) + { + os << "*"; + } + + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::BoundedSequence&) +{ + os << "*" << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::UnboundedSequence&) +{ + os << "*" << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Interface&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::ValueType&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::EventType&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Component&) +{ + os << STRS[EXTRACT]; +} + +void +AssignFromExtractedEmitter::traverse (SemanticGraph::Home&) +{ + os << STRS[EXTRACT]; +} + +// ==================================================================== + +SetAttributeDelegationEmitter::SetAttributeDelegationEmitter ( + Context& c, + SemanticGraph::ReadWriteAttribute& a + ) + : CorbaTypeNameEmitter (c), + attr_ (a) + , assign_emitter_ (c) + , extract_emitter_ (c) +{ + assign_belongs_.node_traverser (assign_emitter_); + extract_belongs_.node_traverser (extract_emitter_); +} + +void +SetAttributeDelegationEmitter::traverse (Boolean&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Octet&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Char&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Wchar&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Short&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (UnsignedShort&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Long&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (UnsignedLong&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (LongLong&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (UnsignedLongLong&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Float&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (Double&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (String&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::BoundedString&) +{ + emit_error ("bounded string"); +} + +void +SetAttributeDelegationEmitter::traverse (Wstring&) +{ + emit_error ("wstring"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::BoundedWideString&) +{ + emit_error ("bounded wstring"); +} + +void +SetAttributeDelegationEmitter::traverse (Object&) +{ + emit_error ("CORBA::Object"); +} + +void +SetAttributeDelegationEmitter::traverse (ValueBase&) +{ + emit_error ("CORBA::ValueBase"); +} + +void +SetAttributeDelegationEmitter::traverse (Any&) +{ + emit_error ("CORBA::Any"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Array&) +{ + emit_error ("array"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Enum&) +{ + emit_delegation (); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Struct&) +{ + emit_error ("struct"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Union&) +{ + emit_error ("union"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::BoundedSequence&) +{ + emit_error ("bounded sequence"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::UnboundedSequence&) +{ + emit_error ("unbounded sequence"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Interface&) +{ + emit_error ("interface"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::ValueType&) +{ + emit_error ("valuetype"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::EventType&) +{ + emit_error ("eventtype"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Component&) +{ + emit_error ("component"); +} + +void +SetAttributeDelegationEmitter::traverse (SemanticGraph::Home&) +{ + emit_error ("home"); +} + +void +SetAttributeDelegationEmitter::emit_delegation (void) +{ + open_if_block (); + + Traversal::ReadWriteAttribute::belongs (attr_, extract_belongs_); + + os << "descr_value >>= " << STRS[EXTRACT] << ";" + << "this->" << attr_.name () << " ("; + + Traversal::ReadWriteAttribute::belongs (attr_, assign_belongs_); + + os << ");"; + + close_if_block (); +} + +void +SetAttributeDelegationEmitter::emit_error (const char *corba_kind) +{ + open_if_block (); + + os << "ACE_ERROR ((" << endl + << " LM_ERROR," << endl + << " \"Component attributes of " << corba_kind << "\"" << endl + << " \"IDL type are not yet supported by CIAO\\n\"" << endl + << " ));"; + + close_if_block (); +} + +void +SetAttributeDelegationEmitter::open_if_block (void) +{ + os << "if (ACE_OS::strcmp (descr_name, \"" + << attr_.name () << "\") == 0)" << endl + << "{"; +} + +void +SetAttributeDelegationEmitter::close_if_block (void) +{ + os << "continue;" + << "}"; +} diff --git a/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp new file mode 100644 index 00000000000..8a5a088f00c --- /dev/null +++ b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp @@ -0,0 +1,511 @@ +// file : CIDLC/FullTypeNameEmitter.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef TYPENAME_EMITTER_HPP +#define TYPENAME_EMITTER_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "EmitterBase.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +// Base class that holds the ostream member +// common to every other class in this file, +// and collects the ancestors in one place. +// +// Derived classes encapsulate the CORBA rules for +// the C++ mapping of different type kinds. +class CorbaTypeNameEmitter : public EmitterBase, + public Traversal::Void, + public Traversal::Boolean, + public Traversal::Octet, + public Traversal::Char, + public Traversal::Wchar, + public Traversal::Short, + public Traversal::UnsignedShort, + public Traversal::Long, + public Traversal::UnsignedLong, + public Traversal::LongLong, + public Traversal::UnsignedLongLong, + public Traversal::Float, + public Traversal::Double, + public Traversal::String, + public Traversal::BoundedString, + public Traversal::Wstring, + public Traversal::BoundedWideString, + public Traversal::Object, + public Traversal::ValueBase, + public Traversal::Any, + public Traversal::Array, + public Traversal::Enum, + public Traversal::Struct, + public Traversal::Union, + public Traversal::BoundedSequence, + public Traversal::UnboundedSequence, + public Traversal::Interface, + public Traversal::ValueType, + public Traversal::EventType, + public Traversal::Component, + public Traversal::Home +{ +public: + virtual void traverse (Void&); + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); + +protected: + CorbaTypeNameEmitter (Context&); +}; + +// Generates the name of an operation's return type. +// +// +class ReturnTypeNameEmitter : public CorbaTypeNameEmitter +{ +public: + ReturnTypeNameEmitter (Context&); + + virtual void traverse (Void&); + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +// Generates the typename of an IN argument. +// +// +class INArgTypeNameEmitter : public CorbaTypeNameEmitter +{ +public: + INArgTypeNameEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +// Generates the typename of an INOUT argument. +// +// +class INOUTArgTypeNameEmitter : public CorbaTypeNameEmitter +{ +public: + INOUTArgTypeNameEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +// Generates the typename of an OUT argument. +// +// +class OUTArgTypeNameEmitter : public CorbaTypeNameEmitter +{ +public: + OUTArgTypeNameEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +// Generates 'return' plus the appropriate NULL return value, +// including no output for Void. +// +// +class NullReturnEmitter : public CorbaTypeNameEmitter +{ +public: + NullReturnEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +// Generates 'return' plus the appropriate NULL return value, +// including no output for Void. +// +// +class AceCheckReturnEmitter : public CorbaTypeNameEmitter +{ +public: + AceCheckReturnEmitter (Context&); + + virtual void traverse (Void&); + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +/* Not currently used, but it was at one time and may be useful again. + +// Generates the appropriate NULL value, including the assignment operator, +// if needed, for the rhs of an assignment statement. +// +// +class NullRHSEmitter : public CorbaTypeNameEmitter +{ +public: + NullRHSEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; +*/ +// Declares and initializes a variable to use for any extraction. +// +// +class ExtractedTypeDeclEmitter : public CorbaTypeNameEmitter +{ +public: + ExtractedTypeDeclEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +// Declares and initializes a variable to use for any extraction. +// +// +class AssignFromExtractedEmitter : public CorbaTypeNameEmitter +{ +public: + AssignFromExtractedEmitter (Context&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); +}; + +class SetAttributeDelegationEmitter : public CorbaTypeNameEmitter, + public Traversal::ReadWriteAttribute +{ +public: + SetAttributeDelegationEmitter (Context&, + SemanticGraph::ReadWriteAttribute&); + + virtual void traverse (Boolean&); + virtual void traverse (Octet&); + virtual void traverse (Char&); + virtual void traverse (Wchar&); + virtual void traverse (Short&); + virtual void traverse (UnsignedShort&); + virtual void traverse (Long&); + virtual void traverse (UnsignedLong&); + virtual void traverse (LongLong&); + virtual void traverse (UnsignedLongLong&); + virtual void traverse (Float&); + virtual void traverse (Double&); + virtual void traverse (String&); + virtual void traverse (SemanticGraph::BoundedString&); + virtual void traverse (Wstring&); + virtual void traverse (SemanticGraph::BoundedWideString&); + virtual void traverse (Object&); + virtual void traverse (ValueBase&); + virtual void traverse (Any&); + virtual void traverse (SemanticGraph::Array&); + virtual void traverse (SemanticGraph::Enum&); + virtual void traverse (SemanticGraph::Struct&); + virtual void traverse (SemanticGraph::Union&); + virtual void traverse (SemanticGraph::BoundedSequence&); + virtual void traverse (SemanticGraph::UnboundedSequence&); + virtual void traverse (SemanticGraph::Interface&); + virtual void traverse (SemanticGraph::ValueType&); + virtual void traverse (SemanticGraph::EventType&); + virtual void traverse (SemanticGraph::Component&); + virtual void traverse (SemanticGraph::Home&); + +private: + void emit_delegation (void); + void emit_error (const char *); + void open_if_block (void); + void close_if_block (void); + +private: + SemanticGraph::ReadWriteAttribute& attr_; + AssignFromExtractedEmitter assign_emitter_; + ExtractedTypeDeclEmitter extract_emitter_; + Traversal::Belongs assign_belongs_; + Traversal::Belongs extract_belongs_; +}; + +#endif /* TYPENAME_EMITTER_HPP */ diff --git a/TAO/CIAO/CIDLC/DescriptorGenerator.cpp b/TAO/CIAO/CIDLC/DescriptorGenerator.cpp index 7b5b41933c2..e93896c91d7 100644 --- a/TAO/CIAO/CIDLC/DescriptorGenerator.cpp +++ b/TAO/CIAO/CIDLC/DescriptorGenerator.cpp @@ -285,9 +285,9 @@ namespace << "</publishes>" << endl; } - struct TypeNameEmitter : Traversal::Type, EmitterBase + struct FullTypeNameEmitter : Traversal::Type, EmitterBase { - TypeNameEmitter (fs::ofstream& ofs) + FullTypeNameEmitter (fs::ofstream& ofs) : EmitterBase (ofs) {} @@ -301,7 +301,7 @@ namespace }; private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; unsigned long facettag_; Traversal::Belongs belongs_; }; diff --git a/TAO/CIAO/CIDLC/EmitterBase.cpp b/TAO/CIAO/CIDLC/EmitterBase.cpp new file mode 100644 index 00000000000..418db97852a --- /dev/null +++ b/TAO/CIAO/CIDLC/EmitterBase.cpp @@ -0,0 +1,11 @@ +// file : CIDLC/EmitterBase.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "EmitterBase.hpp" + +EmitterBase::EmitterBase (Context& c) + : ctx (c), + os (ctx.os ()) +{ +} diff --git a/TAO/CIAO/CIDLC/EmitterBase.hpp b/TAO/CIAO/CIDLC/EmitterBase.hpp new file mode 100644 index 00000000000..407eee8d0e0 --- /dev/null +++ b/TAO/CIAO/CIDLC/EmitterBase.hpp @@ -0,0 +1,20 @@ +// file : CIDLC/EmitterBase.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef EMITTERBASE_HPP +#define EMITTERBASE_HPP + +#include "EmitterContext.hpp" + +class EmitterBase +{ +public: + EmitterBase (Context&); + +protected: + Context& ctx; + ostream& os; +}; + +#endif // EMITTERBASE_HPP diff --git a/TAO/CIAO/CIDLC/EmitterContext.cpp b/TAO/CIAO/CIDLC/EmitterContext.cpp new file mode 100644 index 00000000000..478ae5d0027 --- /dev/null +++ b/TAO/CIAO/CIDLC/EmitterContext.cpp @@ -0,0 +1,45 @@ +// file : CIDLC/EmitterContext.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "EmitterContext.hpp" + +Context::Context (ostream& os, + string export_macro, + CommandLine const& cl) + : os_ (os), + export_macro_ (export_macro), + cl_ (cl) +{ +} + +ostream& +Context::os (void) +{ + return os_; +} + +string +Context::export_macro (void) +{ + return export_macro_; +} + +CommandLine const& +Context::cl (void) +{ + return cl_; +} + +string +Context::composition_name (void) +{ + return composition_name_; +} + +void +Context::composition_name (const string& name) +{ + composition_name_ = name; +} + diff --git a/TAO/CIAO/CIDLC/EmitterContext.hpp b/TAO/CIAO/CIDLC/EmitterContext.hpp new file mode 100644 index 00000000000..bec5e74f91d --- /dev/null +++ b/TAO/CIAO/CIDLC/EmitterContext.hpp @@ -0,0 +1,35 @@ +// file : CIDLC/EmitterContext.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef EMITTERCONTEXT_HPP +#define EMITTERCONTEXT_HPP + +#include "CCF/CodeGenerationKit/CommandLine.hpp" + +#include <ostream> +#include <string> + +using namespace std; + +class Context +{ +public: + Context (ostream& os, + string export_macro, + CommandLine const& cl); + + ostream& os (void); + string export_macro (void); + CommandLine const& cl (void); + string composition_name (void); + void composition_name (const string& name); + +private: + ostream& os_; + string export_macro_; + CommandLine const& cl_; + string composition_name_; +}; + +#endif // EMITTERCONTEXT_HPP diff --git a/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp index 66d1d4abcd2..30c6ae09566 100644 --- a/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp +++ b/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp @@ -3,8 +3,16 @@ // cvs-id : $Id$ #include "ExecImplHeaderGenerator.hpp" -#include "TypeNameEmitter.hpp" +#include "CorbaTypeNameEmitters.hpp" +#include "UtilityTypeNameEmitters.hpp" +#include "AttributeHeaderEmitters.hpp" +#include "OperationHeaderEmitters.hpp" +#include "ParameterEmitter_T.hpp" +#include "CompositionEmitter.hpp" +#include "ModuleEmitter.hpp" +#include "InterfaceEmitter.hpp" #include "Literals.hpp" +#include "Upcase.hpp" #include <ostream> @@ -18,351 +26,6 @@ using namespace CCF::CIDL::SemanticGraph; namespace { - // On some platforms toupper can be something other than a - // function. - int - upcase (int c) - { - return std::toupper (c); - } -} - -namespace -{ - class Context - { - public: - Context (std::ostream& os, - string export_macro) - : os_ (os), - export_macro_ (export_macro) - { - } - - std::ostream& - os () - { - return os_; - } - - string - export_macro () - { - return export_macro_; - } - - private: - std::ostream& os_; - string export_macro_; - }; - - class EmitterBase - { - public: - EmitterBase (Context& c) - : ctx (c), - os (ctx.os ()) - { - } - - protected: - Context& ctx; - std::ostream& os; - }; - - struct ModuleEmitter : Traversal::Module, EmitterBase - { - ModuleEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - os << "namespace " << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; - - struct CompositionEmitter : Traversal::Composition, EmitterBase - { - CompositionEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - os << STRS[CIDL_NS] << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; - - struct OperationEmitter : Traversal::Operation, EmitterBase - { - OperationEmitter (Context& c) - : EmitterBase (c) - {} - - virtual void - pre (Type&) - { - os << "virtual "; - } - - virtual void - name (Type& o) - { - os << endl << o.name (); - } - - virtual void - receives_pre (Type&) - { - os << " (" << endl; - } - - virtual void - receives_none (Type&) - { - os << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - receives_post (Type&) - { - os << endl << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - raises_pre (Type&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - raises_none (Type&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - raises_post (Type&) - { - os << "))"; - } - - virtual void - post (Type&) - { - os << ";" << endl; - } - - virtual void - comma (Type&) - { - os << "," << endl; - } - }; - - // For generating parameter names. - template <typename T> - struct ParameterEmitter : T - { - ParameterEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - name (typename T::Type& p) - { - os << " " << p.name (); - } - - private: - std::ostream& os; - }; - - // Generic scoped typename emitter used by various other emitters. - struct TypeNameEmitter : Traversal::Type - { - TypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name (); - } - - private: - std::ostream& os; - }; - - // Generic local typename emitter used by various other emitters. - struct SimpleTypeNameEmitter : Traversal::Type - { - SimpleTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.name (); - } - - private: - std::ostream& os; - }; - - // Generate name of type's enclosing scope. - struct EnclosingTypeNameEmitter : Traversal::Type - { - EnclosingTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name ().scope_name (); - } - - private: - std::ostream& os; - }; - - // Emits typename minus the leading double colon. - struct StrippedTypeNameEmitter : Traversal::Type - { - StrippedTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - ScopedName scoped (t.scoped_name ()); - os << Name (scoped.begin () + 1, scoped.end ()); - } - - private: - std::ostream& os; - }; - - // Generates operations associated with attributes. - // @@@ (JP) Need to support exceptions. - struct AttributeEmitter : Traversal::ReadWriteAttribute, - EmitterBase - { - AttributeEmitter (Context& c) - : EmitterBase (c), - write_type_name_emitter_ (c.os ()), - read_type_name_emitter_ (c.os ()) - { - write_belongs_.node_traverser (write_type_name_emitter_); - read_belongs_.node_traverser (read_type_name_emitter_); - } - - virtual void traverse (SemanticGraph::ReadWriteAttribute& a) - { - os << "virtual "; - - Traversal::ReadWriteAttribute::belongs (a, read_belongs_); - - os << endl - << a.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; - - os << "virtual void" << endl - << a.name () << " (" << endl; - - Traversal::ReadWriteAttribute::belongs (a, write_belongs_); - - os << endl - << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; - } - - private: - INArgTypeNameEmitter write_type_name_emitter_; - ReturnTypeNameEmitter read_type_name_emitter_; - Traversal::Belongs write_belongs_; - Traversal::Belongs read_belongs_; - }; - - // Generates operations associated with readonly attributes. - // @@@ (JP) Need to support exceptions. - struct ReadOnlyAttributeEmitter : Traversal::ReadAttribute, - EmitterBase - { - ReadOnlyAttributeEmitter (Context& c) - : EmitterBase (c), - read_type_name_emitter_ (c.os ()) - { - read_belongs_.node_traverser (read_type_name_emitter_); - } - - virtual void traverse (SemanticGraph::ReadAttribute& a) - { - os << "virtual "; - - Traversal::ReadAttribute::belongs (a, read_belongs_); - - os << endl - << a.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; - } - - private: - ReturnTypeNameEmitter read_type_name_emitter_; - Traversal::Belongs read_belongs_; - }; - - struct InterfaceEmitter : Traversal::UnconstrainedInterface, - EmitterBase - { - InterfaceEmitter (Context& c) - : EmitterBase (c) - {} - - bool - add (UnconstrainedInterface& i) - { - return interfaces_.insert (&i).second; - } - - virtual void - traverse (UnconstrainedInterface& i) - { - if (add (i)) - { - Traversal::UnconstrainedInterface::traverse (i); - } - } - - private: - std::set<UnconstrainedInterface*> interfaces_; - }; - struct FacetEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -378,9 +41,9 @@ namespace os << "class " << ctx.export_macro () << " " << i.name () << "_exec_i" << endl - << ": public virtual " << i.scoped_name ().scope_name () + << " : public virtual " << i.scoped_name ().scope_name () << "::CCM_" << i.name () << "," << endl - << "public virtual TAO_Local_RefCounted_Object" << endl + << " public virtual TAO_Local_RefCounted_Object" << endl << "{" << "public:" << endl << i.name () << "_exec_i (void);" @@ -395,10 +58,8 @@ namespace interface_emitter.edge_traverser (defines_); interface_emitter.edge_traverser (inherits_); - AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines_.node_traverser (attribute_emitter); - defines_.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines_.node_traverser (operation_emitter); @@ -411,15 +72,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -428,9 +89,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -451,9 +112,9 @@ namespace { ExecPortsEmitter (Context& c) : EmitterBase (c), - enclosing_type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()) + enclosing_type_name_emitter_ (c), + simple_type_name_emitter_ (c), + type_name_emitter_ (c) { enclosing_belongs_.node_traverser (enclosing_type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); @@ -472,31 +133,28 @@ namespace Traversal::ProviderData::belongs (p, simple_belongs_); os << "_ptr" << endl - << "get_" << p.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << "get_" << p.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; } virtual void traverse (SemanticGraph::Consumer& c) { - // @@@ (JP) May need to generate this for the eventtype's ancestors - // as well (the spec is vague on this point). If so, we need the - // CIDL compiler to support valuetype/eventtype inheritance. os << "virtual void" << endl - << "push_" << c.name () << " (" << endl; + << "push_" << c.name () << " (" << endl; Traversal::ConsumerData::belongs (c, belongs_); os << " *ev" << endl - << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[ENV_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; } private: EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs enclosing_belongs_; Traversal::Belongs simple_belongs_; Traversal::Belongs belongs_; @@ -538,8 +196,8 @@ namespace os << "class " << ctx.export_macro () << " " << t.name () << "_exec_i" << endl - << ": public virtual " << exec_.name () << "," << endl - << "public virtual TAO_Local_RefCounted_Object" << endl + << " : public virtual " << exec_.name () << "," << endl + << " public virtual TAO_Local_RefCounted_Object" << endl << "{" << "public:" << endl << t.name () << "_exec_i (void);" @@ -564,10 +222,8 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines.node_traverser (operation_emitter); @@ -580,15 +236,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -597,9 +253,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -620,10 +276,8 @@ namespace Traversal::Defines defines; component_emitter.edge_traverser (defines); - AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); component_emitter.traverse (t); } @@ -727,185 +381,6 @@ namespace } }; - // 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 want to generate - // base class factory operations returning the base component, - // for example), we use this class for regular home operations - // that overrides HomeFactory and HomeFinder traversals - // to do nothing. - struct HomeOperationEmitter : OperationEmitter, - Traversal::HomeFactory, - Traversal::HomeFinder - { - HomeOperationEmitter (Context& c) - : OperationEmitter (c) - {} - - virtual void - traverse (SemanticGraph::HomeFactory&) - { - } - - virtual void - traverse (SemanticGraph::HomeFinder&) - { - } - }; - - struct FactoryOperationEmitter : Traversal::HomeFactory, - Traversal::Home, - EmitterBase - { - FactoryOperationEmitter (Context& c) - : EmitterBase (c) - {} - - virtual void - pre (SemanticGraph::HomeFactory&) - { - os << "virtual "; - } - - virtual void - returns (SemanticGraph::HomeFactory&) - { - os << STRS[COMP_EC] << "_ptr" << endl; - } - - virtual void - name (SemanticGraph::HomeFactory& hf) - { - os << hf.name (); - } - - virtual void - receives_none (SemanticGraph::HomeFactory&) - { - os << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - receives_pre (SemanticGraph::HomeFactory&) - { - os << " (" << endl; - } - - virtual void - receives_post (SemanticGraph::HomeFactory&) - { - os << endl << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - raises_none (SemanticGraph::HomeFactory&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - raises_pre (SemanticGraph::HomeFactory&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - raises_post (SemanticGraph::HomeFactory&) - { - os << "))"; - } - - virtual void - post (SemanticGraph::HomeFactory&) - { - os << ";" << endl; - } - - virtual void - comma (SemanticGraph::HomeFactory&) - { - os << "," << endl; - } - }; - - struct FinderOperationEmitter : Traversal::HomeFinder, - EmitterBase - { - FinderOperationEmitter (Context& c) - : EmitterBase (c) - {} - - virtual void - pre (SemanticGraph::HomeFinder&) - { - os << "virtual "; - } - - virtual void - returns (SemanticGraph::HomeFinder&) - { - os << STRS[COMP_EC] << "_ptr" << endl; - } - - virtual void - name (SemanticGraph::HomeFinder& t) - { - os << t.name (); - } - - virtual void - receives_none (SemanticGraph::HomeFinder&) - { - os << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - receives_pre (SemanticGraph::HomeFinder&) - { - os << " (" << endl; - } - - virtual void - receives_post (SemanticGraph::HomeFinder&) - { - os << endl << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - raises_none (SemanticGraph::HomeFinder&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - raises_pre (SemanticGraph::HomeFinder&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - raises_post (SemanticGraph::HomeFinder&) - { - os << "))"; - } - - virtual void - post (SemanticGraph::HomeFinder&) - { - os << ";" << endl << endl; - } - - virtual void - comma (SemanticGraph::HomeFinder&) - { - os << "," << endl; - } - }; - struct HomeExecImplEmitter : Traversal::Home, EmitterBase { HomeExecImplEmitter (Context& c, HomeExecutor& exec) @@ -919,8 +394,8 @@ namespace { os << "class " << ctx.export_macro () << " " << t.name () << "_exec_i" << endl - << ": public virtual " << exec_.name () << "," << endl - << "public virtual TAO_Local_RefCounted_Object" << endl + << " : public virtual " << exec_.name () << "," << endl + << " public virtual TAO_Local_RefCounted_Object" << endl << "{" << "public:" << endl << t.name () << "_exec_i (void);" @@ -945,10 +420,8 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines.node_traverser (operation_emitter); @@ -961,15 +434,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -978,9 +451,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1010,15 +483,15 @@ namespace home_operation_emitter.edge_traverser (returns); home_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1027,9 +500,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1052,8 +525,9 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - FactoryOperationEmitter factory_operation_emitter (ctx); - FinderOperationEmitter finder_operation_emitter (ctx); + bool for_exec = true; + FactoryOperationEmitter factory_operation_emitter (ctx, for_exec); + FinderOperationEmitter finder_operation_emitter (ctx, for_exec); defines.node_traverser (factory_operation_emitter); defines.node_traverser (finder_operation_emitter); @@ -1067,15 +541,15 @@ namespace finder_operation_emitter.edge_traverser (returns); finder_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1084,9 +558,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1107,10 +581,8 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); home_emitter.traverse (t); } @@ -1248,7 +720,7 @@ ExecImplHeaderEmitter::generate (TranslationUnit& u) { pre (u); - Context c (os, export_macro_); + Context c (os, export_macro_, cl_); Traversal::TranslationUnit unit; diff --git a/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp b/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp index 5bbd50fb84b..34bb6866061 100644 --- a/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp +++ b/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp @@ -3,100 +3,25 @@ // cvs-id : $Id$ #include "ExecImplSourceGenerator.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 "TypeNameEmitter.hpp" - -#include "CCF/CodeGenerationKit/Regex.hpp" #include <ostream> +#include "CCF/CodeGenerationKit/Regex.hpp" + using namespace CCF::CIDL; using namespace CCF::CIDL::SemanticGraph; using namespace StringLiterals; namespace { - class Context - { - public: - Context (std::ostream& os, - string export_macro) - : os_ (os), - export_macro_ (export_macro) - { - } - - std::ostream& - os () - { - return os_; - } - - string - export_macro () - { - return export_macro_; - } - - private: - std::ostream& os_; - string export_macro_; - }; - - class EmitterBase - { - public: - EmitterBase (Context& c) - : ctx (c), - os (ctx.os ()) - { - } - - protected: - Context& ctx; - std::ostream& os; - }; - - struct ModuleEmitter : Traversal::Module, EmitterBase - { - ModuleEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - os << "namespace " << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; - - struct CompositionEmitter : Traversal::Composition, EmitterBase - { - CompositionEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - os << STRS[CIDL_NS] << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; - template <typename T> struct OperationEmitter : Traversal::Operation, EmitterBase { @@ -134,7 +59,7 @@ namespace virtual void raises_pre (Type&) { - os << STRS[EXCP_START] << endl + os << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl; } @@ -161,7 +86,7 @@ namespace Traversal::Belongs returns; operation_emitter.edge_traverser (returns); - NullReturnEmitter return_emitter (os); + NullReturnEmitter return_emitter (ctx); returns.node_traverser (return_emitter); operation_emitter.traverse (o); @@ -179,222 +104,6 @@ namespace T& scope_; }; - // For generating parameter names. - template <typename T> - struct ParameterEmitter : T - { - ParameterEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - name (typename T::Type& p) - { - os << " /* " << p.name () << " */"; - } - - private: - std::ostream& os; - }; - - // Generic scoped typename emitter used by various other emitters. - struct TypeNameEmitter : Traversal::Type - { - TypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name (); - } - - private: - std::ostream& os; - }; - - // Generic local typename emitter used by various other emitters. - struct SimpleTypeNameEmitter : Traversal::Type - { - SimpleTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.name (); - } - - private: - std::ostream& os; - }; - - // Generate name of type's enclosing scope. - struct EnclosingTypeNameEmitter : Traversal::Type - { - EnclosingTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name ().scope_name (); - } - - private: - std::ostream& os; - }; - - // Emits typename minus the leading double colon. - struct StrippedTypeNameEmitter : Traversal::Type - { - StrippedTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - ScopedName scoped (t.scoped_name ()); - os << Name (scoped.begin () + 1, scoped.end ()); - } - - private: - std::ostream& os; - }; - - // Generates operations associated with attributes. - // @@@ (JP) Need to support exceptions. - template <typename T> - struct AttributeEmitter : Traversal::ReadWriteAttribute, - EmitterBase - { - AttributeEmitter (Context& c, T& scope) - : EmitterBase (c), - scope_ (scope), - write_type_name_emitter_ (c.os ()), - read_type_name_emitter_ (c.os ()), - return_emitter_ (c.os ()) - { - write_belongs_.node_traverser (write_type_name_emitter_); - read_belongs_.node_traverser (read_type_name_emitter_); - return_belongs_.node_traverser (return_emitter_); - } - - virtual void traverse (SemanticGraph::ReadWriteAttribute& a) - { - Traversal::ReadWriteAttribute::belongs (a, read_belongs_); - - os << endl - << scope_.name () << "_exec_i::" << a.name () - << " (" << endl - << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_SNGL] << endl - << "{" - << STRS[YCH] << endl; - - Traversal::ReadWriteAttribute::belongs (a, return_belongs_); - - os << "}"; - - os << "void" << endl - << scope_.name () << "_exec_i::" << a.name () - << " (" << endl; - - Traversal::ReadWriteAttribute::belongs (a, write_belongs_); - - os << " /* " << a.name () << " */" << endl - << STRS[ENV_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_SNGL] << endl - << "{" - << STRS[YCH] - << "}"; - } - - protected: - T& scope_; - - private: - INArgTypeNameEmitter write_type_name_emitter_; - ReturnTypeNameEmitter read_type_name_emitter_; - NullReturnEmitter return_emitter_; - Traversal::Belongs write_belongs_; - Traversal::Belongs read_belongs_; - Traversal::Belongs return_belongs_; - }; - - // Generates operations associated with readonly attributes. - // @@@ (JP) Need to support exceptions. - template <typename T> - struct ReadOnlyAttributeEmitter : Traversal::ReadAttribute, - EmitterBase - { - ReadOnlyAttributeEmitter (Context& c, T& scope) - : EmitterBase (c), - scope_ (scope), - read_type_name_emitter_ (c.os ()), - return_emitter_ (c.os ()) - { - read_belongs_.node_traverser (read_type_name_emitter_); - return_belongs_.node_traverser (return_emitter_); - } - - virtual void traverse (SemanticGraph::ReadAttribute& a) - { - Traversal::ReadAttribute::belongs (a, read_belongs_); - - os << endl - << scope_.name () << "_exec_i::" << a.name () - << " (" << endl - << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_SNGL] << endl - << "{" - << STRS[YCH] << endl; - - Traversal::ReadAttribute::belongs (a, return_belongs_); - - os << "}"; - } - - protected: - T& scope_; - - private: - ReturnTypeNameEmitter read_type_name_emitter_; - NullReturnEmitter return_emitter_; - Traversal::Belongs read_belongs_; - Traversal::Belongs return_belongs_; - }; - - struct InterfaceEmitter : Traversal::UnconstrainedInterface, - EmitterBase - { - InterfaceEmitter (Context& c) - : EmitterBase (c) - {} - - bool - add (UnconstrainedInterface& i) - { - return interfaces_.insert (&i).second; - } - - virtual void - traverse (UnconstrainedInterface& i) - { - if (add (i)) - { - Traversal::UnconstrainedInterface::traverse (i); - } - } - - private: - std::set<UnconstrainedInterface*> interfaces_; - }; - struct FacetEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -431,10 +140,13 @@ namespace interface_emitter.edge_traverser (defines_); interface_emitter.edge_traverser (inherits_); - AttributeEmitter<UnconstrainedInterface> attribute_emitter (ctx, i); - ReadOnlyAttributeEmitter<UnconstrainedInterface> read_only_attribute_emitter (ctx, i); + bool exec_src = true; + AttributeSourceEmitter<UnconstrainedInterface> attribute_emitter ( + ctx, + i, + exec_src + ); defines_.node_traverser (attribute_emitter); - defines_.node_traverser (read_only_attribute_emitter); OperationEmitter<UnconstrainedInterface> operation_emitter (ctx, i); defines_.node_traverser (operation_emitter); @@ -447,15 +159,25 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + bool for_exec_src = true; + ParameterEmitter<Traversal::InParameter> in_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::InOutParameter> inout_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::OutParameter> out_param ( + ctx, + for_exec_src + ); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -464,9 +186,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -485,9 +207,9 @@ namespace { ExecPortsEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - enclosing_type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()), + enclosing_type_name_emitter_ (c), + simple_type_name_emitter_ (c), + type_name_emitter_ (c), scope_ (scope) { enclosing_belongs_.node_traverser (enclosing_type_name_emitter_); @@ -526,9 +248,6 @@ namespace virtual void traverse (SemanticGraph::Consumer& c) { - // @@@ (JP) May need to generate this for the eventtype's ancestors - // as well (the spec is vague on this point). If so, we need the - // CIDL compiler to support valuetype/eventtype inheritance. os << "void" << endl << scope_.name () << "_exec_i::push_" << c.name () << " (" << endl; @@ -546,7 +265,7 @@ namespace private: EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs enclosing_belongs_; Traversal::Belongs simple_belongs_; Traversal::Belongs belongs_; @@ -619,10 +338,13 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); - ReadOnlyAttributeEmitter<SemanticGraph::Component> read_only_attribute_emitter (ctx, t); + bool exec_src = true; + AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter ( + ctx, + t, + exec_src + ); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); OperationEmitter<SemanticGraph::Component> operation_emitter (ctx, t); defines.node_traverser (operation_emitter); @@ -635,15 +357,25 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + bool for_exec_src = true; + ParameterEmitter<Traversal::InParameter> in_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::InOutParameter> inout_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::OutParameter> out_param ( + ctx, + for_exec_src + ); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -652,9 +384,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -675,10 +407,13 @@ namespace Traversal::Defines defines; component_emitter.edge_traverser (defines); - AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); - ReadOnlyAttributeEmitter<SemanticGraph::Component> read_only_attribute_emitter (ctx, t); + bool exec_src = true; + AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter ( + ctx, + t, + exec_src + ); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); component_emitter.traverse (t); } @@ -708,26 +443,26 @@ namespace << t.name () << "_exec_i::set_session_context (" << endl << STRS[COMP_SC] << "_ptr ctx" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" << "this->context_ =" << endl - << t.name () << "_Context::_narrow (" << endl - << "ctx" << endl - << STRS[ENV_ARG] <<");" + << " " << t.name () << "_Context::_narrow (" << endl + << " ctx" << endl + << " " << STRS[ENV_ARG] <<");" << "ACE_CHECK;" << endl; os << "if (this->context_ == 0)" << endl << "{" - << "ACE_THROW (CORBA::INTERNAL ());" + << "ACE_THROW ( ::CORBA::INTERNAL ());" << "}" << "}"; os << "void" << endl << t.name () << "_exec_i::ciao_preactivate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -737,7 +472,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ciao_postactivate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -747,7 +482,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ccm_activate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -757,7 +492,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ccm_passivate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -767,7 +502,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ccm_remove (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -812,8 +547,8 @@ namespace { FactoryOperationEmitter (Context& c, SemanticGraph::Home& scope) : EmitterBase (c), - enclosing_type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), + enclosing_type_name_emitter_ (c), + simple_type_name_emitter_ (c), scope_ (scope) { enclosing_returns_.node_traverser (enclosing_type_name_emitter_); @@ -860,7 +595,7 @@ namespace virtual void raises_pre (SemanticGraph::HomeFactory&) { - os << STRS[EXCP_START] << endl + os << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl; } @@ -906,8 +641,8 @@ namespace { FinderOperationEmitter (Context& c, SemanticGraph::Home& scope) : EmitterBase (c), - enclosing_type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), + enclosing_type_name_emitter_ (c), + simple_type_name_emitter_ (c), scope_ (scope) { enclosing_returns_.node_traverser (enclosing_type_name_emitter_); @@ -954,7 +689,7 @@ namespace virtual void raises_pre (SemanticGraph::HomeFinder&) { - os << STRS[EXCP_START] << endl + os << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl; } @@ -1038,10 +773,13 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); - ReadOnlyAttributeEmitter<SemanticGraph::Home> read_only_attribute_emitter (ctx, t); + bool exec_src = true; + AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter ( + ctx, + t, + exec_src + ); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); OperationEmitter<SemanticGraph::Home> operation_emitter (ctx, t); defines.node_traverser (operation_emitter); @@ -1054,15 +792,25 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + bool for_exec_src = true; + ParameterEmitter<Traversal::InParameter> in_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::InOutParameter> inout_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::OutParameter> out_param ( + ctx, + for_exec_src + ); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1071,9 +819,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1103,15 +851,25 @@ namespace home_operation_emitter.edge_traverser (returns); home_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + bool for_exec_src = true; + ParameterEmitter<Traversal::InParameter> in_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::InOutParameter> inout_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::OutParameter> out_param ( + ctx, + for_exec_src + ); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1120,9 +878,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1160,15 +918,25 @@ namespace finder_operation_emitter.edge_traverser (returns); finder_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + bool for_exec_src = true; + ParameterEmitter<Traversal::InParameter> in_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::InOutParameter> inout_param ( + ctx, + for_exec_src + ); + ParameterEmitter<Traversal::OutParameter> out_param ( + ctx, + for_exec_src + ); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1177,9 +945,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1200,10 +968,13 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); - ReadOnlyAttributeEmitter<SemanticGraph::Home> read_only_attribute_emitter (ctx, t); + bool exec_src = true; + AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter ( + ctx, + t, + exec_src + ); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); home_emitter.traverse (t); } @@ -1212,12 +983,12 @@ namespace << STRS[COMP_EC] << "_ptr" << endl << t.name () << "_exec_i::create (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" << STRS[COMP_EC] << "_ptr retval =" << endl - << STRS[COMP_EC] << "::_nil ();" << endl + << " " << STRS[COMP_EC] << "::_nil ();" << endl << "ACE_NEW_THROW_EX (" << endl << "retval," << endl; @@ -1226,13 +997,13 @@ namespace Traversal::Manages manages_; home_emitter.edge_traverser (manages_); - SimpleTypeNameEmitter manages_emitter (os); + SimpleTypeNameEmitter manages_emitter (ctx); manages_.node_traverser (manages_emitter); home_emitter.traverse (t); os << "_exec_i," << endl - << "CORBA::NO_MEMORY ());" + << "::CORBA::NO_MEMORY ());" << STRS[ACE_CR] << " (" << STRS[COMP_EC] << "::_nil ());" << endl << "return retval;" @@ -1249,7 +1020,7 @@ namespace << "_Impl (void)" << endl << "{" << "::Components::HomeExecutorBase_ptr retval =" << endl - << "::Components::HomeExecutorBase::_nil ();" << endl + << " ::Components::HomeExecutorBase::_nil ();" << endl << "ACE_NEW_RETURN (" << endl << "retval," << endl << t.name () << "_exec_i," << endl @@ -1299,7 +1070,7 @@ ExecImplSourceEmitter::generate (TranslationUnit& u) { pre (u); - Context c (os, export_macro_); + Context c (os, export_macro_, cl_); Traversal::TranslationUnit unit; diff --git a/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp b/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp index 46106c5572a..ca62ef3d3a2 100644 --- a/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp +++ b/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp @@ -290,11 +290,11 @@ namespace // // // - struct TypeNameEmitter : Traversal::FundamentalType, + struct FullTypeNameEmitter : Traversal::FundamentalType, Traversal::Type, Emitter { - TypeNameEmitter (Context& c, ostream& os) + FullTypeNameEmitter (Context& c, ostream& os) : Emitter (c, os) { } @@ -462,7 +462,7 @@ namespace private: Traversal::GetRaises get_raises_; Traversal::SetRaises set_raises_; - TypeNameEmitter type_name_; + FullTypeNameEmitter type_name_; }; @@ -634,7 +634,7 @@ namespace Traversal::Belongs belongs; Traversal::Belongs provider_belongs; - TypeNameEmitter type_name_emitter; + FullTypeNameEmitter type_name_emitter; }; @@ -2046,7 +2046,7 @@ generate (CommandLine const& cl, home_explicit.edge_traverser (home_explicit_defines); //-- - TypeNameEmitter type (ctx, os); + FullTypeNameEmitter type (ctx, os); ComponentContextEmitter session_component_context (ctx, os); ComponentExecutorEmitter session_component_executor (ctx, os); diff --git a/TAO/CIAO/CIDLC/InterfaceEmitter.cpp b/TAO/CIAO/CIDLC/InterfaceEmitter.cpp new file mode 100644 index 00000000000..1ce524cdfab --- /dev/null +++ b/TAO/CIAO/CIDLC/InterfaceEmitter.cpp @@ -0,0 +1,26 @@ +// file : CIDLC/InterfaceEmitter.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "InterfaceEmitter.hpp" + +InterfaceEmitter::InterfaceEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +InterfaceEmitter::traverse (UnconstrainedInterface& i) +{ + if (add (i)) + { + Traversal::UnconstrainedInterface::traverse (i); + } +} + +bool +InterfaceEmitter::add (UnconstrainedInterface& i) +{ + return interfaces_.insert (&i).second; +} + diff --git a/TAO/CIAO/CIDLC/InterfaceEmitter.hpp b/TAO/CIAO/CIDLC/InterfaceEmitter.hpp new file mode 100644 index 00000000000..fdd2411f912 --- /dev/null +++ b/TAO/CIAO/CIDLC/InterfaceEmitter.hpp @@ -0,0 +1,30 @@ +// file : CIDLC/InterfaceEmitter.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef INTERFACEEMITTER_HPP +#define INTERFACEEMITTER_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "EmitterBase.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +struct InterfaceEmitter : Traversal::UnconstrainedInterface, + EmitterBase +{ + InterfaceEmitter (Context& c); + + virtual void traverse (UnconstrainedInterface&); + +private: + bool add (UnconstrainedInterface&); + +private: + std::set<UnconstrainedInterface*> interfaces_; +}; + +#endif // INTERFACEEMITTER_HPP diff --git a/TAO/CIAO/CIDLC/Literals.cpp b/TAO/CIAO/CIDLC/Literals.cpp index af9a3d5e809..3552c06ace6 100644 --- a/TAO/CIAO/CIDLC/Literals.cpp +++ b/TAO/CIAO/CIDLC/Literals.cpp @@ -41,9 +41,10 @@ namespace StringLiterals "ACE_ENV_SINGLE_ARG_PARAMETER", // ENV_SNGL_ARG // Common CORBA and all Components exceptions. - "ACE_THROW_SPEC ((CORBA::SystemException))", // EXCP_SNGL + "ACE_THROW_SPEC (( ::CORBA::SystemException))", // EXCP_SNGL "ACE_THROW_SPEC ((", // EXCP_START "::CORBA::SystemException", // EXCP_SYS + "::CORBA::BAD_PARAM ()", // EXCP_BP "::Components::IllegalState", // EXCP_IS "::Components::AlreadyConnected", // EXCP_AC "::Components::InvalidConnection", // EXCP_IC @@ -64,6 +65,9 @@ namespace StringLiterals "::Components::EnterpriseComponent", // COMP_EC "::Components::SessionContext", // COMP_SC "::Components::ConsumerDescriptions", // COMP_CD + "::Components::ReceptacleDescriptions", // COMP_RD + "::Components::PublisherDescriptions", // COMP_PD + "::Components::EmitterDescriptions", // COMP_ED // This could change - don't want it scattered all over. "namespace CIDL_", // CIDL_NS @@ -79,9 +83,11 @@ namespace StringLiterals "variable-size", // VAR_SIZE "_ciao_extract_val", // EXTRACT "_ciao_extract_tmp", // EXTRACT_TMP - "ACE_UNUSED_ARG", // ACE_UA - "ACE_CHECK_RETURN", // ACE_CR - "ACE_THROW_RETURN" // ACE_TR + "ACE_UNUSED_ARG", // ACE_UA + "ACE_CHECK", // ACE_CK + "ACE_CHECK_RETURN", // ACE_CR + "ACE_THROW", // ACE_TH + "ACE_THROW_RETURN" // ACE_TR }; } diff --git a/TAO/CIAO/CIDLC/Literals.hpp b/TAO/CIAO/CIDLC/Literals.hpp index 84f70e1a4c2..920524a6dbf 100644 --- a/TAO/CIAO/CIDLC/Literals.hpp +++ b/TAO/CIAO/CIDLC/Literals.hpp @@ -23,6 +23,7 @@ namespace StringLiterals EXCP_SNGL, EXCP_START, EXCP_SYS, + EXCP_BP, EXCP_IS, EXCP_AC, EXCP_IC, @@ -41,6 +42,9 @@ namespace StringLiterals COMP_EC, COMP_SC, COMP_CD, + COMP_RD, + COMP_PD, + COMP_ED, CIDL_NS, TYPE_ID, TYPE_PREFIX, @@ -50,9 +54,11 @@ namespace StringLiterals VAR_SIZE, EXTRACT, EXTRACT_TMP, - ACE_UA, - ACE_CR, - ACE_TR, + ACE_UA, + ACE_CK, + ACE_CR, + ACE_TH, + ACE_TR, SIZE }; diff --git a/TAO/CIAO/CIDLC/ModuleEmitter.cpp b/TAO/CIAO/CIDLC/ModuleEmitter.cpp new file mode 100644 index 00000000000..990d95ef4b8 --- /dev/null +++ b/TAO/CIAO/CIDLC/ModuleEmitter.cpp @@ -0,0 +1,22 @@ +// file : CIDLC/ModuleEmitter.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "ModuleEmitter.hpp" + +ModuleEmitter::ModuleEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +ModuleEmitter::pre (Type& t) +{ + os << "namespace " << t.name () << "{"; +} + +void +ModuleEmitter::post (Type&) +{ + os << "}"; +} diff --git a/TAO/CIAO/CIDLC/ModuleEmitter.hpp b/TAO/CIAO/CIDLC/ModuleEmitter.hpp new file mode 100644 index 00000000000..9aa8de2f9ff --- /dev/null +++ b/TAO/CIAO/CIDLC/ModuleEmitter.hpp @@ -0,0 +1,24 @@ +// file : CIDLC/ModuleEmitter.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef MODULEEMITTER_HPP +#define MODULEEMITTER_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "EmitterBase.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +struct ModuleEmitter : Traversal::Module, EmitterBase +{ + ModuleEmitter (Context& c); + + virtual void pre (Type&); + virtual void post (Type&); +}; + +#endif // MODULEEMITTER_HPP diff --git a/TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp b/TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp new file mode 100644 index 00000000000..6644e8102e6 --- /dev/null +++ b/TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp @@ -0,0 +1,267 @@ +// file : CIDLC/OperationHeaderEmitters.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "OperationHeaderEmitters.hpp" +#include "Literals.hpp" + +using namespace StringLiterals; + +OperationEmitter::OperationEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +OperationEmitter::pre (Type&) +{ + os << "virtual "; +} + +void +OperationEmitter::name (Type& o) +{ + os << endl << o.name (); +} + +void +OperationEmitter::receives_pre (Type&) +{ + os << " (" << endl; +} + +void +OperationEmitter::receives_none (Type&) +{ + os << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; +} + +void +OperationEmitter::receives_post (Type&) +{ + os << endl << STRS[ENV_HDR] << ")" << endl; +} + +void +OperationEmitter::raises_pre (Type&) +{ + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; +} + +void +OperationEmitter::raises_none (Type&) +{ + os << STRS[EXCP_SNGL]; +} + +void +OperationEmitter::raises_post (Type&) +{ + os << "))"; +} + +void +OperationEmitter::post (Type&) +{ + os << ";" << endl; +} + +void +OperationEmitter::comma (Type&) +{ + os << "," << endl; +} + +// ================================================== + +HomeOperationEmitter::HomeOperationEmitter (Context& c) + : OperationEmitter (c) +{ +} + +void +HomeOperationEmitter::traverse (SemanticGraph::HomeFactory&) +{ +} + +void +HomeOperationEmitter::traverse (SemanticGraph::HomeFinder&) +{ +} + +// ================================================== + +FactoryOperationEmitter::FactoryOperationEmitter (Context& c, bool for_exec) + : EmitterBase (c), + returns_emitter_ (c), + for_exec_ (for_exec) +{ + returns_.node_traverser (returns_emitter_); +} + +void +FactoryOperationEmitter::pre (SemanticGraph::HomeFactory&) +{ + os << "virtual "; +} + +void +FactoryOperationEmitter::returns (SemanticGraph::HomeFactory& t) +{ + if (for_exec_) + { + os << STRS[COMP_EC] << "_ptr"; + } + else + { + Traversal::HomeFactory::returns (t, returns_); + } + + os << endl; +} + +void +FactoryOperationEmitter::name (SemanticGraph::HomeFactory& t) +{ + os << t.name (); +} + +void +FactoryOperationEmitter::receives_none (SemanticGraph::HomeFactory&) +{ + os << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; +} + +void +FactoryOperationEmitter::receives_pre (SemanticGraph::HomeFactory&) +{ + os << " (" << endl; +} + +void +FactoryOperationEmitter::receives_post (SemanticGraph::HomeFactory&) +{ + os << endl << STRS[ENV_HDR] << ")" << endl; +} + +void +FactoryOperationEmitter::raises_none (SemanticGraph::HomeFactory&) +{ + os << STRS[EXCP_SNGL]; +} + +void +FactoryOperationEmitter::raises_pre (SemanticGraph::HomeFactory&) +{ + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; +} + +void +FactoryOperationEmitter::raises_post (SemanticGraph::HomeFactory&) +{ + os << "))"; +} + +void +FactoryOperationEmitter::post (SemanticGraph::HomeFactory&) +{ + os << ";" << endl; +} + +void +FactoryOperationEmitter::comma (SemanticGraph::HomeFactory&) +{ + os << "," << endl; +} + +// ================================================== + +FinderOperationEmitter::FinderOperationEmitter (Context& c, bool for_exec) + : EmitterBase (c), + returns_emitter_ (c), + for_exec_ (for_exec) +{ + returns_.node_traverser (returns_emitter_); +} + +void +FinderOperationEmitter::pre (SemanticGraph::HomeFinder&) +{ + os << "virtual "; +} + +void +FinderOperationEmitter::returns (SemanticGraph::HomeFinder& t) +{ + if (for_exec_) + { + os << STRS[COMP_EC] << "_ptr"; + } + else + { + Traversal::HomeFinder::returns (t, returns_); + } + + os << endl; +} + +void +FinderOperationEmitter::name (SemanticGraph::HomeFinder& t) +{ + os << t.name (); +} + +void +FinderOperationEmitter::receives_none (SemanticGraph::HomeFinder&) +{ + os << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; +} + +void +FinderOperationEmitter::receives_pre (SemanticGraph::HomeFinder&) +{ + os << " (" << endl; +} + +void +FinderOperationEmitter::receives_post (SemanticGraph::HomeFinder&) +{ + os << endl << STRS[ENV_HDR] << ")" << endl; +} + +void +FinderOperationEmitter::raises_none (SemanticGraph::HomeFinder&) +{ + os << STRS[EXCP_SNGL]; +} + +void +FinderOperationEmitter::raises_pre (SemanticGraph::HomeFinder&) +{ + os << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl; +} + +void +FinderOperationEmitter::raises_post (SemanticGraph::HomeFinder&) +{ + os << "))"; +} + +void +FinderOperationEmitter::post (SemanticGraph::HomeFinder&) +{ + os << ";" << endl; +} + +void +FinderOperationEmitter::comma (SemanticGraph::HomeFinder&) +{ + os << "," << endl; +} + diff --git a/TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp b/TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp new file mode 100644 index 00000000000..d1fc148e0c3 --- /dev/null +++ b/TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp @@ -0,0 +1,151 @@ +// file : CIDLC/OperationHeaderEmitters.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef OPERATIONHEADEREMITTERS_HPP +#define OPERATIONHEADEREMITTERS_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" + +#include "EmitterBase.hpp" +#include "CorbaTypeNameEmitters.hpp" + +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +struct OperationEmitter : Traversal::Operation, + EmitterBase +{ + OperationEmitter (Context& c); + + virtual void pre (Type&); + + virtual void name (Type&); + + virtual void receives_pre (Type&); + + virtual void receives_none (Type&); + + virtual void receives_post (Type&); + + virtual void raises_pre (Type&); + + virtual void raises_none (Type&); + + virtual void raises_post (Type&); + + virtual void post (Type&); + + virtual void comma (Type&); +}; + +// 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 want to generate +// base class factory operations returning the base component, +// for example), we use this class for regular home operations +// that overrides HomeFactory and HomeFinder traversals +// to do nothing. +struct HomeOperationEmitter : OperationEmitter, + Traversal::HomeFactory, + Traversal::HomeFinder +{ + HomeOperationEmitter (Context& c); + + virtual void + traverse (SemanticGraph::HomeFactory&); + + virtual void + traverse (SemanticGraph::HomeFinder&); +}; + +struct FactoryOperationEmitter : Traversal::HomeFactory, + EmitterBase +{ + FactoryOperationEmitter (Context& c, bool for_exec = false); + + virtual void + pre (SemanticGraph::HomeFactory&); + + virtual void + returns (SemanticGraph::HomeFactory&); + + virtual void + name (SemanticGraph::HomeFactory&); + + virtual void + receives_none (SemanticGraph::HomeFactory&); + + virtual void + receives_pre (SemanticGraph::HomeFactory&); + + virtual void + receives_post (SemanticGraph::HomeFactory&); + + virtual void + raises_none (SemanticGraph::HomeFactory&); + + virtual void + raises_pre (SemanticGraph::HomeFactory&); + + virtual void + raises_post (SemanticGraph::HomeFactory&); + + virtual void + post (SemanticGraph::HomeFactory&); + + virtual void + comma (SemanticGraph::HomeFactory&); + +private: + ReturnTypeNameEmitter returns_emitter_; + Traversal::Returns returns_; + bool for_exec_; +}; + +struct FinderOperationEmitter : Traversal::HomeFinder, + EmitterBase +{ + FinderOperationEmitter (Context& c, bool for_exec = false); + + virtual void + pre (SemanticGraph::HomeFinder&); + + virtual void + returns (SemanticGraph::HomeFinder&); + + virtual void + name (SemanticGraph::HomeFinder&); + + virtual void + receives_none (SemanticGraph::HomeFinder&); + + virtual void + receives_pre (SemanticGraph::HomeFinder&); + + virtual void + receives_post (SemanticGraph::HomeFinder&); + + virtual void + raises_none (SemanticGraph::HomeFinder&); + + virtual void + raises_pre (SemanticGraph::HomeFinder&); + + virtual void + raises_post (SemanticGraph::HomeFinder&); + + virtual void + post (SemanticGraph::HomeFinder&); + + virtual void + comma (SemanticGraph::HomeFinder&); + +private: + ReturnTypeNameEmitter returns_emitter_; + Traversal::Returns returns_; + bool for_exec_; +}; + +#endif // OPERATIONHEADEREMITTERS_HPP diff --git a/TAO/CIAO/CIDLC/ParameterEmitter_T.hpp b/TAO/CIAO/CIDLC/ParameterEmitter_T.hpp new file mode 100644 index 00000000000..4fe0d55867f --- /dev/null +++ b/TAO/CIAO/CIDLC/ParameterEmitter_T.hpp @@ -0,0 +1,33 @@ +// file : CIDLC/ParameterEmitter_T.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef PARAMETEREMITTER_T_HPP +#define PARAMETEREMITTER_T_HPP + +#include "EmitterBase.hpp" + +// For generating parameter names. +template <typename T> +struct ParameterEmitter : T, EmitterBase +{ + ParameterEmitter (Context& c, bool for_exec_src = false) + : EmitterBase (c), + for_exec_src_ (for_exec_src) + { + } + + virtual void + name (typename T::Type& p) + { + os << " " + << (for_exec_src_ ? "/* " : "") + << p.name () + << (for_exec_src_ ? " */" : ""); + } + +private: + bool for_exec_src_; +}; + +#endif // PARAMETEREMITTER_T_HPP diff --git a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp index 8b677954b4c..795fd3dfd5b 100644 --- a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp @@ -3,8 +3,16 @@ // cvs-id : $Id$ #include "ServantHeaderGenerator.hpp" -#include "TypeNameEmitter.hpp" +#include "CorbaTypeNameEmitters.hpp" +#include "UtilityTypeNameEmitters.hpp" +#include "AttributeHeaderEmitters.hpp" +#include "OperationHeaderEmitters.hpp" +#include "ParameterEmitter_T.hpp" +#include "CompositionEmitter.hpp" +#include "ModuleEmitter.hpp" +#include "InterfaceEmitter.hpp" #include "Literals.hpp" +#include "Upcase.hpp" #include <ostream> @@ -17,475 +25,8 @@ using namespace StringLiterals; using namespace CCF::CIDL; using namespace CCF::CIDL::SemanticGraph; -using std::string; - -namespace -{ - // On some platforms toupper can be something other than a - // function. - int - upcase (int c) - { - return std::toupper (c); - } -} - namespace { - class Context - { - public: - Context (std::ostream& os, - string export_macro) - : os_ (os), - export_macro_ (export_macro) - { - } - - std::ostream& - os () - { - return os_; - } - - string - export_macro () - { - return export_macro_; - } - - private: - std::ostream& os_; - string export_macro_; - }; - - class EmitterBase - { - public: - EmitterBase (Context& c) - : ctx (c), - os (ctx.os ()) - { - } - - protected: - Context& ctx; - std::ostream& os; - }; - - struct ModuleEmitter : Traversal::Module, EmitterBase - { - ModuleEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - os << "namespace " << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; - - struct OperationEmitter : Traversal::Operation, EmitterBase - { - OperationEmitter (Context& c) - : EmitterBase (c) - {} - - virtual void - pre (Type&) - { - os << "virtual "; - } - - virtual void - name (Type& o) - { - os << endl << o.name (); - } - - virtual void - receives_pre (Type&) - { - os << " (" << endl; - } - - virtual void - receives_none (Type&) - { - os << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - receives_post (Type&) - { - os << endl << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - raises_pre (Type&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - raises_none (Type&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - raises_post (Type&) - { - os << "))"; - } - - virtual void - post (Type&) - { - os << ";" << endl << endl; - } - - virtual void - comma (Type&) - { - os << "," << endl; - } - }; - - // For generating parameter names. - template <typename T> - struct ParameterEmitter : T - { - ParameterEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - name (typename T::Type& p) - { - os << " " << p.name (); - } - - private: - std::ostream& os; - }; - - // Generic scoped typename emitter used by various other emitters. - struct TypeNameEmitter : Traversal::Type - { - TypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name (); - } - - private: - std::ostream& os; - }; - - // Generic local typename emitter used by various other emitters. - struct SimpleTypeNameEmitter : Traversal::Type - { - SimpleTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.name (); - } - - private: - std::ostream& os; - }; - - // Generate name of type's enclosing scope. - struct EnclosingTypeNameEmitter : Traversal::Type - { - EnclosingTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name ().scope_name (); - } - - private: - std::ostream& os; - }; - - // Emits typename minus the leading double colon. - struct StrippedTypeNameEmitter : Traversal::Type - { - StrippedTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - ScopedName scoped (t.scoped_name ()); - os << Name (scoped.begin () + 1, scoped.end ()); - } - - private: - std::ostream& os; - }; - - // Generates the set operation of a ReadWriteAttribute. - struct WriteAttributeEmitter : Traversal::ReadWriteAttribute, - EmitterBase - { - WriteAttributeEmitter (Context& c) - : EmitterBase (c), - write_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()) - { - write_belongs_.node_traverser (write_type_name_emitter_); - - edge_traverser (set_raises_); - set_raises_.node_traverser (type_name_emitter_); - } - - virtual void - pre (SemanticGraph::ReadWriteAttribute&) - { - os << "virtual void" << endl; - } - - virtual void - name (SemanticGraph::ReadWriteAttribute& a) - { - os << a.name () << " (" << endl; - - Traversal::ReadWriteAttribute::belongs (a, write_belongs_); - - os << " " << a.name () << endl - << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - get_raises (SemanticGraph::ReadWriteAttribute&) - { - } - - virtual void - set_raises_none (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - set_raises_pre (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - set_raises_post (SemanticGraph::ReadWriteAttribute&) - { - os << "))"; - } - - virtual void - post (SemanticGraph::ReadWriteAttribute&) - { - os << ";" << endl << endl; - } - - virtual void - comma (SemanticGraph::ReadWriteAttribute&) - { - os << "," << endl; - } - - private: - INArgTypeNameEmitter write_type_name_emitter_; - TypeNameEmitter type_name_emitter_; - Traversal::Belongs write_belongs_; - Traversal::SetRaises set_raises_; - }; - - // Generates operations associated with attributes. - struct AttributeEmitter : Traversal::ReadAttribute, - Traversal::ReadWriteAttribute, - EmitterBase - { - AttributeEmitter (Context& c) - : EmitterBase (c), - read_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()) - { - read_belongs_.node_traverser (read_type_name_emitter_); - - edge_traverser (get_raises_); - get_raises_.node_traverser (type_name_emitter_); - } - - // ReadWriteAttribute - // - virtual void - pre (SemanticGraph::ReadWriteAttribute& a) - { - os << "virtual "; - - Traversal::ReadWriteAttribute::belongs (a, read_belongs_); - - os << endl; - } - - virtual void - name (SemanticGraph::ReadWriteAttribute& a) - { - os << a.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - get_raises_none (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - get_raises_pre (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - get_raises_post (SemanticGraph::ReadWriteAttribute&) - { - os << "))"; - } - - virtual void - set_raises (SemanticGraph::ReadWriteAttribute&) - { - } - - virtual void - post (SemanticGraph::ReadWriteAttribute& a) - { - os << ";" << endl << endl; - - WriteAttributeEmitter write_attribute_emitter (ctx); - write_attribute_emitter.traverse (a); - } - - virtual void - comma (SemanticGraph::ReadWriteAttribute&) - { - os << "," << endl; - } - - // ReadAttribute - // - virtual void - pre (SemanticGraph::ReadAttribute& a) - { - os << "virtual "; - - Traversal::ReadAttribute::belongs (a, read_belongs_); - - os << endl; - } - - virtual void - name (SemanticGraph::ReadAttribute& a) - { - os << a.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - get_raises_none (SemanticGraph::ReadAttribute&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - get_raises_pre (SemanticGraph::ReadAttribute&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - get_raises_post (SemanticGraph::ReadAttribute&) - { - os << "))"; - } - - virtual void - set_raises (SemanticGraph::ReadAttribute&) - { - } - - virtual void - post (SemanticGraph::ReadAttribute&) - { - os << ";" << endl << endl; - } - - virtual void - comma (SemanticGraph::ReadAttribute&) - { - os << "," << endl; - } - - private: - ReturnTypeNameEmitter read_type_name_emitter_; - TypeNameEmitter type_name_emitter_; - Traversal::Belongs read_belongs_; - Traversal::GetRaises get_raises_; - }; - - struct InterfaceEmitter : Traversal::Interface, - EmitterBase - { - InterfaceEmitter (Context& c) - : EmitterBase (c) - {} - - bool - add (Interface& i) - { - return interfaces_.insert (&i).second; - } - - virtual void - traverse (Interface& i) - { - if (add (i)) - { - Traversal::Interface::traverse (i); - } - } - - private: - std::set<Interface*> interfaces_; - }; - struct FacetEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -522,7 +63,7 @@ namespace interface_emitter.edge_traverser (inherits_); // Works for both read/write and readonly attributes. - AttributeEmitter attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines_.node_traverser (attribute_emitter); OperationEmitter operation_emitter (ctx); @@ -536,15 +77,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -553,9 +94,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -569,7 +110,6 @@ namespace << "_get_component (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_SNGL] << ";" << endl - << endl << "protected:" << endl << "// Facet executor." << endl << i.scoped_name ().scope_name ()<< "::CCM_" << i.name () @@ -602,7 +142,7 @@ namespace { PortsEmitterPublic (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -672,7 +212,7 @@ namespace { PortsEmitterProtected (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -687,9 +227,9 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_AC] << "));" << endl << endl; + << STRS[EXCP_AC] << "));" << endl; os << "virtual "; @@ -698,9 +238,9 @@ namespace os << "Consumer_ptr" << endl << "disconnect_" << e.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl << endl; + << STRS[EXCP_NC] << "));" << endl; } virtual void @@ -713,10 +253,10 @@ namespace os << "_ptr" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; os << "virtual "; @@ -725,9 +265,9 @@ namespace os << "_ptr" << endl << "disconnect_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl << endl; + << STRS[EXCP_NC] << "));" << endl; } virtual void @@ -740,10 +280,10 @@ namespace os << "_ptr" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; os << "virtual "; @@ -753,9 +293,9 @@ namespace << "disconnect_" << u.name () << " (" << endl << "::Components::Cookie * ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; } virtual void @@ -768,18 +308,18 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl << endl; + << STRS[EXCP_ECL] << "));" << endl; os << "// CIAO-specific." << endl << STRS[COMP_CK] << " *" << endl << "subscribe_" << p.name () << "_generic (" << endl << STRS[COMP_ECB] << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl << endl; + << STRS[EXCP_ECL] << "));" << endl; os << "virtual "; @@ -789,13 +329,13 @@ namespace << "unsubscribe_" << p.name () << " (" << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -807,7 +347,7 @@ namespace { PortsEmitterMembers (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -819,7 +359,7 @@ namespace os << "Consumer_var" << endl << "ciao_emits_" << e.name () << "_consumer_;" - << endl << endl; + << endl; } virtual void @@ -830,7 +370,7 @@ namespace Traversal::SingleUserData::belongs (u, belongs_); os << "_var" << endl - << "ciao_uses_" << u.name () << "_;" << endl << endl; + << "ciao_uses_" << u.name () << "_;" << endl; } virtual void @@ -842,7 +382,7 @@ namespace Traversal::MultiUserData::belongs (u, belongs_); os << "_var>" << endl - << "ciao_uses_" << u.name () << "_;" << endl << endl; + << "ciao_uses_" << u.name () << "_;" << endl; } virtual void @@ -854,16 +394,16 @@ namespace os << "Consumer_var>" << endl << "ciao_publishes_" << p.name () << "_map_;" - << endl << endl; + << endl; os << "ACE_Active_Map_Manager<" << endl << STRS[COMP_ECB] << "_var>" << endl << "ciao_publishes_" << p.name () << "_generic_map_;" - << endl << endl; + << endl; } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -1063,9 +603,9 @@ namespace { PortsEmitterPublic (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - stripped_type_name_emitter_ (c.os ()) + type_name_emitter_ (c), + simple_type_name_emitter_ (c), + stripped_type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); @@ -1082,7 +622,7 @@ namespace os << "_ptr" << endl << "provide_" << p.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -1095,10 +635,10 @@ namespace os << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; os << "virtual "; @@ -1107,9 +647,9 @@ namespace os << "_ptr" << endl << "disconnect_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl << endl; + << STRS[EXCP_NC] << "));" << endl; os << "virtual "; @@ -1118,7 +658,7 @@ namespace os << "_ptr" << endl << "get_connection_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -1131,10 +671,10 @@ namespace os << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; os << "virtual "; @@ -1144,14 +684,14 @@ namespace << "disconnect_" << u.name () << " (" << endl << "::Components::Cookie * ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; os << "virtual " << u.scoped_name () << "Connections *" << endl << "get_connections_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -1181,18 +721,15 @@ namespace << endl << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () - << "_Context_ptr c);" << endl << endl; + << "_Context_ptr c);" << endl; os << "virtual ~"; Traversal::ConsumerData::belongs (c, simple_belongs_); os << "Consumer_" - << c.name () << "_Servant (void);" << endl << endl; + << c.name () << "_Servant (void);" << endl; - // @@@ (JP) May need to generate this for the eventtype's ancestors - // as well (the spec is vague on this point). If so, we need the - // CIDL compiler to support valuetype/eventtype inheritance. os << "virtual void" << endl << "push_"; @@ -1204,39 +741,39 @@ namespace os << " *evt" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "// Inherited from " << STRS[COMP_ECB] << "." << endl << "virtual void" << endl - << "push_event (::Components::EventBase *ev" << endl + << "push_event ( ::Components::EventBase *ev" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_BET] << "));" << endl << endl; + << STRS[EXCP_BET] << "));" << endl; os << "// CIAO-specific in " << STRS[COMP_ECB] << "." << endl << "virtual CORBA::Boolean" << endl << "ciao_is_substitutable (" << endl << "const char *event_repo_id" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "// Get component implementation." << endl << "virtual CORBA::Object_ptr" << endl << "_get_component (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "protected:" << endl << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () << "_var" << endl - << "executor_;" << endl << endl; + << "executor_;" << endl; os << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () << "_Context_var" << endl - << "ctx_;" << endl << endl; + << "ctx_;" << endl; os << "};"; @@ -1247,7 +784,7 @@ namespace os << "Consumer_ptr" << endl << "get_consumer_" << c.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -1260,9 +797,9 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_AC] << "));" << endl << endl; + << STRS[EXCP_AC] << "));" << endl; os << "virtual "; @@ -1271,9 +808,9 @@ namespace os << "Consumer_ptr" << endl << "disconnect_" << e.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl << endl; + << STRS[EXCP_NC] << "));" << endl; } virtual void @@ -1286,18 +823,18 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl << endl; + << STRS[EXCP_ECL] << "));" << endl; os << "// CIAO-specific." << endl << STRS[COMP_CK] << " *" << endl << "subscribe_" << p.name () << "_generic (" << endl << STRS[COMP_ECB] << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl << endl; + << STRS[EXCP_ECL] << "));" << endl; os << "virtual "; @@ -1307,13 +844,13 @@ namespace << "unsubscribe_" << p.name () << " (" << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; StrippedTypeNameEmitter stripped_type_name_emitter_; Traversal::Belongs belongs_; @@ -1327,7 +864,7 @@ namespace { PortsEmitterProtected (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -1338,7 +875,7 @@ namespace Traversal::ProviderData::belongs (p, belongs_); os << "_var" << endl - << "provide_" << p.name () << "_;" << endl << endl; + << "provide_" << p.name () << "_;" << endl; } virtual void @@ -1347,11 +884,11 @@ namespace Traversal::ConsumerData::belongs (c, belongs_); os << "Consumer_var" << endl - << "consumes_" << c.name () << "_;" << endl << endl; + << "consumes_" << c.name () << "_;" << endl; } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -1365,9 +902,9 @@ namespace { PortsEmitterPrivate (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - stripped_type_name_emitter_ (c.os ()) + type_name_emitter_ (c), + simple_type_name_emitter_ (c), + stripped_type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); @@ -1380,7 +917,7 @@ namespace os << "::CORBA::Object_ptr" << endl << "provide_" << p.name () << "_i (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -1399,7 +936,7 @@ namespace os << "::Components::EventConsumerBase_ptr" << endl << "get_consumer_" << c.name () << "_i (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -1413,7 +950,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; StrippedTypeNameEmitter stripped_type_name_emitter_; Traversal::Belongs belongs_; @@ -1449,7 +986,7 @@ namespace << " " << t.scoped_name ().scope_name () << "::CCM_" << t.name () << "_var," << endl << " " << t.name () << "_Context" << endl - << " > comp_svnt_base;" << endl << endl; + << " > comp_svnt_base;" << endl; os << t.name () << "_Servant (" << endl << t.scoped_name ().scope_name () << "::CCM_" << t.name () @@ -1457,15 +994,14 @@ namespace << "::Components::CCMHome_ptr h," << endl << "const char *ins_name," << endl << "::CIAO::Home_Servant_Impl_Base *hs," << endl - << "::CIAO::Session_Container *c);" << endl << endl; + << "::CIAO::Session_Container *c);" << endl; - os << "virtual ~" << t.name () << "_Servant (void);" - << endl << endl; + os << "virtual ~" << t.name () << "_Servant (void);" << endl; os << "virtual void" << endl << "set_attributes (" << endl << "const ::Components::ConfigValues &descr" << endl - << STRS[ENV_SRC] << ");" << endl << endl; + << STRS[ENV_SRC] << ");" << endl; os << "// Supported operations." << endl << endl; @@ -1488,7 +1024,7 @@ namespace interface_emitter.edge_traverser (interface_inherits); // Works for both read/write and readonly attributes. - AttributeEmitter attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); OperationEmitter operation_emitter (ctx); @@ -1502,15 +1038,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1519,9 +1055,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1563,7 +1099,7 @@ namespace component_emitter.edge_traverser (component_inherits); // Works for both read/write and readonly attributes. - AttributeEmitter attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); component_emitter.traverse (t); @@ -1576,24 +1112,29 @@ namespace << "const char *name," << endl << "CORBA::Object_ptr connection" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_ECL] << "));" << endl << endl; + << STRS[EXCP_ECL] << "));" << endl; os << "virtual CORBA::Object_ptr" << endl << "disconnect (" << endl << "const char *name," << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl << STRS[EXCP_CR] << "," << endl - << STRS[EXCP_NC] << "));" << endl << endl; + << STRS[EXCP_NC] << "));" << endl; + + os << "virtual " << STRS[COMP_RD] << " *" << endl + << "get_all_receptacles (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; os << "// Operations for Events interface." << endl << endl; @@ -1602,40 +1143,59 @@ namespace << "const char *publisher_name," << endl << STRS[COMP_ECB] << "_ptr subscriber" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl - << STRS[EXCP_ECL] << "));" << endl << endl; + << STRS[EXCP_ECL] << "));" << endl; os << "virtual " << STRS[COMP_ECB] << "_ptr" << endl << "unsubscribe (" << endl << "const char *publisher_name," << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; os << "virtual void" << endl << "connect_consumer (" << endl << "const char *emitter_name," << endl << STRS[COMP_ECB] << "_ptr consumer" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_IC] << "));" << endl << endl; + << STRS[EXCP_IC] << "));" << endl; - os << "// CIAO specific operations on the servant " << endl + os << "virtual " << STRS[COMP_ECB] << "_ptr" << endl + << "disconnect_consumer (" << endl + << "const char *source_name" << endl + << STRS[ENV_HDR] << ")" << endl + << STRS[EXCP_START] << " " + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "," << endl + << STRS[EXCP_NC] << "));" << endl; + + os << "virtual " << STRS[COMP_PD] << " *" << endl + << "get_all_publishers (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; + + os << "virtual " << STRS[COMP_ED] << " *" << endl + << "get_all_emitters (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; + + os << "// CIAO specific operations on the servant. " << endl << "CORBA::Object_ptr" << endl << "get_facet_executor (" << endl << "const char *name" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << endl - << STRS[EXCP_SYS]<< "));" << endl << endl; + << STRS[EXCP_START] << " " + << STRS[EXCP_SYS]<< "));" << endl; os << "private:" << endl << endl; @@ -1656,13 +1216,13 @@ namespace component_emitter.traverse (t); } - os << "const char *ins_name_;" << endl << endl; + os << "const char *ins_name_;" << endl; os << "private:" << endl << endl << "void" << endl << "populate_port_tables (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; // Generate private operations for ports. { @@ -1695,211 +1255,15 @@ namespace HomeEmitter (Context& c, CommandLine const& cl) : EmitterBase (c), cl_ (cl), - type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - enclosing_type_name_emitter_ (c.os ()) + type_name_emitter_ (c), + simple_type_name_emitter_ (c), + enclosing_type_name_emitter_ (c) { manages_.node_traverser (type_name_emitter_); simple_manages_.node_traverser (simple_type_name_emitter_); enclosing_manages_.node_traverser (enclosing_type_name_emitter_); } - // Nested classes used by this emitter. - private: - // 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 want to generate - // base class factory operations returning the base component, - // for example), we use this class for regular home operations - // that overrides HomeFactory and HomeFinder traversals - // to do nothing. - struct HomeOperationEmitter : OperationEmitter, - Traversal::HomeFactory, - Traversal::HomeFinder - { - HomeOperationEmitter (Context& c) - : OperationEmitter (c) - {} - - virtual void - traverse (SemanticGraph::HomeFactory&) - { - } - - virtual void - traverse (SemanticGraph::HomeFinder&) - { - } - }; - - struct FactoryOperationEmitter : Traversal::HomeFactory, - EmitterBase - { - FactoryOperationEmitter (Context& c) - : EmitterBase (c) - {} - - virtual void - pre (SemanticGraph::HomeFactory&) - { - os << "virtual "; - } - - virtual void - returns (SemanticGraph::HomeFactory& t) - { - ReturnTypeNameEmitter returns_emitter (os); - Traversal::Returns returns_; - returns_.node_traverser (returns_emitter); - - Traversal::HomeFactory::returns (t, returns_); - - os << endl; - } - - virtual void - name (SemanticGraph::HomeFactory& t) - { - os << t.name (); - } - - virtual void - receives_none (SemanticGraph::HomeFactory&) - { - os << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - receives_pre (SemanticGraph::HomeFactory&) - { - os << " (" << endl; - } - - virtual void - receives_post (SemanticGraph::HomeFactory&) - { - os << endl << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - raises_none (SemanticGraph::HomeFactory&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - raises_pre (SemanticGraph::HomeFactory&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - raises_post (SemanticGraph::HomeFactory&) - { - os << "))"; - } - - virtual void - post (SemanticGraph::HomeFactory&) - { - os << ";" << endl << endl; - } - - virtual void - comma (SemanticGraph::HomeFactory&) - { - os << "," << endl; - } - }; - - struct FinderOperationEmitter : Traversal::HomeFinder, - EmitterBase - { - FinderOperationEmitter (Context& c) - : EmitterBase (c), - returns_emitter_ (c.os ()) - { - returns_.node_traverser (returns_emitter_); - } - - virtual void - pre (SemanticGraph::HomeFinder&) - { - os << "virtual "; - } - - virtual void - returns (SemanticGraph::HomeFinder& t) - { - Traversal::HomeFinder::returns (t, returns_); - - os << endl; - } - - virtual void - name (SemanticGraph::HomeFinder& t) - { - os << t.name (); - } - - virtual void - receives_none (SemanticGraph::HomeFinder&) - { - os << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl; - } - - virtual void - receives_pre (SemanticGraph::HomeFinder&) - { - os << " (" << endl; - } - - virtual void - receives_post (SemanticGraph::HomeFinder&) - { - os << endl << STRS[ENV_HDR] << ")" << endl; - } - - virtual void - raises_none (SemanticGraph::HomeFinder&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - raises_pre (SemanticGraph::HomeFinder&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - raises_post (SemanticGraph::HomeFinder&) - { - os << "))"; - } - - virtual void - post (SemanticGraph::HomeFinder&) - { - os << ";" << endl << endl; - } - - virtual void - comma (SemanticGraph::HomeFinder&) - { - os << "," << endl; - } - - private: - ReturnTypeNameEmitter returns_emitter_; - Traversal::Returns returns_; - }; - - public: virtual void pre (Type& t) { os << "class " << ctx.export_macro () << " " << t.name () @@ -1995,19 +1359,18 @@ namespace Traversal::Home::manages (t, simple_manages_); os << "_Servant" << endl - << " > home_svnt_base;" << endl << endl; + << " > home_svnt_base;" << endl; os << 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 << endl; + << "::CIAO::Session_Container *c);" << endl; - os << "virtual ~" << t.name () << "_Servant (void);" - << endl << endl; + os << "virtual ~" << t.name () << "_Servant (void);" << endl; // Generate home operations. - os << "// Home operations." << endl << endl; + os << "// Home operations." << endl; { Traversal::Home home_emitter; @@ -2029,15 +1392,15 @@ namespace home_operation_emitter.edge_traverser (returns); home_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -2046,9 +1409,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -2086,15 +1449,15 @@ namespace finder_operation_emitter.edge_traverser (returns); finder_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -2103,9 +1466,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -2127,7 +1490,7 @@ namespace home_emitter.edge_traverser (home_inherits); // Works for both read/write and readonly attributes. - AttributeEmitter attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); home_emitter.traverse (t); @@ -2153,7 +1516,7 @@ namespace interface_emitter.edge_traverser (inherits); // Works for both read/write and readonly attributes. - AttributeEmitter attribute_emitter (ctx); + AttributeHeaderEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); OperationEmitter operation_emitter (ctx); @@ -2167,15 +1530,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -2184,9 +1547,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -2210,7 +1573,7 @@ namespace private: CommandLine const& cl_; - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; EnclosingTypeNameEmitter enclosing_type_name_emitter_; Traversal::Manages manages_; @@ -2218,26 +1581,6 @@ namespace Traversal::Manages enclosing_manages_; }; - struct CompositionEmitter : Traversal::Composition, EmitterBase - { - CompositionEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - os << STRS[CIDL_NS] << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; - struct IncludesEmitter : Traversal::QuoteIncludes, Traversal::BracketIncludes, EmitterBase @@ -2361,8 +1704,7 @@ ServantHeaderEmitter::pre (TranslationUnit&) << "#include \"ciao/" << (swapping ? "Swapping_Servant_Home_Impl_T.h" : "Home_Servant_Impl_T.h") - << "\"" << endl - << "#include \"ace/Active_Map_Manager_T.h\"" << endl << endl; + << "\"" << endl << endl; } void @@ -2370,7 +1712,7 @@ ServantHeaderEmitter::generate (TranslationUnit& u) { pre (u); - Context c (os, export_macro_); + Context c (os, export_macro_, cl_); Traversal::TranslationUnit unit; diff --git a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp index d1047e699aa..29c8411f4db 100644 --- a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp @@ -3,13 +3,19 @@ // 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 "TypeNameEmitter.hpp" - -#include "CCF/CodeGenerationKit/Regex.hpp" #include <ostream> +#include "CCF/CodeGenerationKit/Regex.hpp" + using namespace CCF::CIDL; using namespace CCF::CIDL::SemanticGraph; using namespace StringLiterals; @@ -18,137 +24,51 @@ using std::string; namespace { - class Context - { - public: - Context (std::ostream& os, - string export_macro, - CommandLine const& cl) - : os_ (os), - export_macro_ (export_macro), - cl_ (cl) - { - } - - std::ostream& - os () - { - return os_; - } - - string - export_macro () - { - return export_macro_; - } - - CommandLine const& - cl () - { - return cl_; - } - - string - composition_name () - { - return composition_name_; - } - - void - composition_name (const string& name) - { - composition_name_ = name; - } - - private: - std::ostream& os_; - string export_macro_; - CommandLine const& cl_; - string composition_name_; - }; - - class EmitterBase + struct RepoIdEmitter : Traversal::Type, + EmitterBase { - public: - EmitterBase (Context& c) - : ctx (c), - os (ctx.os ()) + RepoIdEmitter (Context& c) + : EmitterBase (c) { } - protected: - Context& ctx; - std::ostream& os; - }; - - struct RepoIdEmitter : Traversal::Type - { - RepoIdEmitter (std::ostream& os_) - : os (os_) - {} - virtual void traverse (SemanticGraph::Type& t) { os << "\"" << t.context ().get<string> (STRS[REPO_ID]) << "\""; } - - private: - std::ostream& os; }; - struct ModuleEmitter : Traversal::Module, EmitterBase + struct ConsumerRepoIdEmitter : Traversal::Type, + EmitterBase { - ModuleEmitter (Context& c) + ConsumerRepoIdEmitter (Context& c) : EmitterBase (c) { } virtual void - pre (Type& t) - { - os << "namespace " << t.name () << "{"; - } - - virtual void - post (Type&) + traverse (SemanticGraph::Type& t) { - os << "}"; + string holder (t.context ().get<string> (STRS[REPO_ID])); + os << "\"" << holder.substr (0, holder.rfind (':')) + << "Consumer:1.0\""; } }; - struct FlatNameEmitter : Traversal::Type + struct FlatNameEmitter : Traversal::Type, + EmitterBase { - FlatNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) + FlatNameEmitter (Context& c) + : EmitterBase (c) { - os << regex::perl_s (t.scoped_name ().str (), "/::/_/"); } - private: - std::ostream& os; - }; - - struct ConsumerRepoIdEmitter : Traversal::Type - { - ConsumerRepoIdEmitter (std::ostream& os_) - : os (os_) - {} - virtual void traverse (SemanticGraph::Type& t) { - string holder (t.context ().get<string> (STRS[REPO_ID])); - os << "\"" << holder.substr (0, holder.rfind (':')) - << "Consumer:1.0\""; + os << regex::perl_s (t.scoped_name ().str (), "/::/_/"); } - - private: - std::ostream& os; }; struct OperationExecEmitter : Traversal::Operation, @@ -224,24 +144,6 @@ namespace std::ostream& os; }; - // For generating parameter names. - template <typename T> - struct ParameterEmitter : T - { - ParameterEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - name (typename T::Type& p) - { - os << " " << p.name (); - } - - private: - std::ostream& os; - }; - // For generating parameter names in operation delegation. template <typename T> struct ParameterExecEmitter : T @@ -267,7 +169,7 @@ namespace T& scope) : EmitterBase (c), scope_ (scope), - ace_check_return_emitter_ (c.os ()) + ace_check_return_emitter_ (c) { ace_check_returns_.node_traverser (ace_check_return_emitter_); } @@ -318,7 +220,7 @@ namespace virtual void raises_pre (Type&) { - os << STRS[EXCP_START] << endl + os << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl; } @@ -371,457 +273,6 @@ namespace Traversal::Returns ace_check_returns_; }; - // Generic scoped typename emitter used by various other emitters. - struct TypeNameEmitter : Traversal::Type - { - TypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name (); - } - - private: - std::ostream& os; - }; - - // Generic local typename emitter used by various other emitters. - struct SimpleTypeNameEmitter : Traversal::Type - { - SimpleTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.name (); - } - - private: - std::ostream& os; - }; - - // Generate name of type's enclosing scope. - struct EnclosingTypeNameEmitter : Traversal::Type - { - EnclosingTypeNameEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << t.scoped_name ().scope_name (); - } - - private: - std::ostream& os; - }; - - struct InterfaceEmitter : Traversal::Interface, - EmitterBase - { - InterfaceEmitter (Context& c) - : EmitterBase (c) - {} - - bool - add (Interface& i) - { - return interfaces_.insert (&i).second; - } - - virtual void - traverse (Interface& i) - { - if (add (i)) - { - Traversal::Interface::traverse (i); - } - } - - private: - std::set<Interface*> interfaces_; - }; - - // Generates the set operation of a ReadWriteAttribute. - template <typename T> - struct WriteAttributeEmitter : Traversal::ReadWriteAttribute, - EmitterBase - { - WriteAttributeEmitter (Context& c, T& scope, bool swapping) - : EmitterBase (c), - scope_ (scope), - write_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()), - swapping_ (swapping) - { - write_belongs_.node_traverser (write_type_name_emitter_); - - edge_traverser (set_raises_); - set_raises_.node_traverser (type_name_emitter_); - } - - virtual void - gen_swapping_set () - { - os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" - << "ACE_CHECK;" << endl; - } - - virtual void - pre (SemanticGraph::ReadWriteAttribute&) - { - os << "void" << endl; - } - - virtual void - name (SemanticGraph::ReadWriteAttribute& a) - { - os << scope_.name () << "_Servant::" << a.name () << " (" << endl; - - Traversal::ReadWriteAttribute::belongs (a, write_belongs_); - - os << " " << a.name () << endl - << STRS[ENV_SRC] << ")" << endl; - } - - virtual void - get_raises (SemanticGraph::ReadWriteAttribute&) - { - } - - virtual void - set_raises_none (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_SNGL]; - } - - virtual void - set_raises_pre (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - set_raises_post (SemanticGraph::ReadWriteAttribute&) - { - os << "))" << endl; - } - - virtual void - post (SemanticGraph::ReadWriteAttribute& a) - { - os << "{"; - - if (swapping_) - { - this->gen_swapping_set (); - } - - os << "this->executor_->" << a.name () << " (" << endl - << a.name () << endl - << STRS[ENV_ARG] << ");" << endl - << "}"; - } - - virtual void - comma (SemanticGraph::ReadWriteAttribute&) - { - os << "," << endl; - } - - protected: - T& scope_; - Traversal::Belongs write_belongs_; - - private: - INArgTypeNameEmitter write_type_name_emitter_; - TypeNameEmitter type_name_emitter_; - Traversal::SetRaises set_raises_; - bool swapping_; - }; - - // Generates operations associated with attributes. - template <typename T> - struct AttributeEmitter : Traversal::ReadAttribute, - Traversal::ReadWriteAttribute, - EmitterBase - { - AttributeEmitter (Context& c, T& scope) - : EmitterBase (c), - scope_ (scope), - read_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()), - ace_check_return_emitter_ (c.os ()) - { - read_belongs_.node_traverser (read_type_name_emitter_); - ace_check_return_belongs_.node_traverser (ace_check_return_emitter_); - - edge_traverser (get_raises_); - get_raises_.node_traverser (type_name_emitter_); - } - - // ReadWriteAttribute - // - - // Overridden by facet attribute emitter. - virtual void - gen_swapping_get (SemanticGraph::ReadWriteAttribute& a) - { - os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"; - - Traversal::ReadWriteAttribute::belongs (a, ace_check_return_belongs_); - - os << endl; - } - - // Overridden by facet attribute emitter. - virtual void - gen_write_operation (SemanticGraph::ReadWriteAttribute& a, - bool swapping) - { - WriteAttributeEmitter<T> write_attribute_emitter (ctx, - scope_, - swapping); - write_attribute_emitter.traverse (a); - } - - virtual void - pre (SemanticGraph::ReadWriteAttribute& a) - { - Traversal::ReadWriteAttribute::belongs (a, read_belongs_); - - os << endl; - } - - virtual void - name (SemanticGraph::ReadWriteAttribute& a) - { - os << scope_.name () << "_Servant::" << a.name () << " (" << endl - << STRS[ENV_SNGL_SRC] << ")" << endl; - } - - virtual void - get_raises_none (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_SNGL] << endl; - } - - virtual void - get_raises_pre (SemanticGraph::ReadWriteAttribute&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - get_raises_post (SemanticGraph::ReadWriteAttribute&) - { - os << "))" << endl; - } - - virtual void - set_raises (SemanticGraph::ReadWriteAttribute&) - { - } - - virtual void - post (SemanticGraph::ReadWriteAttribute& a) - { - os << "{"; - - string swap_option = ctx.cl ().get_value ("custom-container", ""); - bool swapping = (swap_option == "upgradeable"); - - if (swapping) - { - this->gen_swapping_get (a); - } - - os << "return this->executor_->" << a.name () << " (" << endl - << STRS[ENV_SNGL_ARG] << ");" << endl - << "}"; - - this->gen_write_operation (a, swapping); - } - - virtual void - comma (SemanticGraph::ReadWriteAttribute&) - { - os << "," << endl; - } - - // ReadAttribute - // - - // Overridden by facet attribute emitter to do nothing. - virtual void - gen_swapping_get (SemanticGraph::ReadAttribute& a) - { - os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"; - - Traversal::ReadAttribute::belongs (a, ace_check_return_belongs_); - - os << endl; - } - - virtual void - pre (SemanticGraph::ReadAttribute& a) - { - Traversal::ReadAttribute::belongs (a, read_belongs_); - - os << endl; - } - - virtual void - name (SemanticGraph::ReadAttribute& a) - { - os << scope_.name () << "_Servant::" << a.name () << " (" << endl - << STRS[ENV_SNGL_SRC] << ")" << endl; - } - - virtual void - get_raises_none (SemanticGraph::ReadAttribute&) - { - os << STRS[EXCP_SNGL] << endl; - } - - virtual void - get_raises_pre (SemanticGraph::ReadAttribute&) - { - os << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl; - } - - virtual void - get_raises_post (SemanticGraph::ReadAttribute&) - { - os << "))" << endl; - } - - virtual void - set_raises (SemanticGraph::ReadAttribute&) - { - } - - virtual void - post (SemanticGraph::ReadAttribute& a) - { - os << "{"; - - string swap_option = ctx.cl ().get_value ("custom-container", ""); - bool swapping = (swap_option == "upgradeable"); - - if (swapping) - { - this->gen_swapping_get (a); - } - - os << "return this->executor_->" << a.name () << " (" << endl - << STRS[ENV_SNGL_ARG] << ");" << endl - << "}"; - } - - virtual void - comma (SemanticGraph::ReadAttribute&) - { - os << "," << endl; - } - - protected: - T& scope_; - - private: - ReturnTypeNameEmitter read_type_name_emitter_; - TypeNameEmitter type_name_emitter_; - AceCheckReturnEmitter ace_check_return_emitter_; - Traversal::Belongs read_belongs_; - Traversal::Belongs ace_check_return_belongs_; - Traversal::GetRaises get_raises_; - }; - - // Generates operations associated with readonly attributes. - // @@@ (JP) Need to support exceptions. - template <typename T> - struct ReadOnlyAttributeEmitter : Traversal::ReadAttribute, - EmitterBase - { - ReadOnlyAttributeEmitter (Context& c, - T& scope) - : EmitterBase (c), - scope_ (scope), - read_type_name_emitter_ (c.os ()), - ace_check_return_emitter_ (c.os ()) - { - read_belongs_.node_traverser (read_type_name_emitter_); - ace_check_return_belongs_.node_traverser (ace_check_return_emitter_); - } - - // Overridden by facet attribute emitter to do nothing. - - virtual void - gen_swapping_get (SemanticGraph::ReadAttribute& a) - { - os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"; - - Traversal::ReadAttribute::belongs (a, ace_check_return_belongs_); - - os << endl; - } - - virtual void - name (SemanticGraph::ReadAttribute& a) - { - os << scope_.name () << "_Servant::" << a.name (); - } - - virtual void - traverse (SemanticGraph::ReadAttribute& a) - { - // Does nothing here, overridden for facet attributes. - this->pre (a); - - Traversal::ReadAttribute::belongs (a, read_belongs_); - - os << endl; - - // Overridden for facet attributes. - this->name (a); - - os << " (" << 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) - { - this->gen_swapping_get (a); - } - - os << "return this->executor_->" << a.name () << " (" << endl - << STRS[ENV_SNGL_ARG] << ");" << endl - << "}"; - } - - protected: - T& scope_; - - private: - ReturnTypeNameEmitter read_type_name_emitter_; - AceCheckReturnEmitter ace_check_return_emitter_; - Traversal::Belongs read_belongs_; - Traversal::Belongs ace_check_return_belongs_; - }; - struct FacetEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -860,12 +311,15 @@ namespace }; struct FacetWriteAttributeEmitter - : WriteAttributeEmitter<SemanticGraph::Interface> + : 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) - : WriteAttributeEmitter<SemanticGraph::Interface> (c, i, false) + : WriteAttributeSourceEmitter<SemanticGraph::Interface> (c, + i, + false, + false) {} virtual void @@ -873,7 +327,7 @@ namespace { os << "template <typename T>" << endl; - WriteAttributeEmitter<SemanticGraph::Interface>::pre (a); + WriteAttributeSourceEmitter<SemanticGraph::Interface>::pre (a); } virtual void @@ -890,11 +344,11 @@ namespace }; struct FacetAttributeEmitter - : AttributeEmitter<SemanticGraph::Interface> + : AttributeSourceEmitter<SemanticGraph::Interface> { FacetAttributeEmitter (Context& c, SemanticGraph::Interface& i) - : AttributeEmitter<SemanticGraph::Interface> (c, i) + : AttributeSourceEmitter<SemanticGraph::Interface> (c, i) {} // ReadWriteAttribute @@ -919,7 +373,7 @@ namespace { os << "template <typename T>" << endl; - AttributeEmitter<SemanticGraph::Interface>::pre (a); + AttributeSourceEmitter<SemanticGraph::Interface>::pre (a); } virtual void @@ -944,7 +398,7 @@ namespace { os << "template <typename T>" << endl; - AttributeEmitter<SemanticGraph::Interface>::pre (a); + AttributeSourceEmitter<SemanticGraph::Interface>::pre (a); } virtual void @@ -967,9 +421,9 @@ namespace << i.scoped_name ().scope_name () << "::CCM_" << i.name () << "_ptr executor," << endl << "::Components::CCMContext_ptr c)" << endl - << ": executor_ (" << i.scoped_name ().scope_name () << "::CCM_" + << " : executor_ ( " << i.scoped_name ().scope_name () << "::CCM_" << i.name () << "::_duplicate (executor))," << endl - << "ctx_ (::Components::CCMContext::_duplicate (c))" << endl + << " ctx_ ( ::Components::CCMContext::_duplicate (c))" << endl << "{" << "}"; @@ -1001,15 +455,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1018,9 +472,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -1030,32 +484,32 @@ namespace } os << "template <typename T>" << endl - << "CORBA::Object_ptr" << endl + << "::CORBA::Object_ptr" << endl << i.name () << "_Servant_T<T>::_get_component (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << "ACE_THROW_SPEC ((CORBA::SystemException))" << 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 + << " " << 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] << ");" << 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 + << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl + << "if (! ::CORBA::is_nil (ec.in ()))" << endl << "{" << "return ec->get_CCM_object (" << endl - << STRS[ENV_SNGL_ARG] << ");" << endl + << STRS[ENV_SNGL_ARG] << ");" << "}" - << STRS[ACE_TR] << " (CORBA::INTERNAL (), 0);" << endl + << STRS[ACE_TR] << " ( ::CORBA::INTERNAL (), 0);" << endl << "}" << endl; i.context ().set ("facet_src_gen", true); @@ -1078,8 +532,8 @@ namespace { ContextPortsEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), + type_name_emitter_ (c), + simple_type_name_emitter_ (c), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); @@ -1114,21 +568,22 @@ namespace os << "_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "," << endl << STRS[EXCP_IC] << "))" << endl << "{" - << "if (!CORBA::is_nil (this->ciao_uses_" + << "if (! ::CORBA::is_nil (this->ciao_uses_" << u.name () << "_.in ()))" << endl << "{" - << "ACE_THROW (" << STRS[EXCP_AC] << " ());" << endl + << "ACE_THROW ( " << STRS[EXCP_AC] << " ());" << "}" - << "if (CORBA::is_nil (c))" << endl + << "if ( ::CORBA::is_nil (c))" << endl << "{" - << "ACE_THROW (" << STRS[EXCP_IC] << " ());" << endl + << "ACE_THROW ( " << STRS[EXCP_IC] << " ());" << "}" - << "this->ciao_uses_" << u.name () << "_ =" << endl; + << "this->ciao_uses_" << u.name () << "_ =" << endl + << " "; Traversal::SingleUserData::belongs (u, belongs_); @@ -1141,14 +596,14 @@ namespace << scope_.name () << "_Context::disconnect_" << u.name () << " (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_NC] << "))" << endl << "{" - << "if (CORBA::is_nil (this->ciao_uses_" + << "if ( ::CORBA::is_nil (this->ciao_uses_" << u.name () << "_.in ()))" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_NC] << " ()," << endl; Traversal::SingleUserData::belongs (u, belongs_); @@ -1170,27 +625,29 @@ namespace << STRS[EXCP_SNGL] << endl << "{" << u.scoped_name () << "Connections *tmp_retv = 0;" - << "ACE_NEW_THROW_EX (" << endl + << "ACE_NEW_THROW_EX (" << "tmp_retv," << endl << u.scoped_name () << "Connections (" << endl << "this->ciao_uses_" << u.name () << "_.current_size ())," << endl - << "CORBA::NO_MEMORY ());" << endl << 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 << "::CORBA::ULong i = 0;" << endl; - os << "for (ACE_Active_Map_Manager< " << endl; + os << "for (ACE_Active_Map_Manager< " << endl + << " "; Traversal::MultiUserData::belongs (u, belongs_); os << "_var>::iterator iter =" << endl - << " this->ciao_uses_" << u.name () << "_.begin ();" - << " iter != this->ciao_uses_" << u.name () << "_.end ();" - << " ++iter)" << endl + << " this->ciao_uses_" << u.name () << "_.begin ();" << endl + << "iter != this->ciao_uses_" << u.name () << "_.end ();" + << endl + << "++iter)" << endl << "{" << "ACE_Active_Map_Manager< " << endl; @@ -1206,10 +663,10 @@ namespace << STRS[ENV_ARG] << ");" << STRS[ACE_CR] << " (0);" << endl; - os << "ACE_NEW_THROW_EX (" << endl + os << "ACE_NEW_THROW_EX (" << "retv[i].ck.inout ()," << endl - << "CIAO::Map_Key_Cookie (entry.ext_id_)," << endl - << "CORBA::NO_MEMORY ());" << endl + << "::CIAO::Map_Key_Cookie (entry.ext_id_)," << endl + << "::CORBA::NO_MEMORY ());" << endl << "++i;" << endl << "}"; @@ -1224,14 +681,15 @@ namespace os << "_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "," << endl << STRS[EXCP_IC] << "))" << endl << "{" - << "if (CORBA::is_nil (c))" << endl + << "if ( ::CORBA::is_nil (c))" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" << endl + << STRS[ACE_TR] << " ( " + << STRS[EXCP_IC] << " (), 0);" << endl << "}"; Traversal::MultiUserData::belongs (u, belongs_); @@ -1246,16 +704,17 @@ namespace os << "if (this->ciao_uses_" << u.name () << "_.bind (conn.in (), key) == -1)" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" << endl + << STRS[ACE_TR] << " ( " + << STRS[EXCP_IC] << " (), 0);" << endl << "}"; os << "conn._retn ();" << endl; os << STRS[COMP_CK] << " * ck = 0;" - << "ACE_NEW_THROW_EX (" << endl + << "ACE_NEW_THROW_EX (" << "ck," << endl - << "CIAO::Map_Key_Cookie (key)," << endl - << "CORBA::NO_MEMORY ());" << endl; + << "::CIAO::Map_Key_Cookie (key)," << endl + << "::CORBA::NO_MEMORY ());" << endl; os << "return ck;" << endl @@ -1268,7 +727,7 @@ namespace << u.name () << " (" << endl << STRS[COMP_CK] << " * ck" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IC] << "))" << endl << "{"; @@ -1278,10 +737,10 @@ namespace os << "_var retv;" << "ACE_Active_Map_Manager_Key key;" << endl; - os << "if (ck == 0 || ! CIAO::Map_Key_Cookie::extract (ck, key))" + os << "if (! CIAO::Map_Key_Cookie::extract (ck, key))" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " ()," << endl; Traversal::MultiUserData::belongs (u, belongs_); @@ -1292,7 +751,7 @@ namespace os << "if (this->ciao_uses_" << u.name () << "_.unbind (key, retv) != 0)" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " ()," << endl; Traversal::MultiUserData::belongs (u, belongs_); @@ -1317,15 +776,16 @@ namespace << STRS[ENV_SRC] << ")" << endl << STRS[EXCP_SNGL] << endl << "{" - << "for (ACE_Active_Map_Manager< " << endl; //@@ gcc bug + << "for (ACE_Active_Map_Manager< " << endl + << " "; Traversal::PublisherData::belongs (p, belongs_); os << "Consumer_var>::iterator iter =" << endl - << "this->ciao_publishes_" << p.name () - << "_map_.begin ();" + << " this->ciao_publishes_" << p.name () + << "_map_.begin ();" << endl << "iter != this->ciao_publishes_" << p.name () - << "_map_.end ();" + << "_map_.end ();" << endl << "++iter)" << endl << "{" << "(*iter).int_id_->push_"; @@ -1339,11 +799,11 @@ namespace << "}"; os << "for (ACE_Active_Map_Manager< " << endl - << STRS[COMP_ECB] << "_var>::iterator giter =" << endl - << "this->ciao_publishes_" << p.name () - << "_generic_map_.begin ();" + << " " << 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 ();" + << "_generic_map_.end ();" << endl << "++giter)" << endl << "{" << "(*giter).int_id_->push_event" << " (" << endl @@ -1361,18 +821,19 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "))" << endl << "{" - << "if (CORBA::is_nil (c))" << endl + << "if ( ::CORBA::is_nil (c))" << endl << "{" - << STRS[ACE_TR] << " (CORBA::BAD_PARAM (), 0);" << endl + << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), 0);" << endl << "}"; Traversal::PublisherData::belongs (p, belongs_); - os<< "Consumer_var sub =" << endl; + os << "Consumer_var sub =" << endl + << " "; Traversal::PublisherData::belongs (p, belongs_); @@ -1382,10 +843,10 @@ namespace << "_map_.bind (sub.in (), key);" << "sub._retn ();" << endl << STRS[COMP_CK] << " * retv = 0;" - << "ACE_NEW_THROW_EX (" << endl + << "ACE_NEW_THROW_EX (" << "retv," << endl << "::CIAO::Map_Key_Cookie (key)," << endl - << "CORBA::NO_MEMORY ());" << endl + << "::CORBA::NO_MEMORY ());" << endl << "return retv;" << endl << "}"; @@ -1394,26 +855,26 @@ namespace << p.name () << "_generic (" << endl << STRS[COMP_ECB] << "_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "))" << endl << "{" - << "if (CORBA::is_nil (c))" << endl + << "if ( ::CORBA::is_nil (c))" << endl << "{" - << STRS[ACE_TR] << " (CORBA::BAD_PARAM (), 0);" << endl + << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), 0);" << endl << "}"; os << STRS[COMP_ECB] << "_var sub =" << endl - << STRS[COMP_ECB] << "::_duplicate (c);" << 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 (" << endl + << "ACE_NEW_THROW_EX (" << "retv," << endl << "::CIAO::Map_Key_Cookie (key)," << endl - << "CORBA::NO_MEMORY ());" << endl + << "::CORBA::NO_MEMORY ());" << endl << "return retv;" << endl << "}"; @@ -1424,7 +885,7 @@ namespace << p.name () << " (" << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IC] << "))" << endl << "{" @@ -1432,7 +893,7 @@ namespace << "if (ck == 0 || ::CIAO::Map_Key_Cookie::extract (ck, key) == false)" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " ()," << endl; Traversal::PublisherData::belongs (p, belongs_); @@ -1454,7 +915,7 @@ namespace os << "if (this->ciao_publishes_" << p.name () << "_generic_map_.unbind (key, ecb) != 0)" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " ()," << endl; Traversal::PublisherData::belongs (p, belongs_); @@ -1500,19 +961,19 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "))" << endl << "{" - << "if (CORBA::is_nil (c))" << endl + << "if ( ::CORBA::is_nil (c))" << endl << "{" - << "ACE_THROW (CORBA::BAD_PARAM ());" << endl - << "}" << endl - << "if (! CORBA::is_nil (this->ciao_emits_" << e.name () + << "ACE_THROW ( ::CORBA::BAD_PARAM ());" << endl + << "}" + << "if (! ::CORBA::is_nil (this->ciao_emits_" << e.name () << "_consumer_.in ()))" << endl << "{" - << "ACE_THROW (" << STRS[EXCP_AC] << " ());" << endl - << "}" << endl + << "ACE_THROW ( " << STRS[EXCP_AC] << " ());" << endl + << "}" << "this->ciao_emits_" << e.name () << "_consumer_ = " << endl; @@ -1527,27 +988,27 @@ namespace << scope_.name () << "_Context::disconnect_" << e.name () << " (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_NC] << "))" << endl << "{" - << "if (CORBA::is_nil (this->ciao_emits_" << e.name () + << "if ( ::CORBA::is_nil (this->ciao_emits_" << e.name () << "_consumer_.in ()))" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_NC] << " ()," << endl; Traversal::EmitterData::belongs (e, belongs_); os << "Consumer::_nil ());" << endl - << "}" << endl + << "}" << "return this->ciao_emits_" << e.name () << "_consumer_._retn ();" << endl << "}"; } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; Traversal::Belongs belongs_; Traversal::Belongs simple_belongs_; @@ -1560,7 +1021,7 @@ namespace { SwappableGetConsumersEmitter (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -1573,10 +1034,10 @@ namespace << "{" << "_ciao_size = this->ciao_publishes_" << p.name () << "_map_.current_size ();" << endl - << "ACE_NEW_THROW_EX (" << endl + << "ACE_NEW_THROW_EX (" << "tmp," << endl << STRS[COMP_CD] << " (_ciao_size)," << endl - << "CORBA::NO_MEMORY ());" << endl + << "::CORBA::NO_MEMORY ());" << endl << "retval = tmp;" << "retval->length (_ciao_size);" << endl << "ACE_Active_Map_Manager<" << endl; @@ -1586,12 +1047,13 @@ namespace os << "Consumer_var>::iterator end =" << endl << " this->ciao_publishes_" << p.name () << "_map_.end ();" << endl - << "for (ACE_Active_Map_Manager<" << endl; + << "for (ACE_Active_Map_Manager<" << endl + << " "; Traversal::PublisherData::belongs (p, belongs_); os << "Consumer_var>::iterator iter =" << endl - << " this->ciao_publishes_" << p.name () + << " this->ciao_publishes_" << p.name () << "_map_.begin ();" << "iter != end;" << "++iter)" << endl @@ -1612,15 +1074,15 @@ namespace << "e.int_id_.in ()" << endl << STRS[ENV_ARG] << ");" << STRS[ACE_CR] << " (0);" << endl - << "if (CORBA::is_nil (c.in ()))" + << "if ( ::CORBA::is_nil (c.in ()))" << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);" << "}" << "::Components::ConsumerDescription *cd = 0;" - << "ACE_NEW_THROW_EX (" << endl + << "ACE_NEW_THROW_EX (" << "cd," << endl << "OBV_Components::ConsumerDescription ()," << endl - << "CORBA::NO_MEMORY ());" << endl + << "::CORBA::NO_MEMORY ());" << endl << "::Components::ConsumerDescription_var safe = cd;" << "safe->name (\"\");" << "safe->type_id (\"\");" @@ -1638,7 +1100,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -1736,23 +1198,23 @@ namespace << t.name () << "_Context::get_registered_consumers (" << endl << "const char *publisher_name" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << 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[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; + << 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. { @@ -1771,7 +1233,7 @@ namespace component_emitter.traverse (t); } - os << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" + os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << "}"; } @@ -1796,12 +1258,12 @@ namespace // Nested classes used by ServantEmitter. private: - struct NavigationEmitsEmitter : Traversal::EmitterData, - EmitterBase + struct EmitsConnectEmitter : Traversal::EmitterData, + EmitterBase { - NavigationEmitsEmitter (Context& c) + EmitsConnectEmitter (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -1815,17 +1277,18 @@ namespace Traversal::EmitterData::belongs (t, belongs_); - os << "Consumer_var _ciao_consumer =" << endl; + os << "Consumer_var _ciao_consumer =" << endl + << " "; Traversal::EmitterData::belongs (t, belongs_); os << "Consumer::_narrow (" << endl - << "consumer" << endl - << STRS[ENV_ARG] << ");" + << " consumer" << endl + << " " << STRS[ENV_ARG] << ");" << "ACE_CHECK;" << endl - << "if (::CORBA::is_nil (_ciao_consumer.in ()))" << endl + << "if ( ::CORBA::is_nil (_ciao_consumer.in ()))" << endl << "{" - << "ACE_THROW (" << STRS[EXCP_IC] << " ());" + << "ACE_THROW ( " << STRS[EXCP_IC] << " ());" << endl << "}" << "this->connect_" << t.name () @@ -1837,10 +1300,30 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + 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 () << "\") == 0)" << endl + << "{" + << "return this->disconnect_" << t.name () + << " (" << STRS[ENV_SNGL_ARG] << ");" << endl + << "}"; + } + }; + struct NavigationGetFacetExecEmitter : Traversal::ProviderData, EmitterBase { @@ -1866,7 +1349,7 @@ namespace PublishesEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - type_name_emitter_ (c.os ()), + type_name_emitter_ (c), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); @@ -1883,7 +1366,7 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "))" << endl << "{"; @@ -1908,7 +1391,7 @@ namespace << "_Servant::subscribe_" << p.name () << "_generic (" << endl << STRS[COMP_ECB] << "_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "))" << endl << "{"; @@ -1932,7 +1415,7 @@ namespace << "_Servant::unsubscribe_" << p.name () << " (" << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IC] << "))" << endl << "{"; @@ -1940,7 +1423,7 @@ namespace if (swapping) { os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" - << STRS[ACE_CR] << " ("; + << STRS[ACE_CR] << " ( "; Traversal::PublisherData::belongs (p, belongs_); @@ -1955,7 +1438,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; SemanticGraph::Component& scope_; }; @@ -1966,7 +1449,7 @@ namespace { UsesConnectEmitter (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -1988,9 +1471,9 @@ namespace << "connection" << endl << STRS[ENV_ARG] << ");" << STRS[ACE_CR] << " (0);" << endl - << "if (::CORBA::is_nil (_ciao_conn.in ()))" << endl + << "if ( ::CORBA::is_nil (_ciao_conn.in ()))" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);" << endl << "}" << "// Simplex connect." << endl @@ -2019,9 +1502,9 @@ namespace << "connection" << endl << STRS[ENV_ARG] << ");" << STRS[ACE_CR] << " (0);" << endl - << "if (::CORBA::is_nil (_ciao_conn.in ()))" << endl + << "if ( ::CORBA::is_nil (_ciao_conn.in ()))" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);" << endl << "}" << "// Multiplex connect." << endl @@ -2032,7 +1515,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -2064,6 +1547,12 @@ namespace << u.name () << "\") == 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 @@ -2077,7 +1566,7 @@ namespace { UsesEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - type_name_emitter_ (c.os ()), + type_name_emitter_ (c), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); @@ -2094,7 +1583,7 @@ namespace os << "_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "," << endl << STRS[EXCP_IC] << "))" << endl @@ -2111,7 +1600,7 @@ namespace << scope_.name () << "_Servant::disconnect_" << u.name () << " (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_NC] << "))" << endl << "{" @@ -2146,7 +1635,7 @@ namespace os << "_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "," << endl << STRS[EXCP_IC] << "))" << endl @@ -2164,7 +1653,7 @@ namespace << u.name () << " (" << endl << STRS[COMP_CK] << " * ck" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IC] << "))" << endl << "{" @@ -2188,7 +1677,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; SemanticGraph::Component& scope_; }; @@ -2198,7 +1687,7 @@ namespace { PublishesSubscribeEmitter (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()) + type_name_emitter_ (c) { belongs_.node_traverser (type_name_emitter_); } @@ -2212,7 +1701,8 @@ namespace Traversal::PublisherData::belongs (p, belongs_); - os << "Consumer_var sub =" << endl; + os << "Consumer_var sub =" << endl + << " "; Traversal::PublisherData::belongs (p, belongs_); @@ -2221,15 +1711,16 @@ namespace << STRS[ENV_ARG] << ");" << STRS[ACE_CR] << " (0);" << endl; - os << "if (CORBA::is_nil (sub.in ()))" << endl + os << "if ( ::CORBA::is_nil (sub.in ()))" << endl << "{" - << "CORBA::Boolean substitutable =" << endl - << "subscribe->ciao_is_substitutable (" << 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[ENV_ARG] << ");" << STRS[ACE_CR] << " (0);" << endl; os << "if (substitutable)" << endl @@ -2240,7 +1731,7 @@ namespace << "}" << "else" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);" << endl << "}" << "}" << "else" << endl @@ -2253,7 +1744,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -2283,7 +1774,7 @@ namespace { EmitsEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - type_name_emitter_ (c.os ()), + type_name_emitter_ (c), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); @@ -2300,7 +1791,7 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "))" << endl << "{" @@ -2316,7 +1807,7 @@ namespace << scope_.name () << "_Servant::disconnect_" << e.name () << " (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_NC] << "))" << endl << "{" @@ -2327,25 +1818,24 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; SemanticGraph::Component& scope_; }; - struct ServantTypeNameEmitter : Traversal::Type + struct ServantTypeNameEmitter : Traversal::Type, + EmitterBase { - ServantTypeNameEmitter (std::ostream& os_) - : os (os_) - {} + ServantTypeNameEmitter (Context& c) + : EmitterBase (c) + { + } virtual void traverse (SemanticGraph::Type& t) { os << t.name () << "_Servant"; } - - private: - std::ostream& os; }; struct FacetProvidesEmitter : Traversal::ProviderData, @@ -2354,11 +1844,11 @@ namespace FacetProvidesEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - servant_type_name_emitter_ (c.os ()), - enclosing_type_name_emitter_ (c.os ()), - repo_id_emitter_ (c.os ()), + type_name_emitter_ (c), + simple_type_name_emitter_ (c), + servant_type_name_emitter_ (c), + enclosing_type_name_emitter_ (c), + repo_id_emitter_ (c), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); @@ -2386,7 +1876,7 @@ namespace if (swapping) { os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" - << STRS[ACE_CR] << " ("; + << STRS[ACE_CR] << " ( "; Traversal::ProviderData::belongs (p, belongs_); @@ -2404,9 +1894,9 @@ namespace << "}"; os << "::CORBA::Object_var obj =" << endl - << "this->provide_" << p.name () << "_i (" + << " this->provide_" << p.name () << "_i (" << STRS[ENV_SNGL_ARG] << ");" - << STRS[ACE_CR] << " ("; + << STRS[ACE_CR] << " ( "; Traversal::ProviderData::belongs (p, belongs_); @@ -2417,14 +1907,15 @@ namespace Traversal::ProviderData::belongs (p, belongs_); - os << "_var fo =" << endl; + os << "_var fo =" << endl + << " "; Traversal::ProviderData::belongs (p, belongs_); - os << "::_narrow (" << endl + os << "::_narrow (" << "obj.in ()" << endl << STRS[ENV_ARG] << ");" - << STRS[ACE_CR] << " ("; + << STRS[ACE_CR] << " ( "; Traversal::ProviderData::belongs (p, belongs_); @@ -2447,7 +1938,7 @@ namespace << STRS[EXCP_SNGL] << endl << "{" << "::CORBA::Object_ptr ret =" << endl - << "this->lookup_facet (\"" << p.name () << "\");" << endl; + << " this->lookup_facet (\"" << p.name () << "\");" << endl; os << "if (! ::CORBA::is_nil (ret))" << endl << "{" @@ -2495,18 +1986,18 @@ namespace os << "ACE_CString obj_id (this->ins_name_);" << "obj_id += \"_" << p.name () << "\";" << endl; - os << "ACE_NEW_THROW_EX ( " << endl - << " tmp," << endl - << " MACRO_MADNESS_TYPEDEF (" << endl - << " obj_id.c_str ()," << endl - << " \"" << p.name () << "\"," << endl - << " CIAO::Port_Activator::Facet," << endl - << " 0," << endl - << " this->context_," << endl - << " this)," << endl - << " CORBA::NO_MEMORY ());" << endl; - - os << "CIAO::Servant_Activator *sa = " << endl + os << "ACE_NEW_THROW_EX (" + << "tmp," << endl + << "MACRO_MADNESS_TYPEDEF (" << endl + << "obj_id.c_str ()," << endl + << "\"" << p.name () << "\"," << 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 << "{" @@ -2519,29 +2010,34 @@ namespace os << "::CORBA::Object_var obj =" << endl << " this->container_->generate_reference (" << endl - << " obj_id.c_str ()," << 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] << " ("; + << " ::CIAO::Container::Facet_Consumer" << endl + << " " << STRS[ENV_ARG] << ");" + << STRS[ACE_CR] << " ( "; Traversal::ProviderData::belongs (p, belongs_); os << "::_nil ());" << endl - << "this->add_facet (" << endl - << "\"" << p.name () << "\"," << endl - << "obj.in ());" << endl; + << "this->add_facet (\"" << p.name () << "\"," << endl + << "obj.in ()" << endl + << STRS[ENV_ARG] << ");" + << STRS[ACE_CR] << " ( "; + + Traversal::ProviderData::belongs (p, belongs_); + + os << "::_nil ());" << endl; os << "return obj._retn ();" << endl << "}"; } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; ServantTypeNameEmitter servant_type_name_emitter_; EnclosingTypeNameEmitter enclosing_type_name_emitter_; @@ -2559,9 +2055,9 @@ namespace { ConsumesEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - repo_id_emitter_ (c.os ()), + type_name_emitter_ (c), + simple_type_name_emitter_ (c), + repo_id_emitter_ (c), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); @@ -2590,10 +2086,10 @@ namespace << 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 () + << " : 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 () + << " ctx_ ( " << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () << "_Context::_duplicate (c))" << endl << "{" @@ -2613,7 +2109,7 @@ namespace << "{" << "}"; - os << "CORBA::Object_ptr" << endl + os << "::CORBA::Object_ptr" << endl << scope_.name () << "_Servant::"; Traversal::ConsumerData::belongs (c, simple_belongs_); @@ -2661,14 +2157,15 @@ namespace << "_Servant::push_event (" << endl << "::Components::EventBase *ev" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_BET] << "))" << endl << "{"; Traversal::ConsumerData::belongs (c, belongs_); - os << "_var ev_type =" << endl; + os << "_var ev_type =" << endl + << " "; Traversal::ConsumerData::belongs (c, belongs_); @@ -2684,7 +2181,7 @@ namespace << STRS[ENV_ARG] << ");" << endl << "return;" << endl << "}" - << "ACE_THROW (" << STRS[EXCP_BET] << " ());" << endl + << "ACE_THROW ( " << STRS[EXCP_BET] << " ());" << endl << "}"; os << "CORBA::Boolean" << endl @@ -2700,21 +2197,21 @@ namespace << "{" << "if (event_repo_id == 0)" << endl << "{" - << STRS[ACE_TR] << " (CORBA::BAD_PARAM (), false);" << 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] << ");" + << " " << 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] << ");" + << " orb->lookup_value_factory (" << endl + << " event_repo_id" << endl + << " " << STRS[ENV_ARG] << ");" << STRS[ACE_CR] << " (false);" << endl; os << "if (f == 0)" << endl @@ -2722,7 +2219,7 @@ namespace << "return false;" << endl << "}" << "CORBA::ValueBase_var v =" << endl - << "f->create_for_unmarshal (" << STRS[ENV_SNGL_ARG] << ");" + << " f->create_for_unmarshal (" << STRS[ENV_SNGL_ARG] << ");" << STRS[ACE_CR] << " (false);" << endl; os << "f->_remove_ref ();" << endl; @@ -2759,9 +2256,9 @@ namespace << "}"; os << "::Components::EventConsumerBase_var obj =" << endl - << "this->get_consumer_" << c.name () << "_i (" << endl - << STRS[ENV_SNGL_ARG] << ");" - << STRS[ACE_CR] << " ("; + << " this->get_consumer_" << c.name () << "_i (" << endl + << " " << STRS[ENV_SNGL_ARG] << ");" + << STRS[ACE_CR] << " ( "; Traversal::ConsumerData::belongs (c, belongs_); @@ -2769,14 +2266,15 @@ namespace Traversal::ConsumerData::belongs (c, belongs_); - os << "Consumer_var eco =" << endl; + os << "Consumer_var eco =" << endl + << " "; Traversal::ConsumerData::belongs (c, belongs_); os << "Consumer::_narrow (" << endl - << "obj.in ()" << endl - << STRS[ENV_ARG] << ");" - << STRS[ACE_CR] << " ("; + << " obj.in ()" << endl + << " " << STRS[ENV_ARG] << ");" + << STRS[ACE_CR] << " ( "; Traversal::ConsumerData::belongs (c, belongs_); @@ -2799,14 +2297,14 @@ namespace << STRS[EXCP_SNGL] << endl << "{" << "::Components::EventConsumerBase_ptr ret =" << endl - << "this->lookup_consumer (\"" << c.name () << "\");" << endl; + << " this->lookup_consumer (\"" << c.name () << "\");" << endl; os << "if (! ::CORBA::is_nil (ret))" << endl << "{" << "return ret;" << "}"; - os << "CIAO::Port_Activator_T<" << endl; + os << "::CIAO::Port_Activator_T<" << endl; os << scope_.name () << "_Servant::"; @@ -2845,19 +2343,19 @@ namespace os << "ACE_CString obj_id (this->ins_name_);" << "obj_id += \"_" << c.name () << "\";" << endl; - os << "ACE_NEW_THROW_EX ( " << endl - << " tmp," << endl - << " MACRO_MADNESS_TYPEDEF (" << endl - << " obj_id.c_str ()," << endl - << " \"" << c.name () << "\"," << 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 + os << "ACE_NEW_THROW_EX (" << endl + << "tmp," << endl + << "MACRO_MADNESS_TYPEDEF (" + << "obj_id.c_str ()," << endl + << "\"" << c.name () << "\"," << 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 "; @@ -2869,40 +2367,45 @@ namespace os << "::CORBA::Object_var obj =" << endl << " this->container_->generate_reference (" << endl - << " obj_id.c_str ()," << 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] << " ("; + << " ::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] << " ("; + << " ::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 (" << endl - << "\"" << c.name () << "\"," << endl - << "ecb.in ());" << endl; + os << "this->add_consumer (\"" << c.name () << "\"," << 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: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; ConsumerRepoIdEmitter repo_id_emitter_; Traversal::Belongs belongs_; @@ -2918,8 +2421,9 @@ namespace { RegisterValueFactoryEmitter (Context& c) : EmitterBase (c), - type_name_emitter_ (c.os ()), - cerr_type_name_emitter_ (cerr), + c_ (cerr, c.export_macro (), c.cl ()), + type_name_emitter_ (c), + cerr_type_name_emitter_ (c_), gen_factory_ (true) { belongs_.node_traverser (type_name_emitter_); @@ -3002,8 +2506,9 @@ namespace } private: - TypeNameEmitter type_name_emitter_; - TypeNameEmitter cerr_type_name_emitter_; + Context c_; + FullTypeNameEmitter type_name_emitter_; + FullTypeNameEmitter cerr_type_name_emitter_; Traversal::Belongs belongs_; Traversal::Belongs cerr_belongs_; bool gen_factory_; @@ -3088,8 +2593,8 @@ namespace traverse (SemanticGraph::Provider& p) { os << "obj_var =" << endl - << "this->provide_" << p.name () << "_i (" << endl - << STRS[ENV_SNGL_ARG] << ");" + << " this->provide_" << p.name () << "_i (" << endl + << " " << STRS[ENV_SNGL_ARG] << ");" << "ACE_CHECK;" << endl; } @@ -3112,8 +2617,8 @@ namespace traverse (SemanticGraph::Consumer& p) { os << "ecb_var =" << endl - << "this->get_consumer_" << p.name () << "_i (" << endl - << STRS[ENV_SNGL_ARG] << ");" + << " this->get_consumer_" << p.name () << "_i (" << endl + << " " << STRS[ENV_SNGL_ARG] << ");" << "ACE_CHECK;" << endl; } }; @@ -3131,13 +2636,231 @@ namespace { Traversal::Belongs delegate_belongs; - SetAttributeDelegationEmitter delegater (ctx.os (), a); + 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 () << "\"," << 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 () << "\"," << 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 () << "\"," << 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 () << "\"," << 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) @@ -3159,7 +2882,7 @@ namespace << " comp_svnt_base (exe, h, hs, c)," << endl << " ins_name_ (ins_name)" << endl << "{" - << "ACE_NEW (" << endl + << "ACE_NEW (" << "this->context_," << endl << t.name () << "_Context (h, c, this));" << endl; @@ -3185,9 +2908,9 @@ namespace os << "ACE_TRY_NEW_ENV" << endl << "{" << "::Components::SessionComponent_var scom =" << endl - << "::Components::SessionComponent::_narrow (" << endl - << "exe" << endl - << STRS[ENV_ARG] << ");" + << " ::Components::SessionComponent::_narrow (" << endl + << " exe" << endl + << " " << STRS[ENV_ARG] << ");" << "ACE_TRY_CHECK;" << endl << "if (! ::CORBA::is_nil (scom.in ()))" << endl << "{" @@ -3229,7 +2952,7 @@ namespace << "ACE_CHECK;" << endl; } - os << "for (CORBA::ULong i = 0; i < descr.length (); ++i)" << 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; @@ -3314,7 +3037,7 @@ namespace << "const char *name," << endl << "::CORBA::Object_ptr connection" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl @@ -3333,7 +3056,7 @@ namespace << STRS[ACE_UA] << " (connection);" << endl << "if (name == 0)" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl << "}"; // Generate IF block in connect operation for each receptacle. @@ -3353,15 +3076,15 @@ namespace component_emitter.traverse (t); } - os << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" << endl + os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl << "}"; - os << "CORBA::Object_ptr" << 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] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl @@ -3373,13 +3096,13 @@ namespace if (swapping) { os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" - << STRS[ACE_CR] << " (CORBA::Object::_nil ());" << endl; + << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl; } os << "if (name == 0)" << endl << "{" - << STRS[ACE_TR] << " (" << endl - << STRS[EXCP_IN] << " ()," << endl + << STRS[ACE_TR] << " ( " + << STRS[EXCP_BP] << "," << endl << "::CORBA::Object::_nil ());" << endl << "}"; @@ -3400,9 +3123,61 @@ namespace component_emitter.traverse (t); } - os << STRS[ACE_TR] << " (" << endl + os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " ()," << endl - << "::CORBA::Object::_nil ());" << 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. @@ -3428,7 +3203,7 @@ namespace << "const char * emitter_name," << endl << STRS[COMP_ECB] << "_ptr consumer" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_AC] << "," << endl @@ -3438,12 +3213,12 @@ namespace if (swapping) { os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" - << "ACE_CHECK;" << endl; + << STRS[ACE_CK] << ";" << endl; } os << "if (emitter_name == 0)" << endl << "{" - << "ACE_THROW (::CORBA::BAD_PARAM ());" << endl + << STRS[ACE_TH] << " ( " << STRS[EXCP_BP] << ");" << endl << "}"; // Generate an IF block for each 'emits' declaration. @@ -3457,23 +3232,168 @@ namespace component_emitter.edge_traverser (defines); component_emitter.edge_traverser (inherits); - NavigationEmitsEmitter navigation_emits_emitter (ctx); - defines.node_traverser (navigation_emits_emitter); + EmitsConnectEmitter emits_connect_emitter (ctx); + defines.node_traverser (emits_connect_emitter); component_emitter.traverse (t); } os << STRS[ACE_UA] << " (consumer);" - << "ACE_THROW (" + << 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] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl @@ -3490,7 +3410,7 @@ namespace << STRS[ACE_UA] << " (subscribe);" << endl << "if (publisher_name == 0)" << endl << "{" - << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" + << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl << "}"; @@ -3511,7 +3431,7 @@ namespace component_emitter.traverse (t); } - os << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" << endl + os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl << "}"; os << STRS[COMP_ECB] << "_ptr" << endl @@ -3520,7 +3440,7 @@ namespace << "const char *publisher_name," << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl + << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "))" << endl @@ -3529,7 +3449,7 @@ namespace if (swapping) { os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");" - << STRS[ACE_CR] << " (" << STRS[COMP_ECB] + << STRS[ACE_CR] << " ( " << STRS[COMP_ECB] << "::_nil ());" << endl; } @@ -3537,7 +3457,7 @@ namespace << STRS[ACE_UA] << " (ck);" << endl << "if (publisher_name == 0)" << endl << "{" - << STRS[ACE_TR] << " (" << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " ()," << endl << STRS[COMP_ECB] << "::_nil ());" << endl << "}"; @@ -3559,7 +3479,7 @@ namespace component_emitter.traverse (t); } - os << STRS[ACE_TR] << " (" << endl + os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " ()," << endl << STRS[COMP_ECB] << "::_nil ());" << endl << "}"; @@ -3581,25 +3501,24 @@ namespace component_emitter.traverse (t); } - os << "CORBA::Object_ptr" << endl + os << "::CORBA::Object_ptr" << endl << t.name () << "_Servant::get_facet_executor (" << endl << "const char *name" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << 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; + << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl; } os << "if (name == 0)" << endl << "{" - << STRS[ACE_TR] << " (" << endl - << "::CORBA::BAD_PARAM ()," << endl + << STRS[ACE_TR] << " ( " << STRS[EXCP_BP] << "," << endl << "::CORBA::Object::_nil ());" << endl << "}"; @@ -3620,8 +3539,9 @@ namespace component_emitter.traverse (t); } - os << " return CORBA::Object::_nil ();" + os << "return ::CORBA::Object::_nil ();" << "}"; + os << "// Supported operations." << endl << endl; // Generate operations for all supported interfaces. @@ -3643,7 +3563,7 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); + AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); OperationEmitter<SemanticGraph::Component> operation_emitter (ctx, t); @@ -3657,15 +3577,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -3674,9 +3594,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -3697,7 +3617,7 @@ namespace Traversal::Defines defines; component_emitter.edge_traverser (defines); - AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); + AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); component_emitter.traverse (t); @@ -3739,8 +3659,8 @@ namespace { HomeEmitter (Context& c) : EmitterBase (c), - repo_id_emitter_ (c.os ()), - flat_name_emitter_ (c.os ()) + repo_id_emitter_ (c), + flat_name_emitter_ (c) { repo_id_manages_.node_traverser (repo_id_emitter_); flat_name_manages_.node_traverser (flat_name_emitter_); @@ -3804,10 +3724,10 @@ namespace { FactoryOperationEmitter (Context& c, SemanticGraph::Home& home) : EmitterBase (c), - return_type_name_emitter_ (c.os ()), - enclosing_type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), - type_name_emitter_ (c.os ()), + 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_); @@ -3858,7 +3778,7 @@ namespace virtual void raises_pre (SemanticGraph::HomeFactory&) { - os << STRS[EXCP_START] << endl + os << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl; } @@ -3894,7 +3814,7 @@ namespace operation_emitter.traverse (hf); } - os << STRS[ACE_CR] << " ("; + os << STRS[ACE_CR] << " ( "; Traversal::Home::manages (scope_, manages_); @@ -3918,7 +3838,7 @@ namespace << "_ciao_ec.in ()" << endl << STRS[ENV_ARG] << ");" << endl; - os << STRS[ACE_CR] << " ("; + os << STRS[ACE_CR] << " ( "; Traversal::Home::manages (scope_, manages_); @@ -3941,7 +3861,7 @@ namespace ReturnTypeNameEmitter return_type_name_emitter_; EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; Traversal::Returns returns_; Traversal::Manages enclosing_manages_; Traversal::Manages simple_manages_; @@ -3955,10 +3875,10 @@ namespace { FinderOperationEmitter (Context& c, SemanticGraph::Home& home) : EmitterBase (c), - type_name_emitter_ (c.os ()), - return_type_name_emitter_ (c.os ()), - enclosing_type_name_emitter_ (c.os ()), - simple_type_name_emitter_ (c.os ()), + 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_); @@ -4009,7 +3929,7 @@ namespace virtual void raises_pre (SemanticGraph::HomeFinder&) { - os << STRS[EXCP_START] << endl + os << STRS[EXCP_START] << " " << STRS[EXCP_SYS] << "," << endl; } @@ -4023,8 +3943,7 @@ namespace post (SemanticGraph::HomeFinder& hf) { os << "{" - << STRS[ACE_TR] << " (" << endl - << "::CORBA::NO_IMPLEMENT ()," << endl; + << STRS[ACE_TR] << " ( ::CORBA::NO_IMPLEMENT ()," << endl; Traversal::HomeFinder::returns (hf, simple_returns_); @@ -4039,7 +3958,7 @@ namespace } private: - TypeNameEmitter type_name_emitter_; + FullTypeNameEmitter type_name_emitter_; ReturnTypeNameEmitter return_type_name_emitter_; EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; @@ -4108,15 +4027,15 @@ namespace home_operation_emitter.edge_traverser (returns); home_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -4125,9 +4044,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -4155,7 +4074,7 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); + AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); OperationEmitter<SemanticGraph::Home> operation_emitter (ctx, t); @@ -4169,15 +4088,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -4186,9 +4105,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -4223,15 +4142,15 @@ namespace finder_operation_emitter.edge_traverser (returns); finder_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (os); - ParameterEmitter<Traversal::InOutParameter> inout_param (os); - ParameterEmitter<Traversal::OutParameter> out_param (os); + 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 (os); - TypeNameEmitter type_name_emitter (os); + ReturnTypeNameEmitter return_type_emitter (ctx); + FullTypeNameEmitter type_name_emitter (ctx); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -4240,9 +4159,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (os); - INOUTArgTypeNameEmitter inout_arg_emitter (os); - OUTArgTypeNameEmitter out_arg_emitter (os); + 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); @@ -4263,7 +4182,7 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); + AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); home_emitter.traverse (t); @@ -4280,7 +4199,7 @@ namespace << regex::perl_s (t.scoped_name ().str (), "/::/_/") << "_Servant (" << endl << "::Components::HomeExecutorBase_ptr p," << endl - << "CIAO::Session_Container *c," << endl + << "::CIAO::Session_Container *c," << endl << "const char *ins_name" << endl << STRS[ENV_SRC] << ")" << endl << "{" @@ -4314,30 +4233,6 @@ namespace Traversal::Manages repo_id_manages_; Traversal::Manages flat_name_manages_; }; - - //@@ There is exactly the same code in header generator. - // - struct CompositionEmitter : Traversal::Composition, EmitterBase - { - CompositionEmitter (Context& c) - : EmitterBase (c) - { - } - - virtual void - pre (Type& t) - { - ctx.composition_name (t.name ().str ()); - - os << STRS[CIDL_NS] << t.name () << "{"; - } - - virtual void - post (Type&) - { - os << "}"; - } - }; } ServantSourceEmitter::ServantSourceEmitter (std::ostream& os_, @@ -4453,9 +4348,3 @@ ServantSourceEmitter::generate (TranslationUnit& u) unit.traverse (u); } -/* - * Local Variables: - * mode: C++ - * c-basic-offset: 2 - * End: - */ diff --git a/TAO/CIAO/CIDLC/Upcase.hpp b/TAO/CIAO/CIDLC/Upcase.hpp new file mode 100644 index 00000000000..cf114dd8392 --- /dev/null +++ b/TAO/CIAO/CIDLC/Upcase.hpp @@ -0,0 +1,21 @@ +// file : CIDLC/Upcase.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef UPCASE_HPP +#define UPCASE_HPP + +#include <cctype> + +namespace +{ + // On some platforms toupper can be something other than a + // function. + int + upcase (int c) + { + return std::toupper (c); + } +} + +#endif // UPCASE_HPP diff --git a/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp new file mode 100644 index 00000000000..499cf3e4086 --- /dev/null +++ b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp @@ -0,0 +1,57 @@ +// file : CIDLC/UtilityTypeNameEmitters.cpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#include "UtilityTypeNameEmitters.hpp" + +FullTypeNameEmitter::FullTypeNameEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +FullTypeNameEmitter::traverse (SemanticGraph::Type& t) +{ + os << t.scoped_name (); +} + +// =================================================== + +SimpleTypeNameEmitter::SimpleTypeNameEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +SimpleTypeNameEmitter::traverse (SemanticGraph::Type& t) +{ + os << t.name (); +} + +// =================================================== + +EnclosingTypeNameEmitter::EnclosingTypeNameEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +EnclosingTypeNameEmitter::traverse (SemanticGraph::Type& t) +{ + os << t.scoped_name ().scope_name (); +} + +// =================================================== + +StrippedTypeNameEmitter::StrippedTypeNameEmitter (Context& c) + : EmitterBase (c) +{ +} + +void +StrippedTypeNameEmitter::traverse (SemanticGraph::Type& t) +{ + ScopedName scoped (t.scoped_name ()); + os << Name (scoped.begin () + 1, scoped.end ()); +} + diff --git a/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp new file mode 100644 index 00000000000..aece771ca69 --- /dev/null +++ b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp @@ -0,0 +1,56 @@ +// file : CIDLC/UtilityTypeNameEmitters.hpp +// author : Jeff Parsons <j.parsons@vanderbilt.edu> +// cvs-id : $Id$ + +#ifndef UTILITYTYPENAMEEMITTERS_HPP +#define UTILITYTYPENAMEEMITTERS_HPP + +#include "CCF/CIDL/SemanticGraph.hpp" +#include "CCF/CIDL/Traversal.hpp" +#include "EmitterBase.hpp" + +using namespace std; +using namespace CCF::CIDL; +using namespace CCF::CIDL::SemanticGraph; + +// Emits type's full scoped name. +struct FullTypeNameEmitter : Traversal::Type, + EmitterBase +{ + FullTypeNameEmitter (Context&); + + virtual void + traverse (SemanticGraph::Type&); +}; + +// Emits type's local name. +struct SimpleTypeNameEmitter : Traversal::Type, + EmitterBase +{ + SimpleTypeNameEmitter (Context&); + + virtual void + traverse (SemanticGraph::Type&); +}; + +// Emits name of type's enclosing scope. +struct EnclosingTypeNameEmitter : Traversal::Type, + EmitterBase +{ + EnclosingTypeNameEmitter (Context&); + + virtual void + traverse (SemanticGraph::Type&); +}; + +// Emits scoped name minus the leading double colon. +struct StrippedTypeNameEmitter : Traversal::Type, + EmitterBase +{ + StrippedTypeNameEmitter (Context&); + + virtual void + traverse (SemanticGraph::Type&); +}; + +#endif // UTILITYTYPENAMEEMITTERS_HPP diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog index 99d480aa56b..32f169b38b2 100644 --- a/TAO/CIAO/ChangeLog +++ b/TAO/CIAO/ChangeLog @@ -1,3 +1,70 @@ +Fri Mar 17 14:23:53 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu> + + * ciao/CCM_Core.mpc: + * ciao/Servant_Impl_Base.cpp: + * ciao/Servant_Impl_Base.h + + - Changed port table types from + ACE_Hash_Map_Manager_Ex<> to ACE_Array_Map<>, + which is more lightweight and makes no + allocations if no entries are added to + the table. + + - Implemented spec-defined methods + get_all_receptacles(), get_all_publishers(), + and disconnect_consumer(). + + * ciao/Servant_Impl_Utils_T.cpp: + + New file, containing implementations of new + static template methods added to class + Servant_Impl_Base, which are called in + generated code as part of the implementation + of the spec-defined methods mentioned above. + + * CCF/CCF/CIDLC/AttributeHeaderEmitters.cpp: + * CCF/CCF/CIDLC/AttributeHeaderEmitters.hpp: + * CCF/CCF/CIDLC/AttributeSourceEmitters_T.hpp: + * CCF/CCF/CIDLC/CompositionEmitter.cpp: + * CCF/CCF/CIDLC/CompositionEmitter.hpp: + * CCF/CCF/CIDLC/CorbaTypeNameEmitters.cpp: + * CCF/CCF/CIDLC/CorbaTypeNameEmitters.hpp: + * CCF/CCF/CIDLC/EmitterBase.cpp: + * CCF/CCF/CIDLC/EmitterBase.hpp: + * CCF/CCF/CIDLC/EmitterContext.cpp: + * CCF/CCF/CIDLC/EmitterContext.hpp: + * CCF/CCF/CIDLC/InterfaceEmitter.cpp: + * CCF/CCF/CIDLC/InterfaceEmitter.hpp: + * CCF/CCF/CIDLC/ModuleEmitter.cpp: + * CCF/CCF/CIDLC/ModuleEmitter.hpp: + * CCF/CCF/CIDLC/OperationHeaderEmitters.cpp: + * CCF/CCF/CIDLC/OperationHeaderEmitters.hpp: + * CCF/CCF/CIDLC/ParameterEmitter_T.hpp: + * CCF/CCF/CIDLC/Upcase.hpp: + * CCF/CCF/CIDLC/UtilityTypeNameEmitters.cpp: + * CCF/CCF/CIDLC/UtilityTypeNameEmitters.hpp: + + New files, containing common code factored + out of the C++ source files below. + + * CCF/CCF/CIDLC/CIDLC.mpc: + * CCF/CCF/CIDLC/DescriptorGenerator.cpp: + * CCF/CCF/CIDLC/ExecImplHeaderGenerator.cpp: + * CCF/CCF/CIDLC/ExecImplSourceGenerator.cpp: + * CCF/CCF/CIDLC/ExecutorMappingGenerator.cpp: + * CCF/CCF/CIDLC/Literals.cpp: + * CCF/CCF/CIDLC/Literals.hpp: + * CCF/CCF/CIDLC/ServantHeaderGenerator.cpp: + * CCF/CCF/CIDLC/ServantSourceGenerator.cpp: + + - Added new generated code as part of the + implementation of the spec-defined methods + mentioned above. + + - Added support for attribute exceptions in + code optionally generated for the stencil + executor implementation classes. + Thu Mar 16 16:31:51 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu> * ciao/CCM_Component.idl: diff --git a/TAO/CIAO/ciao/CCM_Core.mpc b/TAO/CIAO/ciao/CCM_Core.mpc index f73fb1b9b0b..c55a290a111 100644 --- a/TAO/CIAO/ciao/CCM_Core.mpc +++ b/TAO/CIAO/ciao/CCM_Core.mpc @@ -198,6 +198,7 @@ project (CIAO_DnC_Server) : orbsvcslib, portableserver, valuetype, naming, ifr_c Swapping_Servant_Home_Impl_T.cpp Dynamic_Component_Servant_T.cpp Servant_Impl_T.cpp + Servant_Impl_Utils_T.cpp Servant_Activator_T.cpp } } diff --git a/TAO/CIAO/ciao/Servant_Impl_Base.cpp b/TAO/CIAO/ciao/Servant_Impl_Base.cpp index 51c1ae27867..4dff1298c16 100644 --- a/TAO/CIAO/ciao/Servant_Impl_Base.cpp +++ b/TAO/CIAO/ciao/Servant_Impl_Base.cpp @@ -127,9 +127,9 @@ namespace CIAO PortableServer::ObjectId_var oid; - this->container_->uninstall_component ( ccmobjref.in (), - oid.out () - ACE_ENV_ARG_PARAMETER); + this->container_->uninstall_component (ccmobjref.in (), + oid.out () + ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; this->home_servant_->update_component_map (oid); @@ -173,11 +173,9 @@ namespace CIAO this->get_all_receptacles (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK_RETURN (0); - /* ::Components::ConsumerDescriptions_var consumer_desc = this->get_all_consumers (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK_RETURN (0); - */ ::Components::EmitterDescriptions_var emitter_desc = this->get_all_emitters (ACE_ENV_SINGLE_ARG_PARAMETER); @@ -189,7 +187,7 @@ namespace CIAO retv->facets (facets_desc.in ()); retv->receptacles (receptacle_desc.in ()); - // retv->consumers (consumer_desc.in ()); + retv->consumers (consumer_desc.in ()); retv->emitters (emitter_desc.in ()); retv->publishers (publisher_desc.in ()); @@ -204,7 +202,7 @@ namespace CIAO ACE_THROW_SPEC ((CORBA::SystemException, Components::InvalidName)) { - if (name == 0) + if (0 == name) { ACE_THROW_RETURN (Components::InvalidName (), CORBA::Object::_nil ()); @@ -242,7 +240,7 @@ namespace CIAO { tmp = this->lookup_facet_description (names[i].in ()); - if (tmp == 0) + if (0 == tmp) { ACE_THROW_RETURN (Components::InvalidName (), 0); @@ -267,15 +265,15 @@ namespace CIAO ::Components::FacetDescriptions_var retval = tmp; - retval->length (this->facet_table_.current_size ()); + retval->length (this->facet_table_.size ()); CORBA::ULong i = 0; - for (FacetTable::iterator iter = this->facet_table_.begin (); + for (FacetTable::const_iterator iter = this->facet_table_.begin (); iter != this->facet_table_.end (); ++iter, ++i) { - FacetTable::ENTRY & entry = *iter; - retval[i] = entry.int_id_; + FacetTable::const_reference entry = *iter; + retval[i] = entry.second; } return retval._retn (); @@ -288,25 +286,25 @@ namespace CIAO ) ACE_THROW_SPEC ((CORBA::SystemException)) { - ::Components::ConsumerDescriptions *tmp = 0; ACE_NEW_THROW_EX (tmp, ::Components::ConsumerDescriptions ( - this->consumer_table_.current_size ()), + this->consumer_table_.size ()), CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (0); ::Components::ConsumerDescriptions_var retval = tmp; - retval->length (this->consumer_table_.current_size ()); + retval->length (this->consumer_table_.size ()); CORBA::ULong i = 0; - for (ConsumerTable::iterator iter = this->consumer_table_.begin (); + for (ConsumerTable::const_iterator iter = this->consumer_table_.begin (); iter != this->consumer_table_.end (); ++iter, ++i) { // ACE_DEBUG ((LM_DEBUG, "EXECUTING \n")); - ConsumerTable::ENTRY & entry = *iter; - retval[i] = entry.int_id_; + ConsumerTable::const_reference entry = *iter; + retval[i] = entry.second; } return retval._retn (); @@ -321,7 +319,7 @@ namespace CIAO ACE_THROW_SPEC ((CORBA::SystemException, Components::InvalidName)) { - if (sink_name == 0) + if (0 == sink_name) { ACE_THROW_RETURN (Components::InvalidName (), Components::EventConsumerBase::_nil ()); @@ -339,18 +337,6 @@ namespace CIAO return retval; } - ::Components::EventConsumerBase_ptr - Servant_Impl_Base::disconnect_consumer ( - const char * /* source_name */ - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException, - Components::InvalidName, - Components::NoConnection)) - { - ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0); - } - ::Components::ConsumerDescriptions * Servant_Impl_Base::get_named_consumers ( const ::Components::NameList & names @@ -372,7 +358,7 @@ namespace CIAO { tmp = this->lookup_consumer_description (names[i].in ()); - if (tmp == 0) + if (0 == tmp) { ACE_THROW_RETURN (Components::InvalidName (), 0); @@ -385,15 +371,6 @@ namespace CIAO } ::Components::EmitterDescriptions * - Servant_Impl_Base::get_all_emitters ( - ACE_ENV_SINGLE_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) - { - ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); - } - - ::Components::EmitterDescriptions * Servant_Impl_Base::get_named_emitters ( const ::Components::NameList & /* names */ ACE_ENV_ARG_DECL @@ -405,15 +382,6 @@ namespace CIAO } ::Components::ReceptacleDescriptions * - Servant_Impl_Base::get_all_receptacles ( - ACE_ENV_SINGLE_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) - { - ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0); - } - - ::Components::ReceptacleDescriptions * Servant_Impl_Base::get_named_receptacles ( const ::Components::NameList & /* names */ ACE_ENV_ARG_DECL @@ -425,15 +393,6 @@ namespace CIAO } ::Components::PublisherDescriptions * - Servant_Impl_Base::get_all_publishers ( - ACE_ENV_SINGLE_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) - { - ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0); - } - - ::Components::PublisherDescriptions * Servant_Impl_Base::get_named_publishers ( const ::Components::NameList & /* names */ ACE_ENV_ARG_DECL @@ -448,46 +407,84 @@ namespace CIAO void Servant_Impl_Base::add_facet (const char *port_name, - CORBA::Object_ptr port_ref) + ::CORBA::Object_ptr port_ref + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC (( ::CORBA::SystemException)) { + if (0 == port_name || ::CORBA::is_nil (port_ref)) + { + ACE_THROW ( ::CORBA::BAD_PARAM ()); + return; + } + ::Components::FacetDescription *fd = 0; ACE_NEW (fd, - OBV_Components::FacetDescription); + ::OBV_Components::FacetDescription); ::Components::FacetDescription_var safe = fd; fd->name (port_name); fd->type_id (port_ref->_interface_repository_id ()); fd->facet_ref (port_ref); - if (this->facet_table_.bind (port_name, fd) == 0) - { - safe._retn (); - } + FacetTable::value_type entry; + entry.first = port_name; + entry.second = safe._retn (); + + ACE_WRITE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_); + + (void) this->facet_table_.insert (entry); } CORBA::Object_ptr Servant_Impl_Base::lookup_facet (const char *port_name) { - ::Components::FacetDescription_var fd; + if (0 == port_name) + { + return CORBA::Object::_nil (); + } + + ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX, + mon, + this->lock_, + CORBA::Object::_nil ()); - if (this->facet_table_.find (port_name, fd) != 0) + FacetTable::const_iterator iter = + this->facet_table_.find (port_name); + + if (iter == this->facet_table_.end ()) { return CORBA::Object::_nil (); } - return CORBA::Object::_duplicate (fd.in ()->facet_ref ()); + return CORBA::Object::_duplicate (iter->second->facet_ref ()); } ::Components::FacetDescription * Servant_Impl_Base::lookup_facet_description (const char *port_name) { - ::Components::FacetDescription_var fd; - - if (this->facet_table_.find (port_name, fd) != 0) + if (0 == port_name) { + /// Calling function will throw InvalidName after getting this. return 0; } + ::Components::FacetDescription_var fd; + FacetTable::const_iterator iter; + + { + ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX, + mon, + this->lock_, + 0); + + iter = this->facet_table_.find (port_name); + + if (iter != this->facet_table_.end ()) + { + fd = iter->second; + } + } + return fd._retn (); } @@ -495,35 +492,59 @@ namespace CIAO Servant_Impl_Base::add_consumer ( const char *port_name, ::Components::EventConsumerBase_ptr port_ref + ACE_ENV_ARG_DECL ) + ACE_THROW_SPEC (( ::CORBA::SystemException)) { + if (0 == port_name || ::CORBA::is_nil (port_ref)) + { + ACE_THROW ( ::CORBA::BAD_PARAM ()); + return; + } + ::Components::ConsumerDescription *cd = 0; ACE_NEW (cd, - OBV_Components::ConsumerDescription); + ::OBV_Components::ConsumerDescription); ::Components::ConsumerDescription_var safe = cd; cd->name (port_name); cd->type_id (port_ref->_interface_repository_id ()); cd->consumer (port_ref); - if (this->consumer_table_.bind (port_name, cd) == 0) - { - safe._retn (); - } + ConsumerTable::value_type entry; + entry.first = port_name; + entry.second = safe._retn (); + + ACE_WRITE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_); + + (void) this->consumer_table_.insert (entry); } ::Components::EventConsumerBase_ptr Servant_Impl_Base::lookup_consumer (const char *port_name) { - ::Components::ConsumerDescription_var cd; + if (0 == port_name) + { + return ::Components::EventConsumerBase::_nil (); + } + + ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX, + mon, + this->lock_, + ::Components::EventConsumerBase::_nil ()); - if (this->consumer_table_.find (port_name, cd) != 0) + ConsumerTable::const_iterator iter = + this->consumer_table_.find (port_name); + + if (iter == this->consumer_table_.end ()) { return ::Components::EventConsumerBase::_nil (); } return - ::Components::EventConsumerBase::_duplicate (cd.in ()->consumer ()); + ::Components::EventConsumerBase::_duplicate ( + iter->second->consumer () + ); } ::Components::ConsumerDescription * @@ -531,17 +552,33 @@ namespace CIAO const char *port_name ) { - ::Components::ConsumerDescription_var cd; - - if (this->consumer_table_.find (port_name, cd) != 0) + if (0 == port_name) { + /// Calling function will throw InvalidName after getting this. return 0; } + ::Components::ConsumerDescription_var cd; + ConsumerTable::const_iterator iter; + + { + ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX, + mon, + this->lock_, + 0); + + iter = this->consumer_table_.find (port_name); + + if (iter != this->consumer_table_.end ()) + { + cd = iter->second; + } + } + return cd._retn (); } - - ::Components::StandardConfigurator_ptr + + ::Components::StandardConfigurator_ptr Servant_Impl_Base::get_standard_configurator (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { @@ -568,3 +605,4 @@ namespace CIAO PortableServer::POA::_duplicate (container_->the_POA ()); } } + diff --git a/TAO/CIAO/ciao/Servant_Impl_Base.h b/TAO/CIAO/ciao/Servant_Impl_Base.h index abbc73091a8..da5603f98d2 100644 --- a/TAO/CIAO/ciao/Servant_Impl_Base.h +++ b/TAO/CIAO/ciao/Servant_Impl_Base.h @@ -19,12 +19,15 @@ #include /**/ "ace/pre.h" -#include "ace/Hash_Map_Manager_T.h" +#include "ace/Array_Map.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "ace/Active_Map_Manager_T.h" +#include "ace/Thread_Mutex.h" + #include "CCM_EventC.h" #include "CIAO_Server_Export.h" #include "CCM_ComponentS.h" @@ -117,13 +120,6 @@ namespace CIAO ACE_THROW_SPEC ((CORBA::SystemException, Components::InvalidName)); - virtual ::Components::EventConsumerBase_ptr - disconnect_consumer (const char *source_name - ACE_ENV_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC ((CORBA::SystemException, - Components::InvalidName, - Components::NoConnection)); - virtual ::Components::ConsumerDescriptions * get_named_consumers (const ::Components::NameList & names ACE_ENV_ARG_DECL_WITH_DEFAULTS) @@ -131,30 +127,18 @@ namespace CIAO Components::InvalidName)); virtual ::Components::EmitterDescriptions * - get_all_emitters (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC ((CORBA::SystemException)); - - virtual ::Components::EmitterDescriptions * - get_named_emitters (const ::Components::NameList & /* names */ + get_named_emitters (const ::Components::NameList & names ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException, Components::InvalidName)); virtual ::Components::ReceptacleDescriptions * - get_all_receptacles (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC ((CORBA::SystemException)); - - virtual ::Components::ReceptacleDescriptions * - get_named_receptacles (const ::Components::NameList & /* names */ + get_named_receptacles (const ::Components::NameList & names ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException, Components::InvalidName)); virtual ::Components::PublisherDescriptions * - get_all_publishers (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) - ACE_THROW_SPEC ((CORBA::SystemException)); - - virtual ::Components::PublisherDescriptions * get_named_publishers (const ::Components::NameList & names ACE_ENV_ARG_DECL_WITH_DEFAULTS) ACE_THROW_SPEC ((CORBA::SystemException, @@ -178,7 +162,9 @@ namespace CIAO protected: void add_facet (const char *port_name, - CORBA::Object_ptr port_ref); + ::CORBA::Object_ptr port_ref + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC (( ::CORBA::SystemException)); CORBA::Object_ptr lookup_facet (const char *port_name); @@ -187,7 +173,9 @@ namespace CIAO ); void add_consumer (const char *port_name, - ::Components::EventConsumerBase_ptr port_ref); + ::Components::EventConsumerBase_ptr port_ref + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC (( ::CORBA::SystemException)); ::Components::EventConsumerBase_ptr lookup_consumer ( const char *port_name @@ -197,19 +185,52 @@ namespace CIAO const char *port_name ); + /// Called from generated servant class to help with + /// get_all_*() methods. + + template<typename T_var> + static void describe_simplex_receptacle ( + const char *port_name, + const char *port_type_repo_id, + T_var &connection, + ::Components::ReceptacleDescriptions_var &descriptions, + CORBA::ULong slot + ); + + template<typename T_var> + static void describe_multiplex_receptacle ( + const char *port_name, + const char *port_type_repo_id, + ACE_Active_Map_Manager<T_var> &objrefs, + ::Components::ReceptacleDescriptions_var &descriptions, + CORBA::ULong slot + ); + + template<typename T_var> + static void describe_pub_event_source ( + const char *port_name, + const char *port_type_repo_id, + ACE_Active_Map_Manager<T_var> &consumers, + ::Components::PublisherDescriptions_var &descriptions, + CORBA::ULong slot + ); + + template<typename T_var> + static void describe_emit_event_source ( + const char *port_name, + const char *port_type_repo_id, + T_var &consumer_ref, + ::Components::EmitterDescriptions_var &descriptions, + CORBA::ULong slot + ); + protected: - typedef ACE_Hash_Map_Manager_Ex<const char *, - ::Components::FacetDescription_var, - ACE_Hash<const char *>, - ACE_Equal_To<const char *>, - ACE_Null_Mutex> + typedef ACE_Array_Map<ACE_CString, + ::Components::FacetDescription_var> FacetTable; - typedef ACE_Hash_Map_Manager_Ex<const char *, - ::Components::ConsumerDescription_var, - ACE_Hash<const char *>, - ACE_Equal_To<const char *>, - ACE_Null_Mutex> + typedef ACE_Array_Map<ACE_CString, + ::Components::ConsumerDescription_var> ConsumerTable; FacetTable facet_table_; @@ -220,9 +241,21 @@ namespace CIAO private: /// Not allowed to be used Servant_Impl_Base (void); + + private: + /// For internal locking of table reads and writes. + TAO_SYNCH_MUTEX lock_; }; } +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "Servant_Impl_Utils_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Servant_Impl_Utils_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + #include /**/ "ace/post.h" #endif /* CIAO_SERVANT_IMPL_T_H */ diff --git a/TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp b/TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp new file mode 100644 index 00000000000..7b4f668924b --- /dev/null +++ b/TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp @@ -0,0 +1,138 @@ +// $Id$ + +#ifndef CIAO_SERVANT_IMPL_UTILS_T_C +#define CIAO_SERVANT_IMPL_UTILS_T_C + +#include "Servant_Impl_Base.h" + +namespace CIAO +{ + template<typename T_var> + void + Servant_Impl_Base::describe_simplex_receptacle ( + const char *port_name, + const char *port_type_repo_id, + T_var &connection, + ::Components::ReceptacleDescriptions_var &descriptions, + CORBA::ULong slot + ) + { + ::Components::ReceptacleDescription *elem = 0; + ACE_NEW (elem, + ::OBV_Components::ReceptacleDescription); + ::Components::ReceptacleDescription_var safe_elem = elem; + + elem->name (port_name); + elem->type_id (port_type_repo_id); + elem->is_multiple (false); + elem->connections ().length (1UL); + elem->connections ()[0UL]->ck (0); + + // Valuetype 'set' call increments the reference count. + elem->connections ()[0UL]->objref (connection.in ()); + + descriptions[slot] = safe_elem._retn (); + } + + template<typename T_var> + void + Servant_Impl_Base::describe_multiplex_receptacle ( + const char *port_name, + const char *port_type_repo_id, + ACE_Active_Map_Manager<T_var> &objrefs, + ::Components::ReceptacleDescriptions_var &descriptions, + CORBA::ULong slot + ) + { + ::Components::ReceptacleDescription *elem = 0; + ACE_NEW (elem, + ::OBV_Components::ReceptacleDescription); + ::Components::ReceptacleDescription_var safe_elem = elem; + + elem->name (port_name); + elem->type_id (port_type_repo_id); + elem->is_multiple (true); + elem->connections ().length (objrefs.current_size ()); + + CORBA::ULong map_slot = 0UL; + + for (ACE_Active_Map_Manager<T_var>::CONST_ITERATOR iter (objrefs); + 0 == iter.done (); + iter.advance (), ++map_slot) + { + ::Components::Cookie *cookie_from_key = 0; + ACE_NEW (cookie_from_key, + ::CIAO::Map_Key_Cookie ((*iter).ext_id_)); + + // Both valuetype 'set' calls increment the reference count. + elem->connections ()[map_slot]->ck (cookie_from_key); + CORBA::remove_ref (cookie_from_key); + elem->connections ()[map_slot]->objref ((*iter).int_id_.in ()); + } + + descriptions[slot] = safe_elem._retn (); + } + + template<typename T_var> + void + Servant_Impl_Base::describe_pub_event_source ( + const char *port_name, + const char *port_type_repo_id, + ACE_Active_Map_Manager<T_var> &consumers, + ::Components::PublisherDescriptions_var &descriptions, + CORBA::ULong slot + ) + { + ::Components::PublisherDescription *elem = 0; + ACE_NEW (elem, + ::OBV_Components::PublisherDescription); + ::Components::PublisherDescription_var safe_elem = elem; + + elem->name (port_name); + elem->type_id (port_type_repo_id); + + CORBA::ULong map_slot = 0UL; + + for (ACE_Active_Map_Manager<T_var>::CONST_ITERATOR iter (consumers); + 0 == iter.done (); + iter.advance (), ++map_slot) + { + ::Components::Cookie *cookie_from_key = 0; + ACE_NEW (cookie_from_key, + ::CIAO::Map_Key_Cookie ((*iter).ext_id_)); + + // Both valuetype 'set' calls increment the reference count. + elem->consumer ()[map_slot]->ck (cookie_from_key); + CORBA::remove_ref (cookie_from_key); + elem->consumer ()[map_slot]->consumer ((*iter).int_id_.in ()); + } + + descriptions[slot] = safe_elem._retn (); + } + + template<typename T_var> + void + Servant_Impl_Base::describe_emit_event_source ( + const char *port_name, + const char *port_type_repo_id, + T_var &consumer_ref, + ::Components::EmitterDescriptions_var &descriptions, + CORBA::ULong slot + ) + { + ::Components::EmitterDescription *elem = 0; + ACE_NEW (elem, + ::OBV_Components::EmitterDescription); + ::Components::EmitterDescription_var safe_elem = elem; + + elem->name (port_name); + elem->type_id (port_type_repo_id); + + // Valuetype 'set' call increments the reference count. + elem->consumer (consumer_ref.in ()); + + descriptions[slot] = safe_elem._retn (); + } +} + +#endif /* CIAO_SERVANT_IMPL_T_C */ |