From d551f85e057b323158e1648aa86b4df2020cf82a Mon Sep 17 00:00:00 2001 From: parsons Date: Tue, 1 Apr 2003 04:34:31 +0000 Subject: ChangeLogTag: Mon Mar 31 22:31:47 2003 Jeff Parsons --- TAO/ChangeLog | 8 + TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp | 672 ++++++++++++--------- .../be_include/be_visitor_sequence/sequence_cs.h | 5 + TAO/tao/Sequence_T.cpp | 12 +- 4 files changed, 409 insertions(+), 288 deletions(-) diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 5f4936fd7ea..b63819fd3b6 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,11 @@ +Mon Mar 31 22:31:47 2003 Jeff Parsons + + * TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp: + * TAO_IDL/be_include/be_visitor_sequence/sequence_cs.h: + * tao/Sequence_T.cpp: + + Fixed some bugs with sequence template code generation. + Mon Mar 31 18:05:28 2003 Jeff Parsons * tao/Services.cpp: diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp index a3e6e9bc819..56c2e03d43f 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp @@ -151,12 +151,13 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) *os << be_nl << be_nl << node->name () << "::~" << node->local_name () << " (void)" << be_nl - << "{}" << be_nl << be_nl; + << "{}"; if (be_global->any_support ()) { - *os << "void " + *os << be_nl << be_nl + << "void " << node->name () << "::_tao_any_destructor (void *_tao_void_pointer)" << be_nl << "{" << be_idt_nl @@ -166,6 +167,13 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) << "}"; } + // If Any operators are generated, that code will take care of this. + if (!be_global->any_support ()) + { + // This is a no-op unless our element is a managed type. + this->gen_managed_type_tmplinst (node, bt); + } + if (this->ctx_->tdef () != 0) { this->gen_varout_tmplinst (node, @@ -176,6 +184,114 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) return 0; } +void +be_visitor_sequence_cs::gen_managed_type_tmplinst (be_sequence *node, + be_type *bt) +{ + TAO_OutStream *os = this->ctx_->stream (); + + switch (node->managed_type ()) + { + case be_sequence::MNG_OBJREF: + os->gen_ifdef_AHETI (); + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Object_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + os->gen_elif_AHETI (); + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Object_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt; + + os->gen_endif_AHETI (); + + break; + case be_sequence::MNG_ABSTRACT: + os->gen_ifdef_AHETI (); + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Abstract_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + os->gen_elif_AHETI (); + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt; + + os->gen_endif_AHETI (); + + break; + case be_sequence::MNG_VALUE: + os->gen_ifdef_AHETI (); + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + os->gen_elif_AHETI (); + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt; + + os->gen_endif_AHETI (); + + break; + case be_sequence::MNG_PSEUDO: + os->gen_ifdef_AHETI (); + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Pseudo_Object_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + os->gen_elif_AHETI (); + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Pseudo_Object_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var \\" << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt; + + os->gen_endif_AHETI (); + + break; + default: + // String and Wstring managed types are not template classes. + break; + } +} + int be_visitor_sequence_cs::gen_varout_tmplinst (be_sequence *node, be_type *bt) @@ -186,322 +302,322 @@ be_visitor_sequence_cs::gen_varout_tmplinst (be_sequence *node, switch (node->managed_type ()) { - case be_sequence::MNG_OBJREF: - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Object_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << bt->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; + case be_sequence::MNG_OBJREF: + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Object_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_Object_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << bt->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_ABSTRACT: - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << bt->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Object_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << bt->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_PSEUDO: - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Pseudo_Object_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; + break; + case be_sequence::MNG_ABSTRACT: + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Abstract_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_Pseudo_Object_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_VALUE: - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << bt->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Abstract_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << bt->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_STRING: - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - <<"TAO_SeqElem_String_Manager" << be_uidt_nl - << ">;" << be_uidt << be_uidt; + break; + case be_sequence::MNG_PSEUDO: + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Pseudo_Object_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_SeqElem_String_Manager" << be_uidt_nl - << ">;" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_WSTRING: - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - <<"TAO_SeqElem_WString_Manager" << be_uidt_nl - << ">;" << be_uidt << be_uidt; + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Pseudo_Object_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_SeqElem_WString_Manager" << be_uidt_nl - << ">;" << be_uidt << be_uidt; + break; + case be_sequence::MNG_VALUE: + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; - break; - default: // not a managed type - { - AST_Type::SIZE_TYPE st = bt->size_type (); + break; + case be_sequence::MNG_STRING: + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + <<"TAO_SeqElem_String_Manager" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_SeqElem_String_Manager" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + break; + case be_sequence::MNG_WSTRING: *os << be_nl << be_nl << "template class" << be_idt_nl - << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T<" - : "TAO_VarSeq_Var_T<") - << be_idt << be_idt_nl - << node->local_name () << "," << be_nl - << bt->name () << be_uidt_nl + << "TAO_MngSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + <<"TAO_SeqElem_WString_Manager" << be_uidt_nl << ">;" << be_uidt << be_uidt; *os << be_nl << be_nl << "template class" << be_idt_nl << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->local_name () << "," << be_nl - << node->local_name () << "_var," << be_nl - << bt->name () << be_uidt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_SeqElem_WString_Manager" << be_uidt_nl << ">;" << be_uidt << be_uidt; - } - break; + break; + default: // not a managed type + { + AST_Type::SIZE_TYPE st = bt->size_type (); + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T<" + : "TAO_VarSeq_Var_T<") + << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << bt->name () << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_name () << "_var," << be_nl + << bt->name () << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + + break; } os->gen_elif_AHETI (); switch (node->managed_type ()) { - case be_sequence::MNG_OBJREF: - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Object_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var, \\" << be_nl - << bt->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt << be_uidt; + case be_sequence::MNG_OBJREF: + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Object_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt; - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_Object_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var, \\" << be_nl - << bt->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_ABSTRACT: - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var, \\" << be_nl - << bt->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Object_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var, \\" << be_nl - << bt->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_PSEUDO: - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Pseudo_Object_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; + break; + case be_sequence::MNG_ABSTRACT: + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_Pseudo_Object_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_VALUE: - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var, \\" << be_nl - << bt->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl - << bt->name () << ", \\" << be_nl - << bt->name () << "_var, \\" << be_nl - << bt->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_STRING: - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - <<"TAO_SeqElem_String_Manager \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; + break; + case be_sequence::MNG_PSEUDO: + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Pseudo_Object_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_SeqElem_String_Manager \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; - - break; - case be_sequence::MNG_WSTRING: - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - <<"TAO_SeqElem_WString_Manager \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Pseudo_Object_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_SeqElem_WString_Manager \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; + break; + case be_sequence::MNG_VALUE: + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; - break; - default: // not a managed type - { - AST_Type::SIZE_TYPE st = bt->size_type (); + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; + break; + case be_sequence::MNG_STRING: *os << be_nl << be_nl << "# pragma instantiate \\" << be_idt_nl - << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T< \\" - : "TAO_VarSeq_Var_T< \\") - << be_idt << be_idt_nl - << node->local_name () << ", \\" << be_nl - << bt->name () << " \\" << be_uidt_nl + << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + <<"TAO_SeqElem_String_Manager \\" << be_uidt_nl << ">" << be_uidt << be_uidt; *os << be_nl << be_nl << "# pragma instantiate \\" << be_idt_nl << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->local_name () << ", \\" << be_nl - << node->local_name () << "_var, \\" << be_nl - << bt->name () << " \\" << be_uidt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_SeqElem_String_Manager \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + + break; + case be_sequence::MNG_WSTRING: + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_MngSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + <<"TAO_SeqElem_WString_Manager \\" << be_uidt_nl << ">" << be_uidt << be_uidt; - } - break; + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_SeqElem_WString_Manager \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + + break; + default: // not a managed type + { + AST_Type::SIZE_TYPE st = bt->size_type (); + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T< \\" + : "TAO_VarSeq_Var_T< \\") + << be_idt << be_idt_nl + << node->local_name () << ", \\" << be_nl + << bt->name () << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->local_name () << ", \\" << be_nl + << node->local_name () << "_var, \\" << be_nl + << bt->name () << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + + break; } os->gen_endif_AHETI (); diff --git a/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_cs.h b/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_cs.h index 6c4d6aabebc..f6e8c2b8e24 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_cs.h +++ b/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_cs.h @@ -48,6 +48,11 @@ public: be_type *bt); // Generate explicit template instantiations for our _var // and _out classes. + + void gen_managed_type_tmplinst (be_sequence *node, + be_type *bt); + // Generate explicit instantiation for our element type, if + // it is a managed type and if Any operator generation is suppressed. }; #endif /* _BE_VISITOR_SEQUENCE_SEQUENCE_CS_H_ */ diff --git a/TAO/tao/Sequence_T.cpp b/TAO/tao/Sequence_T.cpp index 72e9114b1db..2c7bbb97fce 100644 --- a/TAO/tao/Sequence_T.cpp +++ b/TAO/tao/Sequence_T.cpp @@ -714,11 +714,7 @@ TAO_Abstract_Manager::operator= (const T_var & p) template TAO_Abstract_Manager::operator const T_var () const { - if (*this->ptr_ != 0) - { - (*this->ptr_)->_add_ref (); - } - + T_life::tao_duplicate (*this->ptr_); return *this->ptr_; } @@ -726,11 +722,7 @@ template T *& TAO_Abstract_Manager::out (void) { - if (*this->ptr_ != 0) - { - (*this->ptr_)->_remove_ref (); - } - + T_life::tao_release (*this->ptr_); *this->ptr_ = 0; return *this->ptr_; } -- cgit v1.2.1