diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-03-27 09:06:50 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-03-27 09:06:50 +0000 |
commit | 9e022a7ddd06f2ff07faebfc2034e29a573c11f6 (patch) | |
tree | d7bdc8ab061ac3e6d9f9e019f2dbda72c4c01a6b | |
parent | 0e107c28c8aa35c6096ffc6ca5f32c85eea16866 (diff) | |
download | ATCD-9e022a7ddd06f2ff07faebfc2034e29a573c11f6.tar.gz |
ChangeLogTag: Thu Mar 27 03:00:53 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
34 files changed, 1301 insertions, 1335 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 9cf22e1c964..87e4764564c 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -34,6 +34,7 @@ Thu Mar 27 03:00:53 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * tao/Pseudo_VarOut_T.cpp: * tao/Pseudo_VarOut_T.h: + * tao/Pseudo_VarOut_T.inl: New files for the _var and _out classes for CORBA::Object and CORBA::TypeCode. diff --git a/TAO/TAO_IDL/ast/ast_predefined_type.cpp b/TAO/TAO_IDL/ast/ast_predefined_type.cpp index d71d4e1cbdf..669915692aa 100644 --- a/TAO/TAO_IDL/ast/ast_predefined_type.cpp +++ b/TAO/TAO_IDL/ast/ast_predefined_type.cpp @@ -180,6 +180,10 @@ AST_PredefinedType::AST_PredefinedType (PredefinedType t, ACE_NEW (id, Identifier ("Object")); break; + case AST_PredefinedType::PT_value: + ACE_NEW (id, + Identifier ("ValueBase")); + break; case AST_PredefinedType::PT_pseudo: ACE_NEW (id, Identifier (n->last_component ()->get_string ())); diff --git a/TAO/TAO_IDL/be/be_predefined_type.cpp b/TAO/TAO_IDL/be/be_predefined_type.cpp index 7c092c7f5cd..0e157a1b415 100644 --- a/TAO/TAO_IDL/be/be_predefined_type.cpp +++ b/TAO/TAO_IDL/be/be_predefined_type.cpp @@ -49,6 +49,15 @@ be_predefined_type::be_predefined_type (AST_PredefinedType::PredefinedType t, // Compute the flattened fully scoped name. this->AST_Decl::compute_flat_name (); + + if (t == AST_PredefinedType::PT_object) + { + this->fwd_helper_name_ = "CORBA::tao_Object"; + } + else if (t == AST_PredefinedType::PT_value) + { + this->fwd_helper_name_ = "CORBA::tao_ValueBase"; + } } // Overriden method. @@ -133,6 +142,10 @@ be_predefined_type::compute_tc_name (void) ACE_NEW (id, Identifier ("_tc_Object")); break; + case AST_PredefinedType::PT_value: + ACE_NEW (id, + Identifier ("_tc_ValueBase")); + break; case AST_PredefinedType::PT_pseudo: { char tcname [100]; diff --git a/TAO/TAO_IDL/be/be_sequence.cpp b/TAO/TAO_IDL/be/be_sequence.cpp index 758d442bd1f..fd51d8e2aae 100644 --- a/TAO/TAO_IDL/be/be_sequence.cpp +++ b/TAO/TAO_IDL/be/be_sequence.cpp @@ -263,17 +263,20 @@ be_sequence::managed_type (void) be_predefined_type::narrow_from_decl (prim_type); AST_PredefinedType::PredefinedType pt = bpd->pt (); - if (pt == AST_PredefinedType::PT_pseudo) + switch (pt) { - this->mt_ = be_sequence::MNG_PSEUDO; - } - else if (pt == AST_PredefinedType::PT_object) - { - this->mt_ = be_sequence::MNG_OBJREF; - } - else - { - this->mt_ = be_sequence::MNG_NONE; + case AST_PredefinedType::PT_pseudo: + this->mt_ = be_sequence::MNG_PSEUDO; + break; + case AST_PredefinedType::PT_object: + this->mt_ = be_sequence::MNG_PSEUDO; + break; + case AST_PredefinedType::PT_value: + this->mt_ = be_sequence::MNG_VALUE; + break; + default: + this->mt_ = be_sequence::MNG_NONE; + break; } } break; 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 index 0e277d95e17..af51027505c 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp @@ -296,6 +296,7 @@ be_visitor_sequence_cdr_op_cs::visit_predefined_type ( 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); @@ -705,7 +706,8 @@ be_visitor_sequence_cdr_op_cs::visit_node (be_type *bt) AST_PredefinedType::PredefinedType pdt = pt->pt (); if (pdt == AST_PredefinedType::PT_pseudo - || pdt == AST_PredefinedType::PT_object) + || pdt == AST_PredefinedType::PT_object + || pdt == AST_PredefinedType::PT_value) { *os << "_tao_marshal_flag = (strm >> _tao_sequence[i].out ());" << be_uidt_nl; @@ -837,7 +839,8 @@ be_visitor_sequence_cdr_op_cs::visit_node (be_type *bt) AST_PredefinedType::PredefinedType pdt = pt->pt (); if (pdt == AST_PredefinedType::PT_pseudo - || pdt == AST_PredefinedType::PT_object) + || pdt == AST_PredefinedType::PT_object + || pdt == AST_PredefinedType::PT_value) { *os << "_tao_marshal_flag = (strm << _tao_sequence[i].in ());"; } diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp index bdbd358dc45..af1fe3fa826 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp @@ -78,9 +78,6 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) switch (node->managed_type ()) { case be_sequence::MNG_OBJREF: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - if (node->unbounded ()) { *os << be_nl << be_nl @@ -88,8 +85,8 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) << "TAO_Unbounded_Object_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << elem->fwd_helper_name () << "_cast" << be_uidt_nl + << bt->fwd_helper_name () << "_life," << be_nl + << bt->fwd_helper_name () << "_cast" << be_uidt_nl << "> " << node->local_name () << ";" << be_uidt << be_uidt; } else @@ -99,8 +96,8 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << elem->fwd_helper_name () << "_cast," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << bt->fwd_helper_name () << "_cast," << be_nl << node->max_size ()->ev ()->u.ulval << be_uidt_nl << "> " << node->local_name () << ";" << be_uidt << be_uidt; } @@ -115,7 +112,7 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) << "TAO_Object_Manager<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl << ">" << be_uidt << be_uidt_nl << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; @@ -127,151 +124,241 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) << "TAO_Object_Manager<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl << ">" << be_uidt << be_uidt_nl << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; } - } break; case be_sequence::MNG_ABSTRACT: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Unbounded_Abstract_Sequence<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << "> " << node->local_name () << ";" << be_uidt << be_uidt; - } - else - { - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << "> " << node->local_name () << ";" << be_uidt << be_uidt; - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_Abstract_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << "> " << node->local_name () << ";" << be_uidt << be_uidt; + } + else + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << "> " << node->local_name () << ";" << be_uidt << be_uidt; + } - // Generate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->local_name () << "," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; + // Generate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->local_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 + << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->local_name () << "," << be_nl - << node->local_name () << "_var," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; - } - } + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_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 + << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; + } break; case be_sequence::MNG_PSEUDO: if (node->unbounded ()) { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_Pseudo_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var" << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; } else { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_Pseudo_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; + } + + // Generate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->local_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 + << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_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 + << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; } break; case be_sequence::MNG_VALUE: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Unbounded_Valuetype_Sequence<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt_nl - << node->local_name () << ";" << be_uidt; - } - else - { - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Bounded_Valuetype_Sequence<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << ">" << be_uidt_nl - << node->local_name () << ";" << be_uidt; - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; + } + else + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; + } - // Generate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->local_name () << "," << be_nl - << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; + // Generate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->local_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 + << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; - *os << be_nl << be_nl - << "typedef" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->local_name () << "," << be_nl - << node->local_name () << "_var," << be_nl - << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl - << bt->name () << "," << be_nl - << bt->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; - } - } + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_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 + << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; + } break; case be_sequence::MNG_STRING: if (node->unbounded ()) { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_String_Sequence" << be_nl + << node->local_name () << ";" << be_uidt; } else { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_String_Sequence<" + << node->max_size ()->ev ()->u.ulval << ">" << be_nl + << node->local_name () << ";" << be_uidt; + } + + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << "TAO_SeqElem_String_Manager" << 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_nl + << node->local_name () << "_var," << be_nl + << "TAO_SeqElem_String_Manager" << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << "_out;" << be_uidt; } break; case be_sequence::MNG_WSTRING: if (node->unbounded ()) { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_WString_Sequence" << be_nl + << node->local_name () << ";" << be_uidt; } else { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_WString_Sequence<" + << node->max_size ()->ev ()->u.ulval << ">" << be_nl + << node->local_name () << ";" << be_uidt; + } + + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << "TAO_SeqElem_WString_Manager" << 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_nl + << node->local_name () << "_var," << be_nl + << "TAO_SeqElem_WString_Manager" << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << "_out;" << be_uidt; } + break; default: // Not a managed type. if (bt->base_node_type () == AST_Decl::NT_array) 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 56adee4cef0..b148609aaba 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp @@ -54,196 +54,260 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) switch (node->managed_type ()) { case be_sequence::MNG_OBJREF: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Unbounded_Object_Sequence<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << elem->fwd_helper_name () << "_cast" << be_uidt_nl - << ">;" << be_uidt << be_uidt_nl; - } - else - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << elem->fwd_helper_name () << "_cast," << be_nl - << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - - // Instantiate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Object_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->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 - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Object_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << bt->fwd_helper_name () << "_cast" << be_uidt_nl + << ">;" << be_uidt << be_uidt_nl; + } + else + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << bt->fwd_helper_name () << "_cast," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_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: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Unbounded_Abstract_Sequence<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - else - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Bounded_Abstract_Sequence<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - - // Instantiate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->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 - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Abstract_Sequence<" << 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; + } + else + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Abstract_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_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_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: if (node->unbounded ()) { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Pseudo_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var" << be_uidt_nl + << ">;" << be_uidt << be_uidt; } else { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Pseudo_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; } + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_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_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: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Unbounded_Valuetype_Sequence<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - else - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_Bounded_Valuetype_Sequence<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life," << be_nl - << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - - // Instantiate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "template class" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->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 - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt; - } - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Valuetype_Sequence<" << 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; + } + else + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_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; case be_sequence::MNG_STRING: - if (node->unbounded ()) + if (! node->unbounded ()) { + *os << be_nl << be_nl + << "template class TAO_Bounded_String_Sequence<" << be_nl + << node->max_size ()->ev ()->u.ulval << ">;"; } - else + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_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: - if (node->unbounded ()) + if (! node->unbounded ()) { + *os << be_nl << be_nl + << "template class TAO_Bounded_WString_Sequence<" + << node->max_size ()->ev ()->u.ulval << ">;"; } - else + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_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_SeqElem_WString_Manager" << be_uidt_nl + << ">;" << be_uidt << be_uidt; } break; @@ -324,196 +388,260 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) switch (node->managed_type ()) { case be_sequence::MNG_OBJREF: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_Unbounded_Object_Sequence< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life, \\" << be_nl - << elem->fwd_helper_name () << "_cast, \\" << be_uidt_nl - << ">" << be_uidt << be_uidt << be_uidt << be_uidt; - } - else - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_Bounded_Object_Sequence< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life, \\" << be_nl - << elem->fwd_helper_name () << "_cast \\" << be_nl - << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl - << ">" << be_uidt << be_uidt << be_uidt << be_uidt; - } - - // Instantiate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Object_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->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 - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Unbounded_Object_Sequence< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life, \\" << be_nl + << bt->fwd_helper_name () << "_cast, \\" << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt << be_uidt; + } + else + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Bounded_Object_Sequence< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life, \\" << be_nl + << bt->fwd_helper_name () << "_cast \\" << be_nl + << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_VarSeq_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: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Unbounded_Abstract_Sequence< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - else - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Bounded_Abstract_Sequence< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life, \\" << be_nl - << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - - // Instantiate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->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 - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Unbounded_Abstract_Sequence< \\" << 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; + } + else + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Abstract_Sequence< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life, \\" << be_nl + << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_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_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: if (node->unbounded ()) { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Unbounded_Pseudo_Sequence< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; } else { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Pseudo_Sequence< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_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_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: - { - be_interface *elem = be_interface::narrow_from_decl (bt); - - if (node->unbounded ()) - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Unbounded_Valuetype_Sequence< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - else - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_Bounded_Valuetype_Sequence< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life, \\" << be_nl - << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - - // Instantiate the _var and _out types only if we are not anonymous. - if (this->ctx_->tdef () != 0) - { - *os << be_nl << be_nl - << "# pragma instantiate \\" << be_idt_nl - << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->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 - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt; - } - } + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Unbounded_Valuetype_Sequence< \\" << 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; + } + else + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Valuetype_Sequence< \\" << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->name () << "_var, \\" << be_nl + << bt->fwd_helper_name () << "_life, \\" << be_nl + << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_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_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: - if (node->unbounded ()) + if (! node->unbounded ()) { + *os << be_nl << be_nl + << "# pragma instantiate TAO_Bounded_String_Sequence< \\" << be_nl + << node->max_size ()->ev ()->u.ulval << ">"; } - else + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_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->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: - if (node->unbounded ()) + if (! node->unbounded ()) { + *os << be_nl << be_nl + << "# pragma instantiate TAO_Bounded_WString_Sequence<" + << node->max_size ()->ev ()->u.ulval << ">"; } - else + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_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_SeqElem_WString_Manager \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; } break; diff --git a/TAO/TAO_IDL/fe/fe_init.cpp b/TAO/TAO_IDL/fe/fe_init.cpp index c136d88690e..69b5cc2a121 100644 --- a/TAO/TAO_IDL/fe/fe_init.cpp +++ b/TAO/TAO_IDL/fe/fe_init.cpp @@ -496,7 +496,7 @@ fe_populate_global_scope (AST_Module *m) UTL_ScopedName ValueBase_name (&ValueBase_id, 0); pdt = idl_global->gen ()->create_predefined_type ( - AST_PredefinedType::PT_pseudo, + AST_PredefinedType::PT_value, &ValueBase_name ); m->fe_add_predefined_type (pdt); diff --git a/TAO/TAO_IDL/include/ast_predefined_type.h b/TAO/TAO_IDL/include/ast_predefined_type.h index 72b604b69f2..f4ae1f75d20 100644 --- a/TAO/TAO_IDL/include/ast_predefined_type.h +++ b/TAO/TAO_IDL/include/ast_predefined_type.h @@ -92,6 +92,7 @@ public: , PT_octet // Predefined type "octet" , PT_any // Predefined type "CORBA::Any" , PT_object // Predefined type "CORBA::Object" + , PT_value // Predefined type "CORBA::ValueBase" , PT_void // Predefined type "void" , PT_pseudo // Predefined type for pseudo objects }; diff --git a/TAO/tao/Adapter.cpp b/TAO/tao/Adapter.cpp index bb7a26db570..2e10412a4d3 100644 --- a/TAO/tao/Adapter.cpp +++ b/TAO/tao/Adapter.cpp @@ -2,10 +2,6 @@ #include "tao/Adapter.h" -#include "tao/Object.h" -#include "tao/Object_KeyC.h" -#include "tao/ORB_Core.h" -#include "tao/ORB.h" #include "ace/Dynamic_Service.h" #include "debug.h" diff --git a/TAO/tao/Adapter.h b/TAO/tao/Adapter.h index 6b1bdcc6571..da3e425f5ac 100644 --- a/TAO/tao/Adapter.h +++ b/TAO/tao/Adapter.h @@ -15,15 +15,14 @@ #define TAO_ADAPTER_H #include "ace/pre.h" -#include "tao/corbafwd.h" -#include "tao/Exception.h" -#include "tao/Object_KeyC.h" -#include "ace/Service_Object.h" +#include "tao/Object.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "ace/Service_Object.h" + #if defined(_MSC_VER) #if (_MSC_VER >= 1200) #pragma warning(push) diff --git a/TAO/tao/Object.cpp b/TAO/tao/Object.cpp index 2b7a2cf7a2b..304890b14df 100644 --- a/TAO/tao/Object.cpp +++ b/TAO/tao/Object.cpp @@ -68,6 +68,34 @@ CORBA::Object::Object (TAO_Stub * protocol_proxy, } } +CORBA::Object_ptr +CORBA::Object::_unchecked_narrow (CORBA::Object_ptr obj + ACE_ENV_ARG_DECL_NOT_USED) +{ + if (CORBA::is_nil (obj)) + { + return CORBA::Object::_nil (); + } + + if (obj->is_local_) + { + return + ACE_reinterpret_cast ( + CORBA::Object_ptr, + obj->_tao_QueryInterface ( + ACE_reinterpret_cast ( + ptr_arith_t, + &CORBA::Object::_tao_class_id + ) + ) + ); + } + else + { + return CORBA::Object::_duplicate (obj); + } +} + void CORBA::Object::_add_ref (void) { diff --git a/TAO/tao/Object.h b/TAO/tao/Object.h index 5c5dc1ad498..17ef7f5ed67 100644 --- a/TAO/tao/Object.h +++ b/TAO/tao/Object.h @@ -21,26 +21,30 @@ #include "ace/pre.h" -#include "tao/corbafwd.h" +#include "tao/Policy_ForwardC.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ -#include "tao/Policy_ForwardC.h" #include "tao/Object_KeyC.h" +#include "tao/Pseudo_VarOut_T.h" #include "ace/Synch.h" class TAO_Stub; class TAO_Abstract_ServantBase; class TAO_Object_Proxy_Broker; -class TAO_ObjectKey; namespace CORBA { class InterfaceDef; typedef InterfaceDef *InterfaceDef_ptr; + class Object; + + typedef TAO_Pseudo_Var_T<Object> Object_var; + typedef TAO_Pseudo_Out_T<Object, Object_var> Object_out; + /** * @class Object * @@ -304,77 +308,6 @@ namespace CORBA TAO_SYNCH_MUTEX * refcount_lock_; }; - - /** - * @class Object_var - * - * @brief Object_var - * - * Object_var. - */ - class TAO_Export Object_var : private TAO_Base_var - { - public: - Object_var (void); // default constructor - Object_var (CORBA::Object_ptr); - Object_var (const Object_var &); // copy constructor - ~Object_var (void); // destructor - - Object_var &operator= (CORBA::Object_ptr); - Object_var &operator= (const Object_var &); - CORBA::Object_ptr operator-> (void) const; - - /// in, inout, out, _retn - operator const CORBA::Object_ptr &() const; - operator CORBA::Object_ptr &(); - CORBA::Object_ptr in (void) const; - CORBA::Object_ptr &inout (void); - CORBA::Object_ptr &out (void); - CORBA::Object_ptr _retn (void); - CORBA::Object_ptr ptr (void) const; - - static CORBA::Object_ptr tao_duplicate (CORBA::Object_ptr); - static void tao_release (CORBA::Object_ptr); - static CORBA::Object_ptr tao_nil (void); - static CORBA::Object_ptr tao_narrow (CORBA::Object * - ACE_ENV_ARG_DECL); - static CORBA::Object * tao_upcast (void *); - - private: - - // Unimplemented - Prevent widening assignment. - Object_var (const TAO_Base_var &rhs); - Object_var &operator= (const TAO_Base_var &rhs); - - private: - - CORBA::Object_ptr ptr_; - - }; - - /** - * @class Object_out - * - * @brief Object_out - * - * Object_out - */ - class TAO_Export Object_out - { - public: - Object_out (CORBA::Object_ptr &); - Object_out (Object_var &); - Object_out (const Object_out &); - Object_out &operator= (const Object_out &); - Object_out &operator= (const Object_var &); - Object_out &operator= (CORBA::Object_ptr); - operator CORBA::Object_ptr &(); - CORBA::Object_ptr &ptr (void); - CORBA::Object_ptr operator-> (void); - - private: - CORBA::Object_ptr &ptr_; - }; } // End CORBA namespace. /// This function pointer is set only when the Portable server diff --git a/TAO/tao/Object.i b/TAO/tao/Object.i index 72ca365f31a..8a4b777483c 100644 --- a/TAO/tao/Object.i +++ b/TAO/tao/Object.i @@ -16,25 +16,33 @@ CORBA::Object::Object (int) { } -ACE_INLINE CORBA::Object_ptr +ACE_INLINE +CORBA::Object_ptr CORBA::Object::_duplicate (CORBA::Object_ptr obj) { if (obj) - obj->_add_ref (); + { + obj->_add_ref (); + } + return obj; } // ************************************************************ // These are in CORBA namespace -ACE_INLINE void +ACE_INLINE +void CORBA::release (CORBA::Object_ptr obj) { if (obj) - obj->_remove_ref (); + { + obj->_remove_ref (); + } } -ACE_INLINE CORBA::Boolean +ACE_INLINE +CORBA::Boolean CORBA::is_nil (CORBA::Object_ptr obj) { if (obj == 0) @@ -49,30 +57,15 @@ CORBA::is_nil (CORBA::Object_ptr obj) // Null pointers represent nil objects. -ACE_INLINE CORBA::Object_ptr +ACE_INLINE +CORBA::Object_ptr CORBA::Object::_nil (void) { return 0; } -ACE_INLINE CORBA::Object_ptr -CORBA::Object::_unchecked_narrow (CORBA::Object_ptr obj - ACE_ENV_ARG_DECL_NOT_USED) -{ - if (CORBA::is_nil (obj)) - return CORBA::Object::_nil (); - - if (obj->is_local_) - return - ACE_reinterpret_cast (CORBA::Object_ptr, - obj->_tao_QueryInterface - (ACE_reinterpret_cast (ptr_arith_t, - &CORBA::Object::_tao_class_id))); - else - return CORBA::Object::_duplicate (obj); -} - -ACE_INLINE CORBA::Object_ptr +ACE_INLINE +CORBA::Object_ptr CORBA::Object::_narrow (CORBA::Object_ptr obj ACE_ENV_ARG_DECL) { @@ -80,214 +73,17 @@ CORBA::Object::_narrow (CORBA::Object_ptr obj ACE_ENV_ARG_PARAMETER); } -ACE_INLINE TAO_Stub * +ACE_INLINE +TAO_Stub * CORBA::Object::_stubobj (void) const { return this->protocol_proxy_; } -ACE_INLINE CORBA::Boolean +ACE_INLINE +CORBA::Boolean CORBA::Object::marshal (TAO_OutputCDR &cdr) { return (cdr << this); } -// ************************************************************* -// Inline operations for class CORBA::Object_var -// ************************************************************* - -ACE_INLINE -CORBA::Object_var::Object_var (void) - : ptr_ (CORBA::Object::_nil ()) -{ -} - -ACE_INLINE -CORBA::Object_var::Object_var (CORBA::Object_ptr p) - : ptr_ (p) -{ -} - -ACE_INLINE -CORBA::Object_var::~Object_var (void) -{ - CORBA::release (this->ptr_); -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::ptr (void) const -{ - return this->ptr_; -} - -ACE_INLINE -CORBA::Object_var::Object_var (const CORBA::Object_var &p) - : TAO_Base_var (), - ptr_ (CORBA::Object::_duplicate (p.ptr ())) -{ -} - -ACE_INLINE CORBA::Object_var & -CORBA::Object_var::operator= (CORBA::Object_ptr p) -{ - CORBA::release (this->ptr_); - this->ptr_ = p; - return *this; -} - -ACE_INLINE CORBA::Object_var & -CORBA::Object_var::operator= (const CORBA::Object_var &p) -{ - if (this != &p) - { - CORBA::release (this->ptr_); - this->ptr_ = CORBA::Object::_duplicate (p.ptr ()); - } - return *this; -} - -ACE_INLINE -CORBA::Object_var::operator const CORBA::Object_ptr &() const // cast -{ - return this->ptr_; -} - -ACE_INLINE -CORBA::Object_var::operator CORBA::Object_ptr &() // cast -{ - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::operator-> (void) const -{ - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::in (void) const -{ - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr & -CORBA::Object_var::inout (void) -{ - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr & -CORBA::Object_var::out (void) -{ - CORBA::release (this->ptr_); - this->ptr_ = CORBA::Object::_nil (); - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::_retn (void) -{ - // yield ownership of managed obj reference - CORBA::Object_ptr val = this->ptr_; - this->ptr_ = CORBA::Object::_nil (); - return val; -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::tao_duplicate (CORBA::Object_ptr p) -{ - return CORBA::Object::_duplicate (p); -} - -ACE_INLINE void -CORBA::Object_var::tao_release (CORBA::Object_ptr p) -{ - CORBA::release (p); -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::tao_nil (void) -{ - return CORBA::Object::_nil (); -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_var::tao_narrow ( - CORBA::Object *p - ACE_ENV_ARG_DECL_NOT_USED - ) -{ - return CORBA::Object::_duplicate (p); -} - -ACE_INLINE CORBA::Object * -CORBA::Object_var::tao_upcast (void *src) -{ - CORBA::Object **tmp = - ACE_static_cast (CORBA::Object **, src); - return *tmp; -} - -// ************************************************************* -// Inline operations for class CORBA::Object_out -// ************************************************************* - -ACE_INLINE -CORBA::Object_out::Object_out (CORBA::Object_ptr &p) - : ptr_ (p) -{ - this->ptr_ = CORBA::Object::_nil (); -} - -ACE_INLINE -CORBA::Object_out::Object_out (CORBA::Object_var &p) - : ptr_ (p.out ()) -{ - CORBA::release (this->ptr_); - this->ptr_ = CORBA::Object::_nil (); -} - -ACE_INLINE -CORBA::Object_out::Object_out (const CORBA::Object_out &p) - : ptr_ (p.ptr_) -{ -} - -ACE_INLINE CORBA::Object_out & -CORBA::Object_out::operator= (const CORBA::Object_out &p) -{ - this->ptr_ = p.ptr_; - return *this; -} - -ACE_INLINE CORBA::Object_out & -CORBA::Object_out::operator= (const CORBA::Object_var &p) -{ - this->ptr_ = CORBA::Object::_duplicate (p.ptr ()); - return *this; -} - -ACE_INLINE CORBA::Object_out & -CORBA::Object_out::operator= (CORBA::Object_ptr p) -{ - this->ptr_ = p; - return *this; -} - -ACE_INLINE -CORBA::Object_out::operator CORBA::Object_ptr &() // cast -{ - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr & -CORBA::Object_out::ptr (void) // ptr -{ - return this->ptr_; -} - -ACE_INLINE CORBA::Object_ptr -CORBA::Object_out::operator-> (void) -{ - return this->ptr_; -} diff --git a/TAO/tao/Objref_VarOut_T.h b/TAO/tao/Objref_VarOut_T.h index f62c7d79f59..26885a3ffc3 100644 --- a/TAO/tao/Objref_VarOut_T.h +++ b/TAO/tao/Objref_VarOut_T.h @@ -98,6 +98,10 @@ private: T *& ptr_; }; +#if defined (__ACE_INLINE__) +#include "tao/Objref_Varout_T.inl" +#endif /* __ACE_INLINE__ */ + #if defined (ACE_TEMPLATES_REQUIRE_SOURCE) #include "tao/Objref_Varout_T.cpp" #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ diff --git a/TAO/tao/Objref_VarOut_T.inl b/TAO/tao/Objref_VarOut_T.inl new file mode 100644 index 00000000000..74e88caa0c5 --- /dev/null +++ b/TAO/tao/Objref_VarOut_T.inl @@ -0,0 +1,2 @@ +// $Id$ + diff --git a/TAO/tao/Pseudo_VarOut_T.cpp b/TAO/tao/Pseudo_VarOut_T.cpp new file mode 100644 index 00000000000..ee893f6b7be --- /dev/null +++ b/TAO/tao/Pseudo_VarOut_T.cpp @@ -0,0 +1,16 @@ +// $Id$ + +#ifndef TAO_PSEUDO_VAROUT_T_C +#define TAO_PSEUDO_VAROUT_T_C + +#include "tao/Pseudo_VarOut_T.h" + +#if !defined (__ACE_INLINE__) +#include "tao/Pseudo_VarOut_T.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID (tao, + Pseudo_VarOut_T, + "$Id$") + +#endif /* TAO_PSEUDO_VAROUT_T_C */ diff --git a/TAO/tao/Pseudo_VarOut_T.h b/TAO/tao/Pseudo_VarOut_T.h new file mode 100644 index 00000000000..57155a85f6c --- /dev/null +++ b/TAO/tao/Pseudo_VarOut_T.h @@ -0,0 +1,105 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Pseudo_VarOut_T.h + * + * $Id$ + * + * @author Jeff Parsons + */ +//============================================================================= + + +#ifndef TAO_PSEUDO_VAROUT_T_H +#define TAO_PSEUDO_VAROUT_T_H + +#include "ace/pre.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class TAO_Pseudo_Var_T + * + * @brief Parametrized implementation of _var class for + * CORBA::TypeCode and CORBA::Object. + * + */ +template <typename T> +class TAO_Pseudo_Var_T +{ +public: + TAO_Pseudo_Var_T (void); + TAO_Pseudo_Var_T (T *); + TAO_Pseudo_Var_T (const TAO_Pseudo_Var_T<T> &); + + ~TAO_Pseudo_Var_T (void); + + TAO_Pseudo_Var_T<T> & operator= (T *); + TAO_Pseudo_Var_T<T> & operator= (const TAO_Pseudo_Var_T<T> &); + + T * operator-> (void) const; + + operator const T *& () const; + operator T *& (); + + T * in (void) const; + T *& inout (void); + T *& out (void); + T * _retn (void); + + // TAO extension. + T * ptr (void) const; + +private: + T * ptr_; +}; + +/** + * @class TAO_Pseudo_Out_T + * + * @brief Parametrized implementation of _out class for + * CORBA::TypeCode and CORBA::Object. + * + */ +template <typename T, typename T_var> +class TAO_Pseudo_Out_T +{ +public: + TAO_Pseudo_Out_T (T *&); + TAO_Pseudo_Out_T (T_var &); + TAO_Pseudo_Out_T (const TAO_Pseudo_Out_T<T,T_var> &); + + TAO_Pseudo_Out_T<T,T_var> & operator= (const TAO_Pseudo_Out_T<T,T_var> &); + TAO_Pseudo_Out_T<T,T_var> & operator= (T *); + + operator T *& (); + + T *& ptr (void); + + T * operator-> (void); + +private: + T *& ptr_; + + /// Assignment from _var not allowed. + TAO_Pseudo_Out_T<T,T_var> & operator= (const T_var &); +}; + +#if defined (__ACE_INLINE__) +#include "tao/Pseudo_VarOut_T.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "tao/Pseudo_VarOut_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) +#pragma implementation ("Pseudo_VarOut_T.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + +#include "ace/post.h" + +#endif /* TAO_PSEUDO_VAROUT_T_H */ diff --git a/TAO/tao/Pseudo_VarOut_T.inl b/TAO/tao/Pseudo_VarOut_T.inl new file mode 100644 index 00000000000..bcbd4e8b4dd --- /dev/null +++ b/TAO/tao/Pseudo_VarOut_T.inl @@ -0,0 +1,184 @@ +// $Id$ + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T>::TAO_Pseudo_Var_T (void) + : ptr_ (T::_nil ()) +{} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T>::TAO_Pseudo_Var_T (T * p) + : ptr_ (p) +{} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T>::TAO_Pseudo_Var_T (const TAO_Pseudo_Var_T<T> & p) + : ptr_ (T::_duplicate (p.ptr ())) +{} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T>::~TAO_Pseudo_Var_T (void) +{ + CORBA::release (this->ptr_); +} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T> & +TAO_Pseudo_Var_T<T>::operator= (T * p) +{ + CORBA::release (this->ptr_); + this->ptr_ = p; + return *this; +} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T> & +TAO_Pseudo_Var_T<T>::operator= (const TAO_Pseudo_Var_T<T> & p) +{ + if (this != &p) + { + CORBA::release (this->ptr_); + this->ptr_ = T::_duplicate (p.ptr ()); + } + + return *this; +} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T>::operator const T *& () const +{ + return this->ptr_; +} + +template <typename T> +ACE_INLINE +TAO_Pseudo_Var_T<T>::operator T *& () +{ + return this->ptr_; +} + +template <typename T> +ACE_INLINE +T * +TAO_Pseudo_Var_T<T>::operator-> (void) const +{ + return this->ptr_; +} + +template <typename T> +ACE_INLINE +T * +TAO_Pseudo_Var_T<T>::in (void) const +{ + return this->ptr_; +} + +template <typename T> +ACE_INLINE +T *& +TAO_Pseudo_Var_T<T>::inout (void) +{ + return this->ptr_; +} + +template <typename T> +ACE_INLINE +T *& +TAO_Pseudo_Var_T<T>::out (void) +{ + CORBA::release (this->ptr_); + this->ptr_ = T::_nil (); + return this->ptr_; +} + +template <typename T> +ACE_INLINE +T * +TAO_Pseudo_Var_T<T>::_retn (void) +{ + T * val = this->ptr_; + this->ptr_ = T::_nil (); + return val; +} + +template <typename T> +ACE_INLINE +T * +TAO_Pseudo_Var_T<T>::ptr (void) const +{ + return this->ptr_; +} + +// ************************************************************* + +template <typename T, typename T_var> +ACE_INLINE +TAO_Pseudo_Out_T<T,T_var>::TAO_Pseudo_Out_T (T *& p) + : ptr_ (p) +{ + this->ptr_ = T::_nil (); +} + +template <typename T, typename T_var> +ACE_INLINE +TAO_Pseudo_Out_T<T,T_var>::TAO_Pseudo_Out_T (T_var & p) + : ptr_ (p.out ()) +{ + CORBA::release (this->ptr_); + this->ptr_ = T::_nil (); +} + +template <typename T, typename T_var> +ACE_INLINE +TAO_Pseudo_Out_T<T,T_var>::TAO_Pseudo_Out_T ( + const TAO_Pseudo_Out_T<T,T_var> & p + ) + : ptr_ (p.ptr_) +{} + +template <typename T, typename T_var> +ACE_INLINE +TAO_Pseudo_Out_T<T,T_var> & +TAO_Pseudo_Out_T<T,T_var>::operator= (const TAO_Pseudo_Out_T<T,T_var> & p) +{ + this->ptr_ = p.ptr_; + return *this; +} + +template <typename T, typename T_var> +ACE_INLINE +TAO_Pseudo_Out_T<T,T_var> & +TAO_Pseudo_Out_T<T,T_var>::operator= (T * p) +{ + this->ptr_ = p; + return *this; +} + +template <typename T, typename T_var> +ACE_INLINE +TAO_Pseudo_Out_T<T,T_var>::operator T *& () +{ + return this->ptr_; +} + +template <typename T, typename T_var> +ACE_INLINE +T *& +TAO_Pseudo_Out_T<T,T_var>::ptr (void) +{ + return this->ptr_; +} + +template <typename T, typename T_var> +ACE_INLINE +T * +TAO_Pseudo_Out_T<T,T_var>::operator-> (void) +{ + return this->ptr_; +} diff --git a/TAO/tao/Sequence.cpp b/TAO/tao/Sequence.cpp index 838485381f1..face7619d39 100644 --- a/TAO/tao/Sequence.cpp +++ b/TAO/tao/Sequence.cpp @@ -203,6 +203,17 @@ TAO_Unbounded_String_Sequence::freebuf (char* *buffer) delete [] buffer; } +void +TAO_Unbounded_String_Sequence::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + TAO_Unbounded_String_Sequence * tmp = + ACE_static_cast (TAO_Unbounded_String_Sequence *, + _tao_void_pointer); + delete tmp; +} + char** TAO_Unbounded_String_Sequence::get_buffer (CORBA::Boolean orphan) { @@ -493,6 +504,17 @@ TAO_Unbounded_WString_Sequence::freebuf (CORBA::WChar* *buffer) delete [] buffer; } +void +TAO_Unbounded_WString_Sequence::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + TAO_Unbounded_WString_Sequence * tmp = + ACE_static_cast (TAO_Unbounded_WString_Sequence *, + _tao_void_pointer); + delete tmp; +} + CORBA::WChar** TAO_Unbounded_WString_Sequence::get_buffer (CORBA::Boolean orphan) { @@ -541,11 +563,11 @@ TAO_Unbounded_WString_Sequence::get_buffer (void) const void TAO_Unbounded_WString_Sequence::_allocate_buffer (CORBA::ULong length) { - CORBA::WChar* *tmp = TAO_Unbounded_WString_Sequence::allocbuf (length); + CORBA::WChar ** tmp = TAO_Unbounded_WString_Sequence::allocbuf (length); if (this->buffer_ != 0) { - CORBA::WChar* *old = ACE_reinterpret_cast (CORBA::WChar **, + CORBA::WChar ** old = ACE_reinterpret_cast (CORBA::WChar **, this->buffer_); for (CORBA::ULong i = 0; i < this->length_; ++i) diff --git a/TAO/tao/Sequence.h b/TAO/tao/Sequence.h index fc30aa91375..b08f330293b 100644 --- a/TAO/tao/Sequence.h +++ b/TAO/tao/Sequence.h @@ -286,7 +286,7 @@ public: */ TAO_Unbounded_String_Sequence (CORBA::ULong maximum, CORBA::ULong length, - char* *data, + char ** data, CORBA::Boolean release = 0); /** @@ -325,7 +325,7 @@ public: * reallocation is performed. After reallocation, the release flag * is always set to TRUE. */ - TAO_Unbounded_String_Sequence &operator= ( + TAO_Unbounded_String_Sequence & operator= ( const TAO_Unbounded_String_Sequence & ); @@ -343,7 +343,7 @@ public: * reason cannot allocate the requested vector. Vectors allocated by * allocbuf should be freed using the freebuf function. */ - static char* *allocbuf (CORBA::ULong); + static char ** allocbuf (CORBA::ULong); /** * The freebuf function ensures that the destructor for each element @@ -354,9 +354,11 @@ public: */ static void freebuf (char **); + static void _tao_any_destructor (void *); + // = Fast buffer accessors. - char **get_buffer (CORBA::Boolean orphan = 0); - const char **get_buffer (void) const; + char ** get_buffer (CORBA::Boolean orphan = 0); + const char ** get_buffer (void) const; // Functions to create, destroy, and adjust the underlying buffer. virtual void _allocate_buffer (CORBA::ULong length); @@ -367,7 +369,7 @@ public: // Parameters work the same as in constructor of the same signature. void replace (CORBA::ULong maximum, CORBA::ULong length, - char* *data, + char ** data, CORBA::Boolean release = 0); }; @@ -432,7 +434,7 @@ public: */ TAO_Unbounded_WString_Sequence (CORBA::ULong maximum, CORBA::ULong length, - CORBA::WChar* *data, + CORBA::WChar ** data, CORBA::Boolean release = 0); /** @@ -446,7 +448,7 @@ public: * elements (items zero through length-1), and sets the release * flag to TRUE. */ - TAO_Unbounded_WString_Sequence (const TAO_Unbounded_WString_Sequence&); + TAO_Unbounded_WString_Sequence (const TAO_Unbounded_WString_Sequence &); /// The destructor releases all object reference members and frees /// all string members. @@ -471,7 +473,7 @@ public: * reallocation is performed. After reallocation, the release flag * is always set to TRUE. */ - TAO_Unbounded_WString_Sequence &operator= ( + TAO_Unbounded_WString_Sequence & operator= ( const TAO_Unbounded_WString_Sequence & ); @@ -489,7 +491,7 @@ public: * reason cannot allocate the requested vector. Vectors allocated by * allocbuf should be freed using the freebuf function. */ - static CORBA::WChar* *allocbuf (CORBA::ULong); + static CORBA::WChar ** allocbuf (CORBA::ULong); /** * The freebuf function ensures that the destructor for each element @@ -500,9 +502,11 @@ public: */ static void freebuf (CORBA::WChar **); + static void _tao_any_destructor (void *); + // = Fast buffer accessors. - CORBA::WChar **get_buffer (CORBA::Boolean orphan = 0); - const CORBA::WChar **get_buffer (void) const; + CORBA::WChar ** get_buffer (CORBA::Boolean orphan = 0); + const CORBA::WChar ** get_buffer (void) const; // Functions to create, destroy, and adjust the underlying buffer. virtual void _allocate_buffer (CORBA::ULong length); @@ -513,7 +517,7 @@ public: // Parameters work the same as in constructor of the same signature. void replace (CORBA::ULong maximum, CORBA::ULong length, - CORBA::WChar* *data, + CORBA::WChar ** data, CORBA::Boolean release = 0); }; diff --git a/TAO/tao/Sequence_T.cpp b/TAO/tao/Sequence_T.cpp index d38b2ff5b85..7369859a9b4 100644 --- a/TAO/tao/Sequence_T.cpp +++ b/TAO/tao/Sequence_T.cpp @@ -101,9 +101,9 @@ TAO_Unbounded_Sequence<T>::_tao_any_destructor ( void * _tao_void_pointer ) { - typedef TAO_Unbounded_Sequence<T> THIS_SEQ_TYPE; - THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, - _tao_void_pointer); + TAO_Unbounded_Sequence<T> * tmp = + ACE_static_cast (TAO_Unbounded_Sequence<T> *, + _tao_void_pointer); delete tmp; } @@ -320,8 +320,8 @@ TAO_Bounded_Sequence<T, MAX>::_tao_any_destructor ( ) { typedef TAO_Bounded_Sequence<T, MAX> THIS_SEQ_TYPE; - THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, - _tao_void_pointer); + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); delete tmp; } @@ -500,10 +500,10 @@ TAO_Object_Manager<T,T_var,T_life>::_retn (void) // class TAO_Pseudo_Object_Manager // ************************************************************* -template <typename T, typename T_var> +template <typename T, typename T_var> TAO_Pseudo_Object_Manager<T,T_var> & TAO_Pseudo_Object_Manager<T,T_var>::operator= ( - const TAO_Pseudo_Object_Manager<T,T_var> & hs + const TAO_Pseudo_Object_Manager<T,T_var> & rhs ) { if (this == &rhs) @@ -524,7 +524,7 @@ TAO_Pseudo_Object_Manager<T,T_var>::operator= ( return *this; } -template <typename T, typename T_var> +template <typename T, typename T_var> TAO_Pseudo_Object_Manager<T,T_var> & TAO_Pseudo_Object_Manager<T,T_var>::operator= (T * p) { @@ -547,7 +547,7 @@ TAO_Pseudo_Object_Manager<T,T_var>::operator= (T * p) template <typename T, typename T_var> TAO_Pseudo_Object_Manager<T,T_var> & -TAO_Pseudo_Object_Manager<T,T_var>::operator=(const T_var & p) +TAO_Pseudo_Object_Manager<T,T_var>::operator= (const T_var & p) { if (this->release_) { @@ -825,8 +825,8 @@ operator= (const TAO_Unbounded_Object_Sequence<T,T_var,T_life,T_cast> &rhs) if (this->release_) { - T **tmp = ACE_reinterpret_cast (T **, - this->buffer_); + T ** tmp = ACE_reinterpret_cast (T **, + this->buffer_); for (CORBA::ULong i = 0; i < this->length_; ++i) { @@ -921,8 +921,8 @@ TAO_Unbounded_Object_Sequence<T,T_var,T_life,T_cast>::_tao_any_destructor ( ) { typedef TAO_Unbounded_Object_Sequence<T,T_var,T_life,T_cast> THIS_SEQ_TYPE; - THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, - _tao_void_pointer); + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); delete tmp; } @@ -1197,8 +1197,8 @@ TAO_Bounded_Object_Sequence<T,T_var,T_life,T_cast,MAX>::_tao_any_destructor ( ) { typedef TAO_Bounded_Object_Sequence<T,T_var,T_life,T_cast,MAX> THIS_SEQ_TYPE; - THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, - _tao_void_pointer); + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); delete tmp; } @@ -1297,10 +1297,10 @@ TAO_Bounded_Object_Sequence<T,T_var,T_life,T_cast,MAX>::_upcast ( // Operations for class TAO_Unbounded_Pseudo_Sequence // ************************************************************* -// Constructor for unbounded sequence. template <typename T, typename T_var> -TAO_Unbounded_Pseudo_Sequence<T,T_var>:: -TAO_Unbounded_Pseudo_Sequence (CORBA::ULong maximum) +TAO_Unbounded_Pseudo_Sequence<T,T_var>::TAO_Unbounded_Pseudo_Sequence ( + CORBA::ULong maximum + ) : TAO_Unbounded_Base_Sequence ( maximum, TAO_Unbounded_Pseudo_Sequence<T,T_var>::allocbuf (maximum) @@ -1336,17 +1336,17 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::TAO_Unbounded_Pseudo_Sequence ( } } -template<typename T, typename T_var> +template <typename T, typename T_var> TAO_Unbounded_Pseudo_Sequence<T,T_var>::~TAO_Unbounded_Pseudo_Sequence (void) { this->_deallocate_buffer (); } -// assignment operator -template <typename T, typename T_var> +template <typename T, typename T_var> TAO_Unbounded_Pseudo_Sequence<T,T_var> & -TAO_Unbounded_Pseudo_Sequence<T,T_var>:: -operator= (const TAO_Unbounded_Pseudo_Sequence<T,T_var> &rhs) +TAO_Unbounded_Pseudo_Sequence<T,T_var>::operator= ( + const TAO_Unbounded_Pseudo_Sequence<T,T_var> & rhs + ) { if (this == &rhs) { @@ -1355,8 +1355,8 @@ operator= (const TAO_Unbounded_Pseudo_Sequence<T,T_var> &rhs) if (this->release_) { - T **tmp = ACE_reinterpret_cast (T **, - this->buffer_); + T ** tmp = ACE_reinterpret_cast (T **, + this->buffer_); for (CORBA::ULong i = 0; i < this->length_; ++i) { @@ -1399,7 +1399,7 @@ operator= (const TAO_Unbounded_Pseudo_Sequence<T,T_var> &rhs) return *this; } -template <typename T, typename T_var> +template <typename T, typename T_var> T ** TAO_Unbounded_Pseudo_Sequence<T,T_var>::allocbuf (CORBA::ULong nelems) { @@ -1416,7 +1416,7 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::allocbuf (CORBA::ULong nelems) return buf; } -template <typename T, typename T_var> +template <typename T, typename T_var> void TAO_Unbounded_Pseudo_Sequence<T,T_var>::freebuf (T ** buffer) { @@ -1442,6 +1442,18 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::freebuf (T ** buffer) template<typename T, typename T_var> void +TAO_Unbounded_Pseudo_Sequence<T,T_var>::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + typedef TAO_Unbounded_Pseudo_Sequence<T,T_var> THIS_SEQ_TYPE; + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); + delete tmp; +} + +template <typename T, typename T_var> +void TAO_Unbounded_Pseudo_Sequence<T,T_var>::_allocate_buffer (CORBA::ULong length) { T ** tmp = TAO_Unbounded_Pseudo_Sequence<T,T_var>::allocbuf (length); @@ -1475,7 +1487,8 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::_allocate_buffer (CORBA::ULong length) this->buffer_ = tmp; } -template<typename T, typename T_var> void +template <typename T, typename T_var> +void TAO_Unbounded_Pseudo_Sequence<T,T_var>::_deallocate_buffer (void) { if (this->buffer_ == 0 || this->release_ == 0) @@ -1496,9 +1509,10 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::_deallocate_buffer (void) this->buffer_ = 0; } -template<typename T, typename T_var> void +template <typename T, typename T_var> +void TAO_Unbounded_Pseudo_Sequence<T,T_var>::_shrink_buffer (CORBA::ULong nl, - CORBA::ULong ol) + CORBA::ULong ol) { T ** tmp = ACE_static_cast (T **, this->buffer_); @@ -1514,18 +1528,17 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::_shrink_buffer (CORBA::ULong nl, // ************************************************************* template <typename T, typename T_var, size_t MAX> -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>:: -TAO_Bounded_Pseudo_Sequence (void) +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::TAO_Bounded_Pseudo_Sequence (void) : TAO_Bounded_Base_Sequence ( MAX, - TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::allocbuf (MAX) + TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::allocbuf (MAX) ) { } template <typename T, typename T_var, size_t MAX> -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::TAO_Bounded_Pseudo_Sequence ( - const TAO_Bounded_Pseudo_Sequence<T, T_var,MAX> & rhs +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::TAO_Bounded_Pseudo_Sequence ( + const TAO_Bounded_Pseudo_Sequence<T,T_var,MAX> & rhs ) : TAO_Bounded_Base_Sequence (rhs) { @@ -1550,9 +1563,9 @@ TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::TAO_Bounded_Pseudo_Sequence ( } } -template <typename T, typename T_var, size_t MAX> -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX> & -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::operator= ( +template <typename T, typename T_var, size_t MAX> +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX> & +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::operator= ( const TAO_Bounded_Pseudo_Sequence<T,T_var,MAX> & rhs ) { @@ -1602,9 +1615,9 @@ TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::operator= ( return *this; } -template <typename T, typename T_var, size_t MAX> +template <typename T, typename T_var, size_t MAX> T ** -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::allocbuf (CORBA::ULong) +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::allocbuf (CORBA::ULong) { T ** buf = 0; ACE_NEW_RETURN (buf, @@ -1619,9 +1632,9 @@ TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::allocbuf (CORBA::ULong) return buf; } -template <typename T, typename T_var, size_t MAX> +template <typename T, typename T_var, size_t MAX> void -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::freebuf (T ** buffer) +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::freebuf (T ** buffer) { // How much do we deallocate? Easy! allocbuf() always creates MAX // elements and initialize them to T::_nil(). So we can be @@ -1638,20 +1651,33 @@ TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::freebuf (T ** buffer) delete [] buffer; } -template<typename T, typename T_var, size_t MAX> void -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::_allocate_buffer ( +template<typename T, typename T_var, size_t MAX> +void +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + typedef TAO_Bounded_Pseudo_Sequence<T,T_var,MAX> THIS_SEQ_TYPE; + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); + delete tmp; +} + +template <typename T, typename T_var, size_t MAX> +void +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::_allocate_buffer ( CORBA::ULong length ) { // For this class memory is never reallocated so the implementation // is *really* simple. this->buffer_ = - TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::allocbuf (length); + TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::allocbuf (length); } -template<typename T, typename T_var, size_t MAX> +template <typename T, typename T_var, size_t MAX> void -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::_deallocate_buffer (void) +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::_deallocate_buffer (void) { if (this->release_ == 0) { @@ -1660,13 +1686,13 @@ TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::_deallocate_buffer (void) T ** tmp = ACE_reinterpret_cast (T **, this->buffer_); - TAO_Bounded_Pseudo_Sequence<T, T_var, MAX>::freebuf (tmp); + TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::freebuf (tmp); this->buffer_ = 0; } -template<typename T, typename T_var, size_t MAX> +template <typename T, typename T_var, size_t MAX> void -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::_shrink_buffer (CORBA::ULong nl, +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::_shrink_buffer (CORBA::ULong nl, CORBA::ULong ol) { T ** tmp = ACE_reinterpret_cast (T **, @@ -1841,8 +1867,8 @@ TAO_Unbounded_Valuetype_Sequence<T,T_var,T_life>::_tao_any_destructor ( ) { typedef TAO_Unbounded_Valuetype_Sequence<T,T_var,T_life> THIS_SEQ_TYPE; - THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, - _tao_void_pointer); + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); delete tmp; } @@ -2065,8 +2091,8 @@ TAO_Bounded_Valuetype_Sequence<T,T_var,T_life,MAX>::_tao_any_destructor ( ) { typedef TAO_Bounded_Valuetype_Sequence<T,T_var,T_life,MAX> THIS_SEQ_TYPE; - THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, - _tao_void_pointer); + THIS_SEQ_TYPE * tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); delete tmp; } @@ -2753,9 +2779,9 @@ TAO_Unbounded_Array_Sequence<T,T_life>::_deallocate_buffer (void) } #if defined (__SUNPRO_CC) && (__SUNPRO_CC < 0x500) - T *tmp = (T *) this->buffer_; + T * tmp = (T *) this->buffer_; #else /* (__SUNPRO_CC) && (__SUNPRO_CC < 0x500) */ - T *tmp = ACE_reinterpret_cast (T *, + T * tmp = ACE_reinterpret_cast (T *, this->buffer_); #endif /* (__SUNPRO_CC) && (__SUNPRO_CC < 0x500) */ @@ -3157,6 +3183,18 @@ TAO_Bounded_String_Sequence<MAX>::freebuf (char ** buffer) template<size_t MAX> void +TAO_Bounded_String_Sequence<MAX>::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + TAO_Bounded_String_Sequence<MAX> * tmp = + ACE_static_cast (TAO_Bounded_String_Sequence<MAX> *, + _tao_void_pointer); + delete tmp; +} + +template<size_t MAX> +void TAO_Bounded_String_Sequence<MAX>::_allocate_buffer (CORBA::ULong /* length */) { // For this class memory is never reallocated so the implementation @@ -3355,6 +3393,18 @@ TAO_Bounded_WString_Sequence<MAX>::freebuf (CORBA::WChar* *buffer) template<size_t MAX> void +TAO_Bounded_WString_Sequence<MAX>::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + TAO_Bounded_WString_Sequence<MAX> * tmp = + ACE_static_cast (TAO_Bounded_WString_Sequence<MAX> *, + _tao_void_pointer); + delete tmp; +} + +template<size_t MAX> +void TAO_Bounded_WString_Sequence<MAX>::_allocate_buffer ( CORBA::ULong /* length */ ) diff --git a/TAO/tao/Sequence_T.h b/TAO/tao/Sequence_T.h index 91f9825e0d7..f338f4df313 100644 --- a/TAO/tao/Sequence_T.h +++ b/TAO/tao/Sequence_T.h @@ -920,6 +920,9 @@ public: /// Release all the elements. static void freebuf (T **); + static void _tao_any_destructor (void *); + typedef T_var _var_type; + // The Base_Sequence functions, please see "tao/Sequence.h" virtual void _allocate_buffer (CORBA::ULong length); virtual void _deallocate_buffer (void); @@ -973,6 +976,9 @@ public: /// it. static void freebuf (T ** buffer); + static void _tao_any_destructor (void *); + typedef T_var _var_type; + // The Base_Sequence functions, please see "tao/sequence.h" virtual void _allocate_buffer (CORBA::ULong length); virtual void _deallocate_buffer (void); @@ -1384,7 +1390,7 @@ public: const T &operator[] (CORBA::ULong) const; /// Allocate storage for a sequence.. - static T *allocbuf (CORBA::ULong length); + static T * allocbuf (CORBA::ULong length); /// Free a buffer allocated by allocbuf() and release each element on /// it. @@ -1422,7 +1428,7 @@ public: * references), and then freeing the returned buffer itself using * <freebuf>. */ - T *get_buffer (CORBA::Boolean orphan = 0); + T * get_buffer (CORBA::Boolean orphan = 0); /** * This function allows read-only access to the sequence buffer. @@ -1430,7 +1436,7 @@ public: * yet been allocated. No direct modification of the returned * buffer by the caller is permitted. */ - const T *get_buffer (void) const; + const T * get_buffer (void) const; /** * Allows the buffer underlying a sequence to be replaced. The @@ -1541,6 +1547,8 @@ public: */ static void freebuf (char ** buffer); + static void _tao_any_destructor (void *); + // Functions to create, destroy, and adjust the underlying buffer. virtual void _allocate_buffer (CORBA::ULong length); virtual void _deallocate_buffer (void); @@ -1651,6 +1659,8 @@ public: */ static void freebuf (CORBA::WChar ** buffer); + static void _tao_any_destructor (void *); + // Functions to create, destroy, and adjust the underlying buffer. virtual void _allocate_buffer (CORBA::ULong length); virtual void _deallocate_buffer (void); diff --git a/TAO/tao/Sequence_T.i b/TAO/tao/Sequence_T.i index 8a0f5a2573c..f9719391cab 100644 --- a/TAO/tao/Sequence_T.i +++ b/TAO/tao/Sequence_T.i @@ -193,34 +193,37 @@ TAO_Object_Manager<T,T_var,T_life>::inout (void) } // ************************************************************* -// Inline operations for class TAO_Pseudo_Object_Manager<T> +// Inline operations for class TAO_Pseudo_Object_Manager<T,T_var> // ************************************************************* -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE TAO_Pseudo_Object_Manager<T,T_var>::~TAO_Pseudo_Object_Manager (void) { } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE -TAO_Pseudo_Object_Manager<T,T_var>:: - TAO_Pseudo_Object_Manager (const TAO_Pseudo_Object_Manager<T,T_var> & rhs) +TAO_Pseudo_Object_Manager<T,T_var>::TAO_Pseudo_Object_Manager ( + const TAO_Pseudo_Object_Manager<T,T_var> & rhs + ) : ptr_ (rhs.ptr_), release_ (rhs.release_) { } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE -TAO_Pseudo_Object_Manager<T,T_var>:: - TAO_Pseudo_Object_Manager(T ** buffer, CORBA::Boolean release) +TAO_Pseudo_Object_Manager<T,T_var>::TAO_Pseudo_Object_Manager( + T ** buffer, + CORBA::Boolean release + ) : ptr_ (buffer), release_ (release) { } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE T * TAO_Pseudo_Object_Manager<T,T_var>::operator-> (void) const @@ -228,21 +231,21 @@ TAO_Pseudo_Object_Manager<T,T_var>::operator-> (void) const return *this->ptr_; } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE TAO_Pseudo_Object_Manager<T,T_var>::operator const T * () const { return *this->ptr_; } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE TAO_Pseudo_Object_Manager<T,T_var>::operator T *& () { return *this->ptr_; } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE T * TAO_Pseudo_Object_Manager<T,T_var>::in (void) const @@ -250,7 +253,7 @@ TAO_Pseudo_Object_Manager<T,T_var>::in (void) const return *this->ptr_; } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE T *& TAO_Pseudo_Object_Manager<T,T_var>::inout (void) @@ -258,7 +261,7 @@ TAO_Pseudo_Object_Manager<T,T_var>::inout (void) return *this->ptr_; } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE T *& TAO_Pseudo_Object_Manager<T,T_var>::out (void) @@ -268,7 +271,7 @@ TAO_Pseudo_Object_Manager<T,T_var>::out (void) return *this->ptr_; } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE T * TAO_Pseudo_Object_Manager<T,T_var>::_retn (void) @@ -542,24 +545,25 @@ TAO_Bounded_Object_Sequence<T, T_var,T_life,T_cast,MAX>::operator[] ( // class TAO_Unbounded_Pseudo_Sequence // ************************************************************* -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE TAO_Unbounded_Pseudo_Sequence<T,T_var>::TAO_Unbounded_Pseudo_Sequence (void) { } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE -TAO_Unbounded_Pseudo_Sequence<T,T_var>:: -TAO_Unbounded_Pseudo_Sequence (CORBA::ULong maximum, - CORBA::ULong length, - T ** value, - CORBA::Boolean release) +TAO_Unbounded_Pseudo_Sequence<T,T_var>::TAO_Unbounded_Pseudo_Sequence ( + CORBA::ULong maximum, + CORBA::ULong length, + T ** value, + CORBA::Boolean release + ) : TAO_Unbounded_Base_Sequence (maximum, length, value, release) { } -template <typename T, typename T_var> +template <typename T, typename T_var> ACE_INLINE TAO_Pseudo_Object_Manager<T,T_var> TAO_Unbounded_Pseudo_Sequence<T,T_var>::operator[] (CORBA::ULong slot) const @@ -573,7 +577,7 @@ TAO_Unbounded_Pseudo_Sequence<T,T_var>::operator[] (CORBA::ULong slot) const // class TAO_Bounded_Pseudo_Sequence // ************************************************************* -template<typename T, typename T_var, size_t MAX> +template <typename T, typename T_var, size_t MAX> ACE_INLINE TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::~TAO_Bounded_Pseudo_Sequence (void) { @@ -593,7 +597,7 @@ TAO_Bounded_Pseudo_Sequence (CORBA::ULong length, template <typename T, typename T_var, size_t MAX> ACE_INLINE TAO_Pseudo_Object_Manager<T,T_var> -TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::operator[] ( +TAO_Bounded_Pseudo_Sequence<T,T_var,MAX>::operator[] ( CORBA::ULong slot ) const { @@ -601,7 +605,7 @@ TAO_Bounded_Pseudo_Sequence<T, T_var,MAX>::operator[] ( T ** const tmp = ACE_reinterpret_cast (T ** ACE_CAST_CONST, this->buffer_); return TAO_Pseudo_Object_Manager<T,T_var> (tmp + slot, - this->release_); + this->release_); } // ************************************************************* diff --git a/TAO/tao/TAO.dsp b/TAO/tao/TAO.dsp index e940bb48455..47133f5f916 100644 --- a/TAO/tao/TAO.dsp +++ b/TAO/tao/TAO.dsp @@ -1647,6 +1647,10 @@ SOURCE=.\Protocols_Hooks.h # End Source File
# Begin Source File
+SOURCE=.\Pseudo_VarOut_T.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Queued_Message.h
# End Source File
# Begin Source File
@@ -2331,6 +2335,10 @@ SOURCE=.\Profile.i # End Source File
# Begin Source File
+SOURCE=.\Pseudo_VarOut_T.inl
+# End Source File
+# Begin Source File
+
SOURCE=.\Queued_Message.inl
# End Source File
# Begin Source File
@@ -2495,6 +2503,11 @@ SOURCE=.\Objref_VarOut_T.cpp # End Source File
# Begin Source File
+SOURCE=.\Pseudo_VarOut_T.cpp
+# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
SOURCE=.\Seq_VarOut_T.cpp
# PROP Exclude_From_Build 1
# End Source File
diff --git a/TAO/tao/Typecode.h b/TAO/tao/Typecode.h index f6c320dde99..a5f36f82ac6 100644 --- a/TAO/tao/Typecode.h +++ b/TAO/tao/Typecode.h @@ -26,6 +26,7 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "tao/Exception.h" +#include "tao/Pseudo_VarOut_T.h" // Forward declarations class TAO_InputCDR; @@ -38,6 +39,11 @@ namespace TAO namespace CORBA { + class TypeCode; + + typedef TAO_Pseudo_Var_T<TypeCode> TypeCode_var; + typedef TAO_Pseudo_Out_T<TypeCode, TypeCode_var> TypeCode_out; + /** * @class TypeCode * @@ -527,64 +533,6 @@ namespace CORBA OFFSET_MAP *offset_map_; }; - - /** - * @class TypeCode_var - * - * @brief A smart pointer for TypeCodes. - * - * Implements the _var class for the TypeCode pseudo object. - */ - class TAO_Export TypeCode_var - { - public: - TypeCode_var (void); // default constructor - TypeCode_var (TypeCode_ptr); - TypeCode_var (const TypeCode_var &); // copy constructor - ~TypeCode_var (void); // destructor - - TypeCode_var &operator= (TypeCode_ptr); - TypeCode_var &operator= (const TypeCode_var &); - TypeCode_ptr operator-> (void) const; - - /// in, inout, out, _retn - operator const TypeCode_ptr &() const; - operator TypeCode_ptr &(); - TypeCode_ptr in (void) const; - TypeCode_ptr &inout (void); - TypeCode_ptr &out (void); - TypeCode_ptr _retn (void); - TypeCode_ptr ptr (void) const; - - private: - TypeCode_ptr ptr_; - }; - - /** - * @class TypeCode_out - * - * @brief The _out class for TypeCode. - * - * Implements the _out class for the TypeCode pseudo object. - */ - class TAO_Export TypeCode_out - { - public: - TypeCode_out (TypeCode_ptr &); - TypeCode_out (TypeCode_var &); - TypeCode_out (const TypeCode_out &); - TypeCode_out &operator= (const TypeCode_out &); - TypeCode_out &operator= (TypeCode_ptr); - operator TypeCode_ptr &(); - TypeCode_ptr &ptr (void); - TypeCode_ptr operator-> (void); - - private: - TypeCode_ptr &ptr_; - - /// Assignment from _var not allowed - TypeCode_out &operator= (const TypeCode_var &); - }; } // End CORBA namespace // -------------------------------------------------------------- diff --git a/TAO/tao/Typecode.i b/TAO/tao/Typecode.i index bb6d54cd737..aadb70e4855 100644 --- a/TAO/tao/Typecode.i +++ b/TAO/tao/Typecode.i @@ -127,153 +127,3 @@ CORBA::release (CORBA::TypeCode_ptr obj) obj->_decr_refcnt (); } -// **************************************************************** - -ACE_INLINE -CORBA::TypeCode_var::TypeCode_var (void) - : ptr_ (CORBA::TypeCode::_nil ()) -{} - -ACE_INLINE -CORBA::TypeCode_var::TypeCode_var (CORBA::TypeCode_ptr p) - : ptr_ (p) -{} - -ACE_INLINE CORBA::TypeCode_ptr -CORBA::TypeCode_var::ptr (void) const -{ - return this->ptr_; -} - -ACE_INLINE -CORBA::TypeCode_var::TypeCode_var (const CORBA::TypeCode_var &p) - : ptr_ (CORBA::TypeCode::_duplicate (p.ptr ())) -{} - -ACE_INLINE -CORBA::TypeCode_var::~TypeCode_var (void) -{ - CORBA::release (this->ptr_); -} - -ACE_INLINE CORBA::TypeCode_var & -CORBA::TypeCode_var::operator= (CORBA::TypeCode_ptr p) -{ - CORBA::release (this->ptr_); - this->ptr_ = p; - return *this; -} - -ACE_INLINE CORBA::TypeCode_var & -CORBA::TypeCode_var::operator= (const CORBA::TypeCode_var &p) -{ - if (this != &p) - { - CORBA::release (this->ptr_); - this->ptr_ = CORBA::TypeCode::_duplicate (p.ptr ()); - } - return *this; -} - -ACE_INLINE -CORBA::TypeCode_var::operator const CORBA::TypeCode_ptr &() const -{ - return this->ptr_; -} - -ACE_INLINE -CORBA::TypeCode_var::operator CORBA::TypeCode_ptr &() -{ - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr -CORBA::TypeCode_var::operator-> (void) const -{ - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr -CORBA::TypeCode_var::in (void) const -{ - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr & -CORBA::TypeCode_var::inout (void) -{ - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr & -CORBA::TypeCode_var::out (void) -{ - CORBA::release (this->ptr_); - this->ptr_ = CORBA::TypeCode::_nil (); - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr -CORBA::TypeCode_var::_retn (void) -{ - // yield ownership of managed obj reference - CORBA::TypeCode_ptr val = this->ptr_; - this->ptr_ = CORBA::TypeCode::_nil (); - return val; -} - -// ************************************************************* -// Inline operations for class CORBA::TypeCode_out -// ************************************************************* - -ACE_INLINE -CORBA::TypeCode_out::TypeCode_out (CORBA::TypeCode_ptr &p) - : ptr_ (p) -{ - this->ptr_ = CORBA::TypeCode::_nil (); -} - -ACE_INLINE -CORBA::TypeCode_out::TypeCode_out (CORBA::TypeCode_var &p) - : ptr_ (p.out ()) -{ - CORBA::release (this->ptr_); - this->ptr_ = CORBA::TypeCode::_nil (); -} - -ACE_INLINE -CORBA::TypeCode_out::TypeCode_out (const CORBA::TypeCode_out &p) - : ptr_ (p.ptr_) -{} - -ACE_INLINE CORBA::TypeCode_out & -CORBA::TypeCode_out::operator= (const CORBA::TypeCode_out &p) -{ - this->ptr_ = p.ptr_; - return *this; -} - -ACE_INLINE CORBA::TypeCode_out & -CORBA::TypeCode_out::operator= (CORBA::TypeCode_ptr p) -{ - this->ptr_ = p; - return *this; -} - -ACE_INLINE -CORBA::TypeCode_out::operator CORBA::TypeCode_ptr &() -{ - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr & -CORBA::TypeCode_out::ptr (void) -{ - return this->ptr_; -} - -ACE_INLINE CORBA::TypeCode_ptr -CORBA::TypeCode_out::operator-> (void) -{ - return this->ptr_; -} diff --git a/TAO/tao/ValueBase.cpp b/TAO/tao/ValueBase.cpp index 045a918d1c3..eb15f38a4a8 100644 --- a/TAO/tao/ValueBase.cpp +++ b/TAO/tao/ValueBase.cpp @@ -41,7 +41,7 @@ CORBA::ValueBase::_downcast (CORBA::ValueBase *vt) void CORBA::ValueBase::_tao_any_destructor (void *x) { - CORBA::ValueBase_ptr tmp = ACE_static_cast (CORBA::ValueBase *, x); + CORBA::ValueBase * tmp = ACE_static_cast (CORBA::ValueBase *, x); CORBA::remove_ref (tmp); } diff --git a/TAO/tao/ValueBase.h b/TAO/tao/ValueBase.h index fd45078bb8d..bd8e7015272 100644 --- a/TAO/tao/ValueBase.h +++ b/TAO/tao/ValueBase.h @@ -23,6 +23,7 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "tao/corbafwd.h" +#include "tao/Value_VarOut_T.h" #include "ace/Basic_Types.h" /* for ptr_arith_t */ #include "ace/Synch_T.h" @@ -35,7 +36,16 @@ namespace CORBA TAO_NAMESPACE_INLINE_FUNCTION void add_ref (ValueBase *); TAO_NAMESPACE_INLINE_FUNCTION void remove_ref (ValueBase *); - class ValueBase_var; + class ValueBase; + + struct TAO_Export tao_ValueBase_life + { + static void tao_add_ref (ValueBase *); + static void tao_remove_ref (ValueBase *); + }; + + typedef TAO_Value_Var_T<ValueBase, tao_ValueBase_life> ValueBase_var; + typedef TAO_Value_Out_T<ValueBase, tao_ValueBase_life> ValueBase_out; /** * @class ValueBase @@ -118,68 +128,6 @@ namespace CORBA }; // ValueBase /** - * @class ValueBase_var - * - * @brief _var class for ValueBase - */ - class TAO_Export ValueBase_var - { - public: - ValueBase_var (void); - ValueBase_var (CORBA::ValueBase *); - ValueBase_var (const ValueBase_var &); - ~ValueBase_var (void); - - ValueBase_var &operator= (CORBA::ValueBase *); - ValueBase_var &operator= (const ValueBase_var &); - CORBA::ValueBase *operator-> (void) const; - - operator const CORBA::ValueBase *() const; - operator CORBA::ValueBase *&(); - - /// in, inout, out, _retn - CORBA::ValueBase *in (void) const; - CORBA::ValueBase *&inout (void); - CORBA::ValueBase *&out (void); - CORBA::ValueBase *_retn (void); - CORBA::ValueBase *ptr (void) const; - - static CORBA::ValueBase * tao_duplicate (CORBA::ValueBase *); - static void tao_release (CORBA::ValueBase *); - static CORBA::ValueBase * tao_nil (void); - static CORBA::ValueBase * tao_narrow (CORBA::ValueBase * - ACE_ENV_ARG_DECL_NOT_USED); - static CORBA::ValueBase * tao_upcast (void *); - - private: - CORBA::ValueBase *ptr_; - }; - - /** - * @class ValueBase_out - * - * @brief _out class for CORBA::ValueBase - * - * _out class for CORBA::ValueBase - */ - class TAO_Export ValueBase_out - { - public: - ValueBase_out (CORBA::ValueBase *&); - ValueBase_out (ValueBase_var &); - ValueBase_out (const ValueBase_out &); - ValueBase_out &operator= (const ValueBase_out &); - ValueBase_out &operator= (const ValueBase_var &); - ValueBase_out &operator= (CORBA::ValueBase *); - operator CORBA::ValueBase *&(); - CORBA::ValueBase *&ptr (void); - CORBA::ValueBase *operator-> (void); - - private: - CORBA::ValueBase *&ptr_; - }; - - /** * @class DefaultValueRefCountBase * * @brief Default mix-in for reference count of a valuetype. diff --git a/TAO/tao/ValueBase.i b/TAO/tao/ValueBase.i index 5520bcc80bb..3cee57426b2 100644 --- a/TAO/tao/ValueBase.i +++ b/TAO/tao/ValueBase.i @@ -8,232 +8,45 @@ ACE_INLINE void CORBA::add_ref (CORBA::ValueBase *val) { if (val) - val->_add_ref (); + { + val->_add_ref (); + } } ACE_INLINE void CORBA::remove_ref (CORBA::ValueBase *val) { if (val) - val->_remove_ref (); -} - -// =========================================================== - -// constructor -ACE_INLINE -CORBA::ValueBase::ValueBase (void) -{ -} - -// ************************************************************* -// Inline operations for class CORBA::ValueBase_var -// ************************************************************* - -ACE_INLINE -CORBA::ValueBase_var::ValueBase_var (void) - : ptr_ (0) -{ -} - -ACE_INLINE -CORBA::ValueBase_var::ValueBase_var (CORBA::ValueBase *p) - : ptr_ (p) -{ -} - -ACE_INLINE -CORBA::ValueBase_var::~ValueBase_var (void) -{ - CORBA::remove_ref (this->ptr_); -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::ptr (void) const -{ - return this->ptr_; -} - -ACE_INLINE -CORBA::ValueBase_var::ValueBase_var (const CORBA::ValueBase_var &p) - : ptr_ (p.ptr_) -{ - p.ptr_->_add_ref (); -} - -ACE_INLINE CORBA::ValueBase_var & -CORBA::ValueBase_var::operator= (CORBA::ValueBase *p) -{ - CORBA::remove_ref (this->ptr_); - this->ptr_ = p; - return *this; -} - -ACE_INLINE CORBA::ValueBase_var & -CORBA::ValueBase_var::operator= (const CORBA::ValueBase_var &p) -{ - if (this != &p) { - CORBA::remove_ref (this->ptr_); - p.ptr_->_add_ref (); - this->ptr_ = p.ptr_; + val->_remove_ref (); } - - return *this; -} - -ACE_INLINE -CORBA::ValueBase_var::operator const CORBA::ValueBase *() const // cast -{ - return this->ptr_; -} - -ACE_INLINE -CORBA::ValueBase_var::operator CORBA::ValueBase *&() // cast -{ - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::operator-> (void) const -{ - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::in (void) const -{ - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase *& -CORBA::ValueBase_var::inout (void) -{ - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase *& -CORBA::ValueBase_var::out (void) -{ - CORBA::remove_ref (this->ptr_); - this->ptr_ = 0; - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::_retn (void) -{ - // Yield ownership of valuebase. - CORBA::ValueBase *val = this->ptr_; - this->ptr_ = 0; - return val; -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::tao_duplicate (CORBA::ValueBase *p) -{ - p->_add_ref (); - return p; -} - -ACE_INLINE void -CORBA::ValueBase_var::tao_release (CORBA::ValueBase *p) -{ - p->_remove_ref (); -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::tao_nil (void) -{ - return 0; -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::tao_narrow ( - CORBA::ValueBase *p - ACE_ENV_ARG_DECL_NOT_USED - ) -{ - p->_add_ref (); - return CORBA::ValueBase::_downcast (p); } -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_var::tao_upcast (void *src) -{ - CORBA::ValueBase **tmp = - ACE_static_cast (CORBA::ValueBase **, src); - return *tmp; -} - -// ************************************************************* -// Inline operations for class CORBA::ValueBase_out -// ************************************************************* - -ACE_INLINE -CORBA::ValueBase_out::ValueBase_out (CORBA::ValueBase *&p) - : ptr_ (p) -{ - this->ptr_ = 0; -} +// =========================================================== ACE_INLINE -CORBA::ValueBase_out::ValueBase_out (CORBA::ValueBase_var &p) - : ptr_ (p.out ()) +void +CORBA::tao_ValueBase_life::tao_add_ref (CORBA::ValueBase *p) { - this->ptr_->_remove_ref (); - this->ptr_ = 0; + CORBA::add_ref (p); } ACE_INLINE -CORBA::ValueBase_out::ValueBase_out (const CORBA::ValueBase_out &p) - : ptr_ (p.ptr_) -{ -} - -ACE_INLINE CORBA::ValueBase_out & -CORBA::ValueBase_out::operator= (const CORBA::ValueBase_out &p) -{ - this->ptr_ = p.ptr_; - return *this; -} - -ACE_INLINE CORBA::ValueBase_out & -CORBA::ValueBase_out::operator= (const CORBA::ValueBase_var &p) +void +CORBA::tao_ValueBase_life::tao_remove_ref (CORBA::ValueBase *p) { - p.ptr ()->_add_ref (); - this->ptr_ = p.ptr (); - return *this; + CORBA::remove_ref (p); } -ACE_INLINE CORBA::ValueBase_out & -CORBA::ValueBase_out::operator= (CORBA::ValueBase *p) -{ - this->ptr_ = p; - return *this; -} +// =========================================================== ACE_INLINE -CORBA::ValueBase_out::operator CORBA::ValueBase *&() // cast -{ - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase *& -CORBA::ValueBase_out::ptr (void) // ptr -{ - return this->ptr_; -} - -ACE_INLINE CORBA::ValueBase * -CORBA::ValueBase_out::operator-> (void) +CORBA::ValueBase::ValueBase (void) { - return this->ptr_; } // =========================================================== -// constructor ACE_INLINE CORBA::DefaultValueRefCountBase::DefaultValueRefCountBase (void) : _tao_reference_count_ (1) diff --git a/TAO/tao/Value_VarOut_T.h b/TAO/tao/Value_VarOut_T.h index 0b0cef9479b..67ac420ddf0 100644 --- a/TAO/tao/Value_VarOut_T.h +++ b/TAO/tao/Value_VarOut_T.h @@ -88,6 +88,10 @@ private: T *& ptr_; }; +#if defined (__ACE_INLINE__) +#include "tao/Value_VarOut_T.inl" +#endif /* __ACE_INLINE__ */ + #if defined (ACE_TEMPLATES_REQUIRE_SOURCE) #include "tao/Value_VarOut_T.cpp" #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ diff --git a/TAO/tao/Value_VarOut_T.inl b/TAO/tao/Value_VarOut_T.inl new file mode 100644 index 00000000000..74e88caa0c5 --- /dev/null +++ b/TAO/tao/Value_VarOut_T.inl @@ -0,0 +1,2 @@ +// $Id$ + diff --git a/TAO/tao/corba.h b/TAO/tao/corba.h index 3e2216f4d1c..a6447f8f294 100644 --- a/TAO/tao/corba.h +++ b/TAO/tao/corba.h @@ -68,8 +68,10 @@ #include "tao/Object_KeyC.h" #include "tao/ObjectIdListC.h" +// Template _var and _out classes. #include "tao/Objref_VarOut_T.h" #include "tao/Value_VarOut_T.h" +#include "tao/Pseudo_VarOut_T.h" #include "tao/Seq_VarOut_T.h" #include "tao/Array_VarOut_T.h" #include "tao/VarOut_T.h" diff --git a/TAO/tao/corbafwd.h b/TAO/tao/corbafwd.h index e6333da1bfc..e8a0b73440d 100644 --- a/TAO/tao/corbafwd.h +++ b/TAO/tao/corbafwd.h @@ -150,8 +150,6 @@ namespace CORBA // CORBA::TypeCode typedefs. class TypeCode; typedef TypeCode * TypeCode_ptr; - class TypeCode_var; - class TypeCode_out; /** * @name CORBA String Memory Management @@ -242,8 +240,6 @@ namespace CORBA class Object; typedef Object *Object_ptr; - class Object_var; - class Object_out; class LocalObject; typedef LocalObject *LocalObject_ptr; @@ -281,9 +277,6 @@ namespace CORBA class TypeCodeFactory_var; class ValueBase; - typedef ValueBase *ValueBase_ptr; - class ValueBase_var; - class ValueBase_out; class ValueFactoryBase; class ValueFactoryBase_var; typedef ValueFactoryBase *ValueFactory; |