diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:11 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:11 +0000 |
commit | 6b846cf03c0bcbd8c276cb0af61a181e5f98eaae (patch) | |
tree | da50d054f9c761c3f6a5923f6979e93306c56d68 /TAO/TAO_IDL/be/be_visitor_sequence | |
parent | 0e555b9150d38e3b3473ba325b56db2642e6352b (diff) | |
download | ATCD-6b846cf03c0bcbd8c276cb0af61a181e5f98eaae.tar.gz |
Repo restructuring
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_sequence')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp | 83 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp | 158 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp | 283 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp | 106 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp | 256 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp | 295 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp | 266 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp | 198 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_ch.cpp | 117 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_cs.cpp | 1337 |
10 files changed, 0 insertions, 3099 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp deleted file mode 100644 index 9195f4c7d3e..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// any_op_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Any operators for the Sequence -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - any_op_ch, - "$Id$") - -// *************************************************************************** -// Sequence visitor for generating Any operator declarations in the client header -// *************************************************************************** - -be_visitor_sequence_any_op_ch::be_visitor_sequence_any_op_ch ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_any_op_ch::~be_visitor_sequence_any_op_ch (void) -{ -} - -int -be_visitor_sequence_any_op_ch::visit_sequence (be_sequence *node) -{ - if (node->cli_hdr_any_op_gen () - || node->imported ()) - { - return 0; - } - - TAO_OutStream *os = this->ctx_->stream (); - const char *macro = this->ctx_->export_macro (); - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *os << be_global->core_versioning_begin () << be_nl; - - // Generate the Any <<= and >>= operators. - *os << macro; - *os << " void" - << " operator<<= ( ::CORBA::Any &, const "; - *os << node->name (); - *os << " &); // copying version" << be_nl; - *os << macro; - *os << " void" - << " operator<<= ( ::CORBA::Any &, "; - *os << node->name (); - *os << "*); // noncopying version" << be_nl; - *os << macro; - *os << " ::CORBA::Boolean" - << " operator>>= (const ::CORBA::Any &, "; - *os << node->name (); - *os << " *&); // deprecated" << be_nl; - *os << macro; - *os << " ::CORBA::Boolean" - << " operator>>= (const ::CORBA::Any &, const "; - *os << node->name (); - *os << " *&);"; - - *os << be_global->core_versioning_end () << be_nl; - - node->cli_hdr_any_op_gen (1); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp deleted file mode 100644 index a4699901a26..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp +++ /dev/null @@ -1,158 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// any_op_cs.cpp -// -// = DESCRIPTION -// Visitor generating code for Any operator for the Sequence node -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - any_op_cs, - "$Id$") - -// *************************************************************************** -// Sequence visitor for generating Any operator declarations in the client -// stubs file -// *************************************************************************** - -be_visitor_sequence_any_op_cs::be_visitor_sequence_any_op_cs ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_any_op_cs::~be_visitor_sequence_any_op_cs (void) -{ -} - -int -be_visitor_sequence_any_op_cs::visit_sequence (be_sequence *node) -{ - if (node->cli_stub_any_op_gen () - || node->imported ()) - { - return 0; - } - - TAO_OutStream *os = this->ctx_->stream (); - - *os << be_nl << be_nl - << "// TAO_IDL - Generated from " << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *os << be_global->core_versioning_begin () << be_nl; - - // Since we don't generate CDR stream operators for types that - // explicitly contain a local interface (at some level), we - // must override these Any template class methods to avoid - // calling the non-existent operators. The zero return value - // will eventually cause CORBA::MARSHAL to be raised if this - // type is inserted into an Any and then marshaled. - if (node->is_local ()) - { - *os << "namespace TAO" << be_nl - << "{" << be_idt_nl - << "template<>" << be_nl - << "::CORBA::Boolean" << be_nl - << "Any_Dual_Impl_T<" << node->name () - << ">::marshal_value (TAO_OutputCDR &)" << be_nl - << "{" << be_idt_nl - << "return false;" << be_uidt_nl - << "}"; - - *os << be_nl << be_nl - << "template<>" << be_nl - << "::CORBA::Boolean" << be_nl - << "Any_Dual_Impl_T<" << node->name () - << ">::demarshal_value (TAO_InputCDR &)" << be_nl - << "{" << be_idt_nl - << "return false;" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl; - } - - // Copying insertion. - *os << be_nl << "// Copying insertion." << be_nl - << "void operator<<= (" << be_idt << be_idt_nl - << "::CORBA::Any &_tao_any," << be_nl - << "const " << node->name () << " &_tao_elem" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl - - << "if (0 == &_tao_elem) // Trying to de-reference NULL object" << be_idt_nl - << "_tao_any <<= static_cast<" << node->name () << " *>( 0 ); // Use non-copying insertion of a NULL" << be_uidt_nl - << "else" << be_idt_nl - - << "TAO::Any_Dual_Impl_T<" << node->name () << ">::insert_copy (" - << be_idt << be_idt_nl - << "_tao_any," << be_nl - << node->name () << "::_tao_any_destructor," << be_nl - << node->tc_name () << "," << be_nl - << "_tao_elem" << be_uidt_nl - << ");" << be_uidt << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; - - // Non-copying insertion. - *os << "// Non-copying insertion." << be_nl - << "void operator<<= (" << be_idt << be_idt_nl - << "::CORBA::Any &_tao_any," << be_nl - << node->name () << " *_tao_elem" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl - << "TAO::Any_Dual_Impl_T<" << node->name () << ">::insert (" - << be_idt << be_idt_nl - << "_tao_any," << be_nl - << node->name () << "::_tao_any_destructor," << be_nl - << node->tc_name () << "," << be_nl - << "_tao_elem" << be_uidt_nl - << ");" << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; - - // Extraction to non-const pointer (deprecated, just calls the other). - *os << "// Extraction to non-const pointer (deprecated)." << be_nl - << "::CORBA::Boolean operator>>= (" << be_idt << be_idt_nl - << "const ::CORBA::Any &_tao_any," << be_nl - << node->name () << " *&_tao_elem" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl - << "return _tao_any >>= const_cast<" << be_idt << be_idt_nl - << "const " << node->name () << " *&> (" << be_nl - << "_tao_elem" << be_uidt_nl - << ");" << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; - - // Extraction to const pointer. - *os << "// Extraction to const pointer." << be_nl - << "::CORBA::Boolean operator>>= (" << be_idt << be_idt_nl - << "const ::CORBA::Any &_tao_any," << be_nl - << "const " << node->name () << " *&_tao_elem" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl - << "return" << be_idt_nl - << "TAO::Any_Dual_Impl_T<" << node->name () << ">::extract (" - << be_idt << be_idt_nl - << "_tao_any," << be_nl - << node->name () << "::_tao_any_destructor," << be_nl - << node->tc_name () << "," << be_nl - << "_tao_elem" << be_uidt_nl - << ");" << be_uidt << be_uidt << be_uidt_nl - << "}"; - - *os << be_global->core_versioning_end () << be_nl; - - node->cli_stub_any_op_gen (1); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp deleted file mode 100644 index 9442ec63130..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp +++ /dev/null @@ -1,283 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// buffer_type.cpp -// -// = DESCRIPTION -// Visitor generating code for the internal buffer type of the Sequence node -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - buffer_type, - "$Id$") - -// **************************************************************** -// We have to generate the buffer type in the constructor -// **************************************************************** - -be_visitor_sequence_buffer_type::be_visitor_sequence_buffer_type ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_buffer_type::~be_visitor_sequence_buffer_type (void) -{ -} - -// helper -int -be_visitor_sequence_buffer_type::visit_node (be_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - { - bt = this->ctx_->alias (); - } - else - { - bt = node; - } - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - { - *os << bt->nested_type_name (this->ctx_->scope ()); - } - else - { - *os << bt->name (); - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_predefined_type (be_predefined_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - AST_PredefinedType::PredefinedType pt = node->pt (); - - *os << "::"; - - if (pt == AST_PredefinedType::PT_pseudo - || pt == AST_PredefinedType::PT_object) - { - *os << node->name () << "_ptr"; - } - else if (pt == AST_PredefinedType::PT_value) - { - *os << node->name () << " *"; - } - else - { - *os << node->name (); - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_sequence (be_sequence *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_interface (be_interface *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - { - *os << node->nested_type_name (this->ctx_->scope (), "_ptr"); - } - else - { - *os << node->name () << "_ptr"; - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_interface_fwd (be_interface_fwd *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - { - *os << node->nested_type_name (this->ctx_->scope (), "_ptr"); - } - else - { - *os << node->name () << "_ptr"; - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_component (be_component *node) -{ - return this->visit_interface (node); -} - -int -be_visitor_sequence_buffer_type::visit_component_fwd (be_component_fwd *node) -{ - return this->visit_interface_fwd (node); -} - -int -be_visitor_sequence_buffer_type::visit_valuebox (be_valuebox *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - { - *os << node->nested_type_name (this->ctx_->scope (), " *"); - } - else - { - *os << node->name () << " *"; - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_valuetype (be_valuetype *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - { - *os << node->nested_type_name (this->ctx_->scope (), " *"); - } - else - { - *os << node->name () << " *"; - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_valuetype_fwd (be_valuetype_fwd *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - { - *os << node->nested_type_name (this->ctx_->scope (), " *"); - } - else - { - *os << node->name () << " *"; - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_eventtype (be_eventtype *node) -{ - return this->visit_valuetype (node); -} - -int -be_visitor_sequence_buffer_type::visit_eventtype_fwd (be_eventtype_fwd *node) -{ - return this->visit_valuetype_fwd (node); -} - -int -be_visitor_sequence_buffer_type::visit_string (be_string *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (node->width () == (long) sizeof (char)) - { - *os << "::CORBA::Char *"; - } - else - { - *os << "::CORBA::WChar *"; - } - - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_structure_fwd (be_structure_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_union_fwd (be_union_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_exception (be_exception *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_typedef (be_typedef *node) -{ - this->ctx_->alias (node); - - if (node->primitive_base_type ()->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_buffer_type::" - "visit_typedef - " - "accept on primitive type failed\n"), - -1); - } - - this->ctx_->alias (0); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp deleted file mode 100644 index 5f7d08577c2..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp +++ /dev/null @@ -1,106 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// cdr_op_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for CDR operators for sequences. This uses -// compiled marshaling. -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - cdr_op_ch, - "$Id$") - -// *************************************************************************** -// Sequence visitor for generating CDR operator declarations in the client header -// *************************************************************************** - -be_visitor_sequence_cdr_op_ch::be_visitor_sequence_cdr_op_ch ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_cdr_op_ch::~be_visitor_sequence_cdr_op_ch (void) -{ -} - -int -be_visitor_sequence_cdr_op_ch::visit_sequence (be_sequence *node) -{ - if (node->cli_hdr_cdr_op_gen () - || node->imported () - || node->is_local ()) - { - return 0; - } - - be_type *base_type = be_type::narrow_from_decl (node->base_type ()); - - // If our base type is an anonymous sequence, generate code for it here. - if (base_type->node_type () == AST_Decl::NT_sequence) - { - if (base_type->accept (this) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_cdr_op_ch::visit_sequence -" - "codegen for nested anonymous sequence failed\n"), - -1); - } - } - - TAO_OutStream *os = this->ctx_->stream (); - - be_type *bt = be_type::narrow_from_decl (node); - be_typedef *tdef = be_typedef::narrow_from_decl (bt); - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - // If we're an anonymous sequence, we must protect against - // being declared more than once. - if (!tdef) - { - *os << "\n\n#if !defined _TAO_CDR_OP_" - << node->flat_name () << "_H_" - << "\n#define _TAO_CDR_OP_" << node->flat_name () << "_H_"; - } - - *os << be_global->core_versioning_begin () << be_nl; - - *os << be_nl << be_nl - << be_global->stub_export_macro () << " ::CORBA::Boolean" - << " operator<< (" << be_idt << be_idt_nl - << "TAO_OutputCDR &strm," << be_nl - << "const " << node->name () << " &_tao_sequence" << be_uidt_nl - << ");" << be_uidt_nl; - *os << be_global->stub_export_macro () << " ::CORBA::Boolean" - << " operator>> (" << be_idt << be_idt_nl - << "TAO_InputCDR &strm," << be_nl - << node->name () << " &_tao_sequence" << be_uidt_nl - << ");" << be_uidt; - - *os << be_global->core_versioning_end () << be_nl; - - if (!tdef) - { - *os << "\n\n#endif /* _TAO_CDR_OP_" - << node->flat_name () << "_H_ */"; - } - - node->cli_hdr_cdr_op_gen (1); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp deleted file mode 100644 index 2b45fca1bbe..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp +++ /dev/null @@ -1,256 +0,0 @@ -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// cdr_op_cs.cpp -// -// = DESCRIPTION -// Visitor for code generation of Sequences for the CDR operators -// in the client stubs. -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - cdr_op_cs, - "$Id$") - -// *************************************************************************** -// Sequence visitor for generating CDR operator declarations in the client -// stubs file. -// *************************************************************************** - -be_visitor_sequence_cdr_op_cs::be_visitor_sequence_cdr_op_cs ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_cdr_op_cs::~be_visitor_sequence_cdr_op_cs (void) -{ -} - -int -be_visitor_sequence_cdr_op_cs::visit_sequence (be_sequence *node) -{ - if (this->ctx_->alias ()) - { - // We are here because the base type of the sequence node is - // itself a sequence i.e., this is a case of sequence of - // typedef'd sequence. For the case of sequence of - // anonymous sequence, see comment below. - return this->visit_node (node); - } - - if (node->cli_stub_cdr_op_gen () - || node->imported () - || node->is_local ()) - { - return 0; - } - - TAO_OutStream *os = this->ctx_->stream (); - - be_type *bt = - be_type::narrow_from_decl (node->base_type ()); - - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_cdr_op_cs::" - "visit_sequence - " - "Bad base type\n"), - -1); - } - - // Generate the CDR << and >> operator defns. - - // Save the sequence node for further use. - this->ctx_->node (node); - - // If our element type is an anonymous sequence, generate code for it here. - if (bt->node_type () == AST_Decl::NT_sequence) - { - int status = - this->gen_anonymous_base_type ( - bt, - TAO_CodeGen::TAO_ROOT_CDR_OP_CS - ); - - if (status == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_array_cdr_op_cs::" - "visit_sequence - " - "gen_anonymous_base_type failed\n"), - -1); - } - } - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl; - - *os << "#if !defined _TAO_CDR_OP_" - << node->flat_name () << "_CPP_" << be_nl - << "#define _TAO_CDR_OP_" << node->flat_name () << "_CPP_" - << be_nl; - - *os << be_global->core_versioning_begin () << be_nl; - - // Set the sub state as generating code for the output operator. - this->ctx_->sub_state (TAO_CodeGen::TAO_CDR_OUTPUT); - - *os << "::CORBA::Boolean operator<< (" << be_idt << be_idt_nl - << "TAO_OutputCDR &strm," << be_nl - << "const " << node->name () - << " &_tao_sequence" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - *os << "return TAO::marshal_sequence(strm, _tao_sequence);" - << be_uidt_nl; - - *os << "}" << be_nl << be_nl; - - // Set the sub state as generating code for the input operator. - this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_INPUT); - - *os << "::CORBA::Boolean operator>> (" << be_idt << be_idt_nl - << "TAO_InputCDR &strm"; - - *os << "," << be_nl - << node->name () << " &_tao_sequence"; - - *os << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - *os << "return TAO::demarshal_sequence(strm, _tao_sequence);" - << be_uidt_nl; - - *os << "}"; - - *os << be_nl << be_global->core_versioning_end (); - - *os << be_nl - << "#endif /* _TAO_CDR_OP_" - << node->flat_name () << "_CPP_ */"; - - node->cli_stub_cdr_op_gen (1); - return 0; -} - -int -be_visitor_sequence_cdr_op_cs::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_interface (be_interface *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_interface_fwd (be_interface_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_component (be_component *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_component_fwd (be_component_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_home (be_home *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_valuebox (be_valuebox *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_valuetype (be_valuetype *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_valuetype_fwd (be_valuetype_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_eventtype (be_eventtype *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_eventtype_fwd (be_eventtype_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_predefined_type ( - be_predefined_type *node - ) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_string (be_string *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_typedef (be_typedef *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_node (be_type *) -{ - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp deleted file mode 100644 index abf654712a0..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp +++ /dev/null @@ -1,295 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_base.cpp -// -// = DESCRIPTION -// Visitor generating code for the base type of the Sequence -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - sequence_base, - "$Id$") - -// **************************************************************** -// We have to generate the parameters for the template that implements -// each sequence type. -// **************************************************************** - -be_visitor_sequence_base::be_visitor_sequence_base (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_base::~be_visitor_sequence_base (void) -{ -} - - -int -be_visitor_sequence_base::visit_predefined_type (be_predefined_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - *os << "::" << node->name (); - - return 0; -} - -// helper -int -be_visitor_sequence_base::visit_node (be_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - { - bt = this->ctx_->alias (); - } - else - { - bt = node; - } - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BASE_CH) - { - if (this->ctx_->sub_state () - == TAO_CodeGen::TAO_ARRAY_SEQ_CH_TEMPLATE_VAR) - { - *os << bt->nested_type_name (this->ctx_->scope (), "_var"); - } - else - { - *os << bt->nested_type_name (this->ctx_->scope ()); - } - } - else - { - *os << bt->name (); - } - - return 0; -} - -int -be_visitor_sequence_base::visit_sequence (be_sequence *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_interface (be_interface *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_interface_fwd (be_interface_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_valuebox (be_valuebox *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_valuetype (be_valuetype *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_valuetype_fwd (be_valuetype_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_string (be_string *) -{ - // NO-OP, we have ad-hoc classes from strings. - return 0; -} - -int -be_visitor_sequence_base::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_structure_fwd (be_structure_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_union_fwd (be_union_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_exception (be_exception *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_typedef (be_typedef *node) -{ - // Set the alias node. - this->ctx_->alias (node); - - if (node->primitive_base_type ()->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_base::" - "visit_typedef - " - "accept on primitive type failed\n"), - -1); - } - - this->ctx_->alias (0); - return 0; -} - -be_visitor_sequence_base_template_args:: -be_visitor_sequence_base_template_args (be_visitor_context *ctx, - be_sequence *seq) - : be_visitor_sequence_base (ctx), - beseq_ (seq) -{ - // no-op -} - - -be_visitor_sequence_base_template_args:: -~be_visitor_sequence_base_template_args (void) -{ - //no-op -} - -int -be_visitor_sequence_base_template_args::visit_interface (be_interface *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - { - bt = this->ctx_->alias (); - } - else - { - bt = node; - } - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BASE_CH) - { - *os << bt->nested_type_name (this->ctx_->scope ()) << ","; - *os << bt->nested_type_name (this->ctx_->scope (), "_var"); - } - else - { - *os << bt->name () << ","; - *os << bt->name () << "_var"; - } - - return 0; -} - -int -be_visitor_sequence_base_template_args::visit_interface_fwd ( - be_interface_fwd *node - ) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - { - bt = this->ctx_->alias (); - } - else - { - bt = node; - } - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BASE_CH) - { - *os << bt->nested_type_name (this->ctx_->scope ()) << ","; - *os << bt->nested_type_name (this->ctx_->scope (), "_var"); - } - else - { - *os << bt->name () << ","; - *os << bt->name () << "_var"; - } - - return 0; -} - -int -be_visitor_sequence_base_template_args::visit_valuetype (be_valuetype *node) -{ - return this->visit_interface (node); -} - -int -be_visitor_sequence_base_template_args::visit_valuetype_fwd ( - be_valuetype_fwd *node - ) -{ - return this->visit_interface_fwd (node); -} - -int -be_visitor_sequence_base_template_args::visit_predefined_type ( - be_predefined_type *node - ) -{ - TAO_OutStream *os = this->ctx_->stream (); - *os << "::" << node->name (); - - if (beseq_->managed_type () == be_sequence::MNG_PSEUDO - || beseq_->managed_type () == be_sequence::MNG_OBJREF) - { - *os << ", ::" << node->name () << "_var"; - } - - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp deleted file mode 100644 index 265e0b8261e..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp +++ /dev/null @@ -1,266 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - sequence_ch, - "$Id$") - -// Root visitor for client header. -be_visitor_sequence_ch::be_visitor_sequence_ch (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_ch::~be_visitor_sequence_ch (void) -{ -} - -int be_visitor_sequence_ch::visit_sequence (be_sequence *node) -{ - if (node->defined_in () == 0) - { - // The node is a nested sequence, and has had no scope defined. - node->set_defined_in (DeclAsScope (this->ctx_->scope ())); - } - - // First create a name for ourselves. - if (node->create_name (this->ctx_->tdef ()) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "failed creating name\n"), - -1); - } - - if (node->cli_hdr_gen () || node->imported ()) - { - return 0; - } - - be_type *bt = 0; - TAO_OutStream *os = this->ctx_->stream (); - - // Retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - - if (bt == 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), - -1); - } - - bt->seen_in_sequence (true); - AST_Decl::NodeType nt = bt->node_type (); - - // If our base type is an anonymouse sequence, we must create a name - // and generate a class declaration for it as well. - if (nt == AST_Decl::NT_sequence) - { - // Temporarily make the context's tdef node 0 so the nested call - // to create_name will not get confused and give our anonymous - // sequence element type the same name as we have. - be_typedef *tmp = this->ctx_->tdef (); - this->ctx_->tdef (0); - - if (bt->accept (this) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "codegen for anonymous base type failed\n"), - -1); - } - - // Restore the tdef value. - this->ctx_->tdef (tmp); - } - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - os->gen_ifdef_macro (node->flat_name ()); - - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "class " << node->local_name () << ";"; - } - - if (this->ctx_->tdef () != 0) - { - this->gen_varout_typedefs (node, - bt); - } - - *os << be_nl << be_nl - << "class " << be_global->stub_export_macro () << " " - << node->local_name () << be_idt_nl - << ": public" << be_idt << be_idt_nl; - - if (node->gen_base_class_name (os, "", this->ctx_->scope ()) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Base class name generation failed\n"), - -1); - } - - *os << be_uidt << be_uidt << be_uidt; - - *os << be_nl - << "{" << be_nl - << "public:" << be_idt; - - *os << be_nl - << node->local_name () << " (void);"; - - if (node->unbounded ()) - { - *os << be_nl - << node->local_name () << " ( ::CORBA::ULong max);"; - } - - *os << be_nl - << node->local_name () << " (" << be_idt << be_idt; - - if (node->unbounded ()) - { - *os << be_nl - << "::CORBA::ULong max,"; - } - - *os << be_nl - << "::CORBA::ULong length," << be_nl; - - // Generate the base type for the buffer. - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH); - be_visitor_sequence_buffer_type bt_visitor (&ctx); - - if (bt->accept (&bt_visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - - *os << "* buffer, " << be_nl - << "::CORBA::Boolean release = false" << be_uidt_nl - << ");" << be_uidt_nl; - *os << node->local_name () << " (const " << node->local_name () - << " &);" << be_nl; - *os << "virtual ~" << node->local_name () << " (void);"; - - if (be_global->any_support () && !node->anonymous ()) - { - *os << be_nl << be_nl - << "static void _tao_any_destructor (void *);"; - } - - // Generate the _var_type typedef (only if we are not anonymous). - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "typedef " << node->local_name () << "_var _var_type;" - << be_nl - << "typedef " << node->local_name () << "_out _out_type;" - << be_nl << be_nl; - } - - // TAO provides extensions for octet sequences, first find out if - // the base type is an octet (or an alias for octet). - be_predefined_type *predef = 0; - - if (bt->base_node_type () == AST_Type::NT_pre_defined) - { - be_typedef* alias = - be_typedef::narrow_from_decl (bt); - - if (alias == 0) - { - predef = be_predefined_type::narrow_from_decl (bt); - } - else - { - predef = - be_predefined_type::narrow_from_decl ( - alias->primitive_base_type () - ); - } - } - - // Now generate the extension... - if (predef != 0 && predef->pt () == AST_PredefinedType::PT_octet - && node->unbounded ()) - { - *os << "\n\n#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)" << be_nl - << node->local_name () << " (" << be_idt << be_idt_nl - << "::CORBA::ULong length," << be_nl - << "const ACE_Message_Block* mb" << be_uidt_nl - << ")" << be_uidt_nl - << " : TAO::unbounded_value_sequence< ::CORBA::Octet>" - << " (length, mb) {}" << "\n" - << "#endif /* TAO_NO_COPY_OCTET_SEQUENCE == 1 */"; - } - - *os << be_uidt_nl - << "};"; - - os->gen_endif (); - - node->cli_hdr_gen (1); - return 0; -} - -void -be_visitor_sequence_ch::gen_varout_typedefs (be_sequence *node, - be_type *elem) -{ - TAO_OutStream *os = this->ctx_->stream (); - - *os << be_nl << be_nl; - - AST_Type::SIZE_TYPE st = elem->size_type (); - - *os << "typedef" << be_idt_nl - << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T<" - : "TAO_VarSeq_Var_T<") - << be_idt << be_idt_nl - << node->local_name (); - - *os << be_uidt_nl - << ">" << be_uidt_nl - << node->local_name () << "_var;" << be_uidt; - - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->local_name () << be_uidt_nl - << ">" << be_uidt_nl - << node->local_name () << "_out;" << be_uidt; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp deleted file mode 100644 index c96fb72bab1..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_cs.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequences in the client stubs file -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - sequence_cs, - "$Id$") - -// ************************************************************ -// Root visitor for client stub class -// ************************************************************ - -be_visitor_sequence_cs::be_visitor_sequence_cs (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_cs::~be_visitor_sequence_cs (void) -{ -} - -int be_visitor_sequence_cs::visit_sequence (be_sequence *node) -{ - if (node->imported () || node->cli_stub_gen ()) - { - return 0; - } - - be_type *bt = be_type::narrow_from_decl (node->base_type ()); - AST_Decl::NodeType nt = bt->node_type (); - - // If our base type is an anonymous sequence, generate code for it here. - if (nt == AST_Decl::NT_sequence) - { - if (bt->accept (this) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for anonymous base type failed\n"), - -1); - } - - } - - TAO_OutStream *os = this->ctx_->stream (); - - *os << be_nl << be_nl << "// TAO_IDL - Generated from " << be_nl - << "// "__FILE__ << ":" << __LINE__; - - os->gen_ifdef_macro (node->flat_name ()); - - // default constructor - *os << be_nl << be_nl - << node->name () << "::" << node->local_name () << " (void)" << be_nl - << "{}"; - - // for unbounded sequences, we have a different set of constructors - if (node->unbounded ()) - { - *os << be_nl << be_nl - << node->name () << "::" << node->local_name () << " (" - << be_idt << be_idt_nl - << "::CORBA::ULong max" << be_uidt_nl - << ")" << be_nl - << ": " << be_idt; - - // Pass it to the base constructor. - if (node->gen_base_class_name (os, "", this->ctx_->scope ()) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for base sequence class failed\n"), - -1); - } - - - *os << be_nl << "(max)" << be_uidt << be_uidt_nl - << "{}"; - } - - // constructor with the buffer - *os << be_nl << be_nl - << node->name () << "::" << node->local_name () << " (" - << be_idt << be_idt_nl; - - if (node->unbounded ()) - { - // Unbounded seq takes this extra parameter. - *os << "::CORBA::ULong max," << be_nl; - } - - *os << "::CORBA::ULong length," << be_nl; - - // generate the base type for the buffer - be_visitor_context ctx (*this->ctx_); - be_visitor_sequence_buffer_type bt_visitor (&ctx); - - if (bt->accept (&bt_visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - - *os << " * buffer," << be_nl - << "::CORBA::Boolean release" << be_uidt_nl - << ")" << be_uidt_nl - << " : " << be_idt << be_idt; - - // Pass it to the base constructor. - if (node->gen_base_class_name (os, "", this->ctx_->scope ()) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for base sequence class\n"), - -1); - } - - *os << be_nl << "("; - - if (node->unbounded ()) - { - *os << "max, "; - } - - *os << "length, buffer, release)" << be_uidt << be_uidt_nl - << "{}"; - - // Copy constructor. - *os << be_nl << be_nl - << node->name () << "::" << node->local_name () - << " (" << be_idt << be_idt_nl - << "const " << node->local_name () - << " &seq" << be_uidt_nl - << ")" << be_uidt_nl - << " : " << be_idt << be_idt; - - // Pass it to the base constructor. - if (node->gen_base_class_name (os, "", this->ctx_->scope ()) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for base sequence class\n"), - -1); - } - - *os << be_nl << "(seq)" << be_uidt << be_uidt_nl - << "{}"; - - // Destructor. - *os << be_nl << be_nl - << node->name () << "::~" << node->local_name () - << " (void)" << be_nl - << "{}"; - - - if (be_global->any_support () && !node->anonymous ()) - { - *os << be_nl << be_nl - << "void " - << node->name () << "::_tao_any_destructor (" << be_idt << be_idt_nl - << "void * _tao_void_pointer" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl - << node->local_name () << " * _tao_tmp_pointer =" << be_idt_nl - << "static_cast<" << node->local_name () - << " *> (_tao_void_pointer);" << be_uidt_nl - << "delete _tao_tmp_pointer;" << be_uidt_nl - << "}"; - } - - os->gen_endif (); - - node->cli_stub_gen (true); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_ch.cpp deleted file mode 100644 index cc9216fa8fb..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_ch.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// serializer_op_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for TAO::DCPS::Serializer operators for sequences. -// This uses compiled marshaling. -// -// = AUTHOR -// Scott Harris <harris_s@ociweb.com> based on code by Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - serializer_op_ch, - "$Id$") - -// *************************************************************************** -// Sequence visitor for generating Serializer operator declarations in the client header -// *************************************************************************** - -be_visitor_sequence_serializer_op_ch::be_visitor_sequence_serializer_op_ch ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_serializer_op_ch::~be_visitor_sequence_serializer_op_ch (void) -{ -} - -int -be_visitor_sequence_serializer_op_ch::visit_sequence (be_sequence *node) -{ - if (node->cli_hdr_serializer_op_gen () - || node->imported () - || node->is_local ()) - { - return 0; - } - - be_type *base_type = be_type::narrow_from_decl (node->base_type ()); - - // If our base type is an anonymous sequence, generate code for it here. - if (base_type->node_type () == AST_Decl::NT_sequence) - { - if (base_type->accept (this) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_ch::visit_sequence -" - "codegen for nested anonymous sequence failed\n"), - -1); - } - } - - TAO_OutStream *os = this->ctx_->stream (); - - be_type *bt = be_type::narrow_from_decl (node); - be_typedef *tdef = be_typedef::narrow_from_decl (bt); - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - // If we're an anonymous sequence, we must protect against - // being declared more than once. - if (!tdef) - { - *os << "\n\n#if !defined _TAO_SERIALIZER_OP_" - << node->flat_name () << "_H_" - << "\n#define _TAO_SERIALIZER_OP_" << node->flat_name () << "_H_"; - } - - *os << be_nl << be_nl; - - *os << be_global->stub_export_macro () - << " ::CORBA::Boolean _tao_is_bounded_size (" << be_idt << be_idt_nl - << "const " << node->name () << " &" << be_uidt_nl - << ");" << be_uidt_nl; - *os << be_global->stub_export_macro () - << " size_t _dcps_max_marshaled_size (" << be_idt << be_idt_nl - << "const " << node->name () << " &" << be_uidt_nl - << ");" << be_uidt_nl; - *os << be_global->stub_export_macro () - << " size_t _dcps_find_size (" << be_idt << be_idt_nl - << "const " << node->name () << " &" << be_uidt_nl - << ");" << be_uidt_nl; - - *os << be_nl << be_nl - << be_global->stub_export_macro () << " ::CORBA::Boolean" - << " operator<< (" << be_idt << be_idt_nl - << "TAO::DCPS::Serializer &," << be_nl - << "const " << node->name () << " &" << be_uidt_nl - << ");" << be_uidt_nl; - *os << be_global->stub_export_macro () << " ::CORBA::Boolean" - << " operator>> (" << be_idt << be_idt_nl - << "TAO::DCPS::Serializer &," << be_nl - << node->name () << " &" << be_uidt_nl - << ");" << be_uidt; - - if (!tdef) - { - *os << "\n\n#endif /* _TAO_SERIALIZER_OP_" - << node->flat_name () << "_H_ */"; - } - - node->cli_hdr_serializer_op_gen (1); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_cs.cpp deleted file mode 100644 index 103a4281f78..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/serializer_op_cs.cpp +++ /dev/null @@ -1,1337 +0,0 @@ -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// serializer_op_cs.cpp -// -// = DESCRIPTION -// Visitor for code generation of Sequences for the -// TAO::DCPS::Serializer operators in the client stubs. -// -// = AUTHOR -// Scott Harris <harris_s@ociweb.com> based on code by Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_sequence, - serializer_op_cs, - "$Id$") - -// *************************************************************************** -// Sequence visitor for generating Serializer operator declarations in the client -// stubs file. -// *************************************************************************** - -be_visitor_sequence_serializer_op_cs::be_visitor_sequence_serializer_op_cs ( - be_visitor_context *ctx - ) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_serializer_op_cs::~be_visitor_sequence_serializer_op_cs (void) -{ -} - -int -be_visitor_sequence_serializer_op_cs::visit_sequence (be_sequence *node) -{ - if (this->ctx_->alias ()) - { - // We are here because the base type of the sequence node is - // itself a sequence i.e., this is a case of sequence of - // typedef'd sequence. For the case of sequence of - // anonymous sequence, see comment below. - return this->visit_node (node); - } - - if (node->cli_stub_serializer_op_gen () - || node->imported () - || node->is_local ()) - { - return 0; - } - - TAO_OutStream *os = this->ctx_->stream (); - - be_type *bt = - be_type::narrow_from_decl (node->base_type ()); - - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "Bad base type\n"), - -1); - } - - // Generate the Serializer << and >> operator defns. - - // Save the sequence node for further use. - this->ctx_->node (node); - - // If our element type is an anonymous sequence, generate code for it here. - if (bt->node_type () == AST_Decl::NT_sequence) - { - int status = - this->gen_anonymous_base_type ( - bt, - TAO_CodeGen::TAO_ROOT_SERIALIZER_OP_CS - ); - - if (status == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "gen_anonymous_base_type failed\n"), - -1); - } - } - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *os << "#if !defined _TAO_SERIALIZER_OP_" - << node->flat_name () << "_CPP_" << be_nl - << "#define _TAO_SERIALIZER_OP_" << node->flat_name () << "_CPP_" - << be_nl << be_nl; - - // --- _tao_is_bounded_size --- - this->ctx_->sub_state (TAO_CodeGen::TAO_IS_BOUNDED_SIZE); - - *os << "::CORBA::Boolean _tao_is_bounded_size (" << be_idt << be_idt_nl - << "const " << node->name () - << " &_tao_sequence" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - if (bt->node_type () == AST_Decl::NT_sequence) - { - this->visit_node (node); - } - else - { - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - } - - *os << be_uidt_nl - << "}" << be_nl << be_nl; - - // --- _dcps_max_marshaled_size --- - - this->ctx_->sub_state (TAO_CodeGen::TAO_MAX_MARSHALED_SIZE); - - *os << "size_t _dcps_max_marshaled_size (" << be_idt << be_idt_nl - << "const " << node->name () - << " &_tao_sequence" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - if (bt->node_type () == AST_Decl::NT_sequence) - { - this->visit_node (node); - } - else - { - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - } - - *os << be_uidt_nl - << "}" << be_nl << be_nl; - - // --- _dcps_find_size --- - this->ctx_->sub_state (TAO_CodeGen::TAO_FIND_SIZE); - - *os << "size_t _dcps_find_size (" << be_idt << be_idt_nl - << "const " << node->name () - << " &_tao_sequence" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - if (bt->node_type () == AST_Decl::NT_sequence) - { - this->visit_node (node); - } - else - { - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - } - - *os << be_uidt_nl - << "}" << be_nl << be_nl; - - - // --- operator<< --- - - // Set the sub state as generating code for the output operator. - this->ctx_->sub_state (TAO_CodeGen::TAO_CDR_OUTPUT); - - *os << "::CORBA::Boolean operator<< (" << be_idt << be_idt_nl - << "TAO::DCPS::Serializer &strm," << be_nl - << "const " << node->name () - << " &_tao_sequence" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - // First encode the sequence length. - *os << "const ::CORBA::ULong _tao_seq_len = _tao_sequence.length ();" - << be_nl << be_nl; - *os << "if (strm << _tao_seq_len)" << be_idt_nl - << "{" << be_idt_nl; - - // Now encode the sequence elements. - *os << "// Encode all elements." << be_nl; - - - if (bt->node_type () == AST_Decl::NT_sequence) - { - this->visit_node (node); - } - else - { - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - } - - *os << "}" << be_uidt_nl << be_nl - << "return 0;" << be_uidt_nl - << "}" << be_nl << be_nl; - - // --- operator>> --- - - // Set the sub state as generating code for the input operator. - this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_INPUT); - - *os << "::CORBA::Boolean operator>> (" << be_idt << be_idt_nl - << "TAO::DCPS::Serializer &"; - - if (! bt->is_local ()) - { - *os << "strm"; - } - - *os << "," << be_nl - << node->name () << " &"; - - if (! bt->is_local ()) - { - *os << "_tao_sequence"; - } - - *os << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - if (! bt->is_local ()) - { - // First retrieve the length and adjust the sequence length accordingly. - *os << "::CORBA::ULong _tao_seq_len;" << be_nl << be_nl; - *os << "if (strm >> _tao_seq_len)" << be_idt_nl - << "{" << be_idt_nl; - - // Now check if the length does not exceed the maximum. We do this only - // for bounded sequences - AST_Expression *expr = node->max_size (); - - if (expr == 0 || (expr != 0 && expr->ev () == 0)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "bad sequence dimension\n"), - -1); - } - - if (expr->ev ()->et == AST_Expression::EV_ulong) - { - if (expr->ev ()->u.ulval > 0) - { - // We are dealing with a bounded sequence. Check if we are within - // bounds. - *os << "if (_tao_seq_len <= _tao_sequence.maximum ())" << be_idt_nl - << "{" << be_idt_nl; - } - } - else - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "bad sequence dimension value\n"), - -1); - } - - *os << "// Set the length of the sequence." << be_nl - << "_tao_sequence.length (_tao_seq_len);" << be_nl << be_nl; - - // Now we do a check for the sequence length to be non zero. - // If length is 0 we return true. - *os << "// If length is 0 we return true." << be_nl; - *os << "if (0 >= _tao_seq_len) " << be_idt_nl - << "{" << be_idt_nl; - *os << "return 1;" << be_uidt_nl - << "}" << be_uidt_nl << be_nl; - - *os << "// Retrieve all the elements." << be_nl; - - if (bt->node_type () == AST_Decl::NT_sequence) - { - this->visit_node (node); - } - else - { - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_serializer_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - } - - if (expr->ev ()->u.ulval > 0) - { - // We are dealing with a bounded sequence. - *os << be_nl << "}" << be_uidt << be_uidt; - } - - *os << be_nl << "}" << be_uidt_nl << be_nl; - } - - *os << "return 0;" << be_uidt_nl - << "}"; - - *os << be_nl << be_nl - << "#endif /* _TAO_SERIALIZER_OP_" - << node->flat_name () << "_CPP_ */"; - - node->cli_stub_serializer_op_gen (1); - return 0; -} - -int -be_visitor_sequence_serializer_op_cs::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_enum (be_enum *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - // We get here if the "type" of individual elements of the sequence is a - // primitive type. In this case, we treat the sequence as a single - // dimensional sequence (even of it was multi-dimensional), and pass - // the total length of the sequence as a cross product of the - // dimensions. - - be_sequence *sequence = this->ctx_->be_node_as_sequence (); - - if (!sequence) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_enum - " - "bad sequence node\n"), - -1); - } - - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_IS_BOUNDED_SIZE: - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - if (sequence->unbounded ()) - *os << "return false; /* unbounded enum sequence */"; - else - *os << "return true; /* bounded enum sequence */"; - break; - case TAO_CodeGen::TAO_FIND_SIZE: - *os << "//enum types are fixed size so OK to call max_marshaled_size" - << be_nl; - case TAO_CodeGen::TAO_MAX_MARSHALED_SIZE: - *os << "//sequence of enum = ulong for length + ulong for enum * length" - << be_nl; - *os << "return _dcps_max_marshaled_size_ulong () + " - << "_dcps_max_marshaled_size_ulong () * " - << be_idt << be_idt_nl; - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_FIND_SIZE: - *os << "_tao_sequence.length();" << be_uidt << be_uidt; - break; - case TAO_CodeGen::TAO_MAX_MARSHALED_SIZE: - *os << "_tao_sequence.maximum();" << be_uidt << be_uidt; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_array_serializer_op_cs::" - "visit_enum - " - "bad sub_state for seq length\n"), - -1); - } - break; - default: - return this->visit_node (node); - } - return 0; -} - -int -be_visitor_sequence_serializer_op_cs::visit_interface (be_interface *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_interface_fwd (be_interface_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_component (be_component *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_component_fwd (be_component_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_home (be_home *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_valuetype (be_valuetype *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_valuetype_fwd (be_valuetype_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_eventtype (be_eventtype *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_eventtype_fwd (be_eventtype_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_predefined_type ( - be_predefined_type *node - ) -{ - TAO_OutStream *os = this->ctx_->stream (); - - switch (node->pt ()) - { - case AST_PredefinedType::PT_object: - case AST_PredefinedType::PT_value: - case AST_PredefinedType::PT_pseudo: - case AST_PredefinedType::PT_any: - return this->visit_node (node); - case AST_PredefinedType::PT_void: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_predefined_type - " - "Bad primitive type\n"), - -1); - default: - break; - }; - - // We get here if the "type" of individual elements of the sequence is a - // primitive type. In this case, we treat the sequence as a single - // dimensional sequence (even of it was multi-dimensional), and pass - // the total length of the sequence as a cross product of the - // dimensions. - - be_sequence *sequence = this->ctx_->be_node_as_sequence (); - - if (!sequence) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_predefined_type - " - "bad sequence node\n"), - -1); - } - - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_IS_BOUNDED_SIZE: - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - if (sequence->unbounded ()) - *os << "return false; /* seq<predef'd> */"; - else - *os << "return true; /* seq<predef'd,N> */"; - break; - case TAO_CodeGen::TAO_FIND_SIZE: - *os << "//primitive types are fixed size so OK to call max_marshaled_size" - << be_nl; - case TAO_CodeGen::TAO_MAX_MARSHALED_SIZE: - switch (node->pt ()) - { - case AST_PredefinedType::PT_octet: - *os << "return _dcps_max_marshaled_size_ulong () + " - << "_dcps_max_marshaled_size_octet ()" - << be_idt << be_idt_nl; - break; - case AST_PredefinedType::PT_char: - *os << "return _dcps_max_marshaled_size_ulong () + " - << "_dcps_max_marshaled_size_char ()" - << be_idt << be_idt_nl; - break; - case AST_PredefinedType::PT_wchar: - *os << "return _dcps_max_marshaled_size_ulong () + " - << "_dcps_max_marshaled_size_wchar ()" - << be_idt << be_idt_nl; - break; - case AST_PredefinedType::PT_long: - case AST_PredefinedType::PT_ulong: - case AST_PredefinedType::PT_short: - case AST_PredefinedType::PT_ushort: - case AST_PredefinedType::PT_float: - case AST_PredefinedType::PT_double: - case AST_PredefinedType::PT_longlong: - case AST_PredefinedType::PT_ulonglong: - case AST_PredefinedType::PT_longdouble: - *os << "//sequence is of a fixed sized predefined type = " - << "sizeof(ULong) + type size * length" << be_nl; - *os << node->name () << " a_base_value;" << be_nl; - *os << "return _dcps_max_marshaled_size_ulong () + " - << "_dcps_max_marshaled_size (a_base_value)" - << be_idt << be_idt_nl; - break; - break; - case AST_PredefinedType::PT_boolean: - *os << "return _dcps_max_marshaled_size_ulong () + " - << "_dcps_max_marshaled_size_boolean ()" - << be_idt << be_idt_nl; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_array_serializer_op_cs::" - "visit_predefined_type - " - "bad primitive type for _dcps_max_marshaled_size code gen\n"), - -1); - } - - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_FIND_SIZE: - *os << " * _tao_sequence.length();" << be_uidt << be_uidt; - break; - case TAO_CodeGen::TAO_MAX_MARSHALED_SIZE: - *os << " * _tao_sequence.maximum();" << be_uidt << be_uidt; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_array_serializer_op_cs::" - "visit_predefined_type - " - "bad sub_state for seq length\n"), - -1); - } - break; - case TAO_CodeGen::TAO_CDR_INPUT: - case TAO_CodeGen::TAO_CDR_OUTPUT: - { - /* - * Avoiding the work to make TAO::DCPS::Serializer handle the - * TAO_NO_COPY_OCTET_SEQUENCES optimization. - * TBD - support this optimization -- see corresponding CDR code. - */ - *os << "return strm."; - - // Based on our substate, we may be reading from a stream or writing into a - // stream/ - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_CDR_INPUT: - *os << "read_"; - break; - case TAO_CodeGen::TAO_CDR_OUTPUT: - *os << "write_"; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_predefined_type - " - "bad sub state\n"), - -1); - } - - // Determine what kind of sequence are we reading/writing. - switch (node->pt ()) - { - case AST_PredefinedType::PT_long: - *os << "long_array"; - break; - case AST_PredefinedType::PT_ulong: - *os << "ulong_array"; - break; - case AST_PredefinedType::PT_short: - *os << "short_array"; - break; - case AST_PredefinedType::PT_ushort: - *os << "ushort_array"; - break; - case AST_PredefinedType::PT_octet: - *os << "octet_array"; - break; - case AST_PredefinedType::PT_char: - *os << "char_array"; - break; - case AST_PredefinedType::PT_wchar: - *os << "wchar_array"; - break; - case AST_PredefinedType::PT_float: - *os << "float_array"; - break; - case AST_PredefinedType::PT_double: - *os << "double_array"; - break; - case AST_PredefinedType::PT_longlong: - *os << "longlong_array"; - break; - case AST_PredefinedType::PT_ulonglong: - *os << "ulonglong_array"; - break; - case AST_PredefinedType::PT_longdouble: - *os << "longdouble_array"; - break; - case AST_PredefinedType::PT_boolean: - *os << "boolean_array"; - break; - default: - // error - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_predefined_type - " - "bad primitive type for optimized code gen\n"), - -1); - } - - // Handle special case to avoid compiler errors. - switch (node->pt ()) - { - case AST_PredefinedType::PT_char: - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_CDR_INPUT: - *os << " ((char *)_tao_sequence.get_buffer (), "; - break; - case TAO_CodeGen::TAO_CDR_OUTPUT: - *os << " ((const char *)_tao_sequence.get_buffer (), "; - break; - default: - // error - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs" - "::visit_predefined_type - " - "bad codegen substate\n"), - -1); - } - break; - default: - *os << " (_tao_sequence.get_buffer (), "; - break; - } - - *os << "_tao_sequence.length ());" << be_uidt_nl; - - } // end TAO_CDR_INPUT/OUTPUT case - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_predefined_type - outter " - "bad sub state\n"), - -1); - } // end outter switch - - return 0; -} - -int -be_visitor_sequence_serializer_op_cs::visit_string (be_string *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_serializer_op_cs::visit_typedef (be_typedef *node) -{ - this->ctx_->alias (node); - be_type *bt = node->primitive_base_type (); - - if (!bt || (bt->accept (this) == -1)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_typedef - " - "Bad primitive type\n"), - -1); - } - - this->ctx_->alias (0); - return 0; -} - -int -be_visitor_sequence_serializer_op_cs::visit_node (be_type *bt) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_sequence *node = this->ctx_->be_node_as_sequence (); - - if (!node) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad sequence node\n"), - -1); - } - - be_visitor_context ctx (*this->ctx_); - be_visitor_sequence_base visitor (&ctx); - - // We get here if the "type" of individual elements of the sequence is not a - // primitive type. In this case, we are left with no other alternative but - // to encode/decode element by element. - - AST_Expression *expr = node->max_size (); - - if (expr == 0 || (expr != 0 && expr->ev () == 0)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad sequence dimension\n"), - -1); - } - - AST_Decl::NodeType nt = bt->node_type (); - be_typedef *td = 0; - - if (nt == AST_Decl::NT_typedef) - { - td = be_typedef::narrow_from_decl (bt); - nt = td->base_node_type (); - } - -switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_IS_BOUNDED_SIZE: - if (node->unbounded ()) - { - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - *os << "return false; /* unbounded sequence */"; - } - else - - switch (nt) - { - case AST_Decl::NT_enum: - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - *os << "return true; // bounded seqence of enums"; - break; - case AST_Decl::NT_union: - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - *os << "// Always return false for a union because " << be_nl - << "// _dcps_max_marshaled_size may produce an access violation." - << be_nl - << "return false; // seq of union " << bt->name () << be_uidt; - break; - case AST_Decl::NT_sequence: - case AST_Decl::NT_struct: - // its a type that should be defined in the generated code. - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - *os << bt->name () << " a_base_value;" << be_nl; - *os << "return _tao_is_bounded_size (a_base_value);"; - break; - case AST_Decl::NT_array: - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - *os << bt->name () << " a_base_value;" << be_nl; - *os << bt->name () << "_forany tmp(a_base_value);" << be_nl; - *os << "return _tao_is_bounded_size (tmp);" << be_uidt_nl; - break; - case AST_Decl::NT_string: - case AST_Decl::NT_wstring: - { - be_string *str = - be_string::narrow_from_decl ( - td == 0 ? bt : td->primitive_base_type () - ); - - if (!str) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad string node\n"), - -1); - } - - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - if (str->max_size ()->ev ()->u.ulval == 0) - { - // Unbounded string - *os << "return false; /* bounded seq of unbounded strings */"; - } - else - { - *os << "return true; /* bounded seq of bounded strings */"; - } - } - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - is_bounded_size - " - "unsupported sequence base type\n"), - -1); - break; - } - break; - case TAO_CodeGen::TAO_MAX_MARSHALED_SIZE: - switch (nt) - { - case AST_Decl::NT_enum: - *os << "// sequence of enums" << be_nl - << "return _dcps_max_marshaled_size_ulong () + " << be_idt_nl - << "_tao_sequence.maximum() * " << be_nl - << "_dcps_max_marshaled_size_ulong ();" << be_uidt; - break; - case AST_Decl::NT_union: - *os << "ACE_UNUSED_ARG(_tao_sequence);" << be_nl; - *os << "// do not try getting the _dcps_max_marshaled_size" << be_nl - << "// doing so may produce an access violation" << be_nl - << "return 100000; // seq of union " << bt->name () << be_uidt; - break; - case AST_Decl::NT_sequence: - case AST_Decl::NT_struct: - // its a type that should be defined in the generated code. - *os << bt->name () << " a_base_value;" << be_nl - << "return _dcps_max_marshaled_size_ulong () + " << be_idt_nl - << "_tao_sequence.maximum() * " << be_nl - << "_dcps_max_marshaled_size (a_base_value);" << be_uidt; - break; - case AST_Decl::NT_array: - *os << bt->name () << " a_base_value;" << be_nl; - *os << bt->name() << "_forany tmp(a_base_value);" << be_nl; - *os << "return _dcps_max_marshaled_size_ulong () + " << be_idt_nl - << "_tao_sequence.maximum() * " << be_nl; - *os << "_dcps_max_marshaled_size (tmp);" << be_uidt_nl; - - break; - case AST_Decl::NT_string: - case AST_Decl::NT_wstring: - { - be_string *str = - be_string::narrow_from_decl ( - td == 0 ? bt : td->primitive_base_type () - ); - - if (!str) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad string node\n"), - -1); - } - - u_long max_size = str->max_size ()->ev ()->u.ulval; - if (max_size == 0) - *os << "// bounded seq of unbounded strings" << be_nl; - else - *os << "// bounded seq of bounded strings" << be_nl; - - char buff[15]; - ACE_OS::sprintf(buff, "%ld", max_size); - *os << "return _dcps_max_marshaled_size_ulong () + " << be_nl - << " _tao_sequence.maximum() * "; - *os << "(_dcps_max_marshaled_size_ulong () + " << buff << ");"; - - } - break; - case AST_Decl::NT_interface: - *os << "//DCPS - Sequence of interfaces is not supported" << be_nl; - *os << "return 77777;" << be_nl; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - is_bounded_size - " - "unsupported sequence base type\n"), - -1); - break; - } - break; - case TAO_CodeGen::TAO_FIND_SIZE: - { - *os << "//iterate over the sequence to find the current size" << be_nl - << "size_t the_length = _dcps_max_marshaled_size_ulong ();" << be_nl - << "for ( ::CORBA::ULong i = 0; i < _tao_sequence.length(); " - << "++i)" << be_idt_nl - << "{" << be_idt_nl; - - switch (nt) - { - case AST_Decl::NT_enum: - *os << "the_length += _dcps_max_marshaled_size_ulong (); // enum" << be_uidt_nl; - break; - case AST_Decl::NT_union: - case AST_Decl::NT_sequence: - case AST_Decl::NT_struct: - // its a type that should be defined in the generated code. - *os << "the_length += _dcps_find_size (_tao_sequence[i]);" << be_uidt_nl; - break; - case AST_Decl::NT_array: - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_var tmp_var (" << be_idt << be_idt_nl; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_dup (_tao_sequence[i])" << be_uidt_nl - << ");" << be_uidt_nl; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_forany tmp (tmp_var.inout ());" << be_nl; - *os << "the_length += _dcps_find_size (tmp);" << be_uidt_nl; - - break; - case AST_Decl::NT_string: - case AST_Decl::NT_wstring: - *os << "the_length += _dcps_max_marshaled_size_ulong () + " - << "ACE_OS::strlen (_tao_sequence[i]);" << be_uidt_nl; - break; - case AST_Decl::NT_interface: - *os << "//DCPS - Sequence of interfaces is not supported" << be_nl; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - is_bounded_size - " - "unsupported sequence base type\n"), - -1); - break; - } - - - *os << "}" << be_uidt_nl - << "return the_length;"; - } - break; - case TAO_CodeGen::TAO_CDR_INPUT: - case TAO_CodeGen::TAO_CDR_OUTPUT: - { - // Initialize a boolean variable. - *os << "::CORBA::Boolean _tao_marshal_flag = true;" << be_nl << be_nl; - - - if (expr->ev ()->et == AST_Expression::EV_ulong) - { - *os << "for ( ::CORBA::ULong i = 0; i < _tao_seq_len" - << " && _tao_marshal_flag; " - << "++i)" << be_idt_nl - << "{" << be_idt_nl; - } - else - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad sequence dimension value\n"), - -1); - } - - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_CDR_INPUT: - switch (nt) - { - case AST_Decl::NT_array: - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_forany tmp ("; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_alloc ());" << be_nl; - *os << "_tao_marshal_flag = (strm >> tmp);" << be_nl; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_copy (_tao_sequence[i], tmp.in ());" << be_nl; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_free (tmp.inout ());" << be_uidt_nl; - - break; - case AST_Decl::NT_string: - case AST_Decl::NT_wstring: - { - be_string *str = - be_string::narrow_from_decl ( - td == 0 ? bt : td->primitive_base_type () - ); - - if (!str) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad string node\n"), - -1); - } - - if (str->max_size ()->ev ()->u.ulval == 0) - { - // Unbounded. - *os << node->name () - << "::value_type * buffer = _tao_sequence.get_buffer();" - << be_idt_nl;; - *os << "_tao_marshal_flag = (strm >> buffer[i]);" - << be_uidt_nl; - } - else - { - if (str->width () == (long) sizeof (char)) - { - *os << "_tao_marshal_flag = (strm >> " - << "::ACE_InputCDR::to_string (_tao_sequence[i].out (), "; - } - else - { - *os << "_tao_marshal_flag = (strm >> " - << "::ACE_InputCDR::to_wstring (_tao_sequence[i].out (), "; - } - - *os << str->max_size ()->ev ()->u.ulval << "));" - << be_uidt_nl; - } - } - break; - case AST_Decl::NT_interface: - case AST_Decl::NT_interface_fwd: - case AST_Decl::NT_valuetype: - case AST_Decl::NT_valuetype_fwd: - *os << "//DCPS does not support interfaces and value types"; - - break; - case AST_Decl::NT_pre_defined: - { - // We need to separately handle this case of pseudo objects - // because they have a _var type. - be_predefined_type *pt = - be_predefined_type::narrow_from_decl ( - td == 0 ? bt : td->primitive_base_type () - ); - - if (!pt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad predefined type node\n"), - -1); - } - - switch (pt->pt ()) - { - case AST_PredefinedType::PT_pseudo: - case AST_PredefinedType::PT_object: - case AST_PredefinedType::PT_value: - *os << "_tao_marshal_flag = (strm >> _tao_sequence[i].out ());"; - break; - case AST_PredefinedType::PT_char: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm >> ::ACE_InputCDR::to_char (_tao_sequence[i]));" - << be_uidt; - break; - case AST_PredefinedType::PT_wchar: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm >> ::ACE_InputCDR::to_wchar (_tao_sequence[i]));" - << be_uidt; - break; - case AST_PredefinedType::PT_boolean: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm >> ::ACE_InputCDR::to_boolean (_tao_sequence[i]));" - << be_uidt; - break; - case AST_PredefinedType::PT_octet: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm >> ::ACE_InputCDR::to_octet (_tao_sequence[i]));" - << be_uidt; - break; - default: - *os << "_tao_marshal_flag = (strm >> _tao_sequence[i]);"; - break; - } - } - - break; - default: - *os << "_tao_marshal_flag = (strm >> _tao_sequence[i]);"; - - break; - } - - *os << be_uidt_nl - << "}"; - - break; - case TAO_CodeGen::TAO_CDR_OUTPUT: - switch (nt) - { - case AST_Decl::NT_array: - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_var tmp_var (" << be_idt << be_idt_nl; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_dup (_tao_sequence[i])" << be_uidt_nl - << ");" << be_uidt_nl; - - if (bt->accept (&visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "base type visit failed\n"), - -1); - } - - *os << "_forany tmp (tmp_var.inout ());" << be_nl; - *os << "_tao_marshal_flag = (strm << tmp);"; - - break; - case AST_Decl::NT_interface: - case AST_Decl::NT_interface_fwd: - *os << "//DCPS does not support interfaces"; - - break; - case AST_Decl::NT_string: - case AST_Decl::NT_wstring: - *os << "_tao_marshal_flag = (strm << _tao_sequence[i]);"; - break; - case AST_Decl::NT_valuetype: - case AST_Decl::NT_valuetype_fwd: - *os << "//DCPS does not support value types"; - - break; - case AST_Decl::NT_pre_defined: - { - //SHH harris_s@ociweb.com - I am not sure you can every get here - // predefined types are handled by be_visitor_sequence_serializer_op_cs::visit_predefined_type - be_predefined_type *pt = - be_predefined_type::narrow_from_decl ( - td == 0 ? bt : td->primitive_base_type () - ); - - if (!pt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad predefined type node\n"), - -1); - } - - switch (pt->pt ()) - { - case AST_PredefinedType::PT_pseudo: - case AST_PredefinedType::PT_object: - case AST_PredefinedType::PT_value: - *os << "_tao_marshal_flag = (strm << _tao_sequence[i].in ());"; - break; - case AST_PredefinedType::PT_char: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm << ::ACE_OutputCDR::from_char (_tao_sequence[i]));" - << be_uidt; - break; - case AST_PredefinedType::PT_wchar: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm << ::ACE_OutputCDR::from_wchar (_tao_sequence[i]));" - << be_uidt; - break; - case AST_PredefinedType::PT_boolean: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm << ::ACE_OutputCDR::from_boolean (_tao_sequence[i]));" - << be_uidt; - break; - case AST_PredefinedType::PT_octet: - *os << "_tao_marshal_flag =" << be_idt_nl - << "(strm << ::ACE_OutputCDR::from_octet (_tao_sequence[i]));" - << be_uidt; - break; - default: - *os << "_tao_marshal_flag = (strm << _tao_sequence[i]);"; - break; - } - } - - break; - default: - *os << "_tao_marshal_flag = (strm << _tao_sequence[i]);"; - - break; - } - - *os << be_uidt_nl - << "}"; - - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad sub state\n"), - -1); - } - - *os << be_uidt_nl << be_nl; - *os << "return _tao_marshal_flag;" << be_uidt_nl; - } - break; - default: - // Error. - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_serializer_op_cs::" - "visit_node - " - "bad sub state\n"), - -1); - break; -} //outer switch - - - return 0; -} |