summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-01 04:34:31 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-01 04:34:31 +0000
commitd551f85e057b323158e1648aa86b4df2020cf82a (patch)
tree9ab4432f4f810fe916d42bb8192029baa08489cf
parent2189b4722c008c61aa3176e72dd71e21eb6b0faa (diff)
downloadATCD-d551f85e057b323158e1648aa86b4df2020cf82a.tar.gz
ChangeLogTag: Mon Mar 31 22:31:47 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog8
-rw-r--r--TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp672
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_cs.h5
-rw-r--r--TAO/tao/Sequence_T.cpp12
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 <j.parsons@vanderbilt.edu>
+
+ * 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 <j.parsons@vanderbilt.edu>
* 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<T,T_var,T_life>::operator= (const T_var & p)
template<typename T, typename T_var, typename T_life>
TAO_Abstract_Manager<T,T_var,T_life>::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<typename T, typename T_var, typename T_life>
T *&
TAO_Abstract_Manager<T,T_var,T_life>::out (void)
{
- if (*this->ptr_ != 0)
- {
- (*this->ptr_)->_remove_ref ();
- }
-
+ T_life::tao_release (*this->ptr_);
*this->ptr_ = 0;
return *this->ptr_;
}