diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-02-24 22:53:00 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-02-24 22:53:00 +0000 |
commit | 179b3826c39581a1a63ffb78f4d7b193fc7668bd (patch) | |
tree | bc3b6155e5bc3eab0f10ee008b2130c13d4b95c8 | |
parent | de0d5fd911765f113a354f3004c82ddec0332165 (diff) | |
download | ATCD-179b3826c39581a1a63ffb78f4d7b193fc7668bd.tar.gz |
ChangeLogTag: Mon Feb 24 16:49:34 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog | 14 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp | 247 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.h | 109 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/tmplinst.cpp | 81 |
4 files changed, 429 insertions, 22 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index fc69990fd88..48e2792c975 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,17 @@ +Mon Feb 24 16:49:34 2003 Jeff Parsons <j.parsons@vanderbilt.edu> + + * orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.cpp: + * orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h: + + New files for template classes containing utility methods + used by several IFR implementation classes. + + * orbsvcs/orbsvcs/IFRService/tmplinst.cpp: + + Added additional explicit template instantiations corresponding + to actual uses of the template classes in the above files. + + Mon Feb 24 000:27:32 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * orbsvcs/orbsvcs/IFRService/ComponentDef_i.cpp: diff --git a/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp new file mode 100644 index 00000000000..b4b7cf3d54f --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp @@ -0,0 +1,247 @@ +// $Id$ + +#ifndef TAO_IFR_SERVICE_UTILS_T_CPP +#define TAO_IFR_SERVICE_UTILS_T_CPP + +#include "IFR_Service_Utils_T.h" + +ACE_RCSID (IFRService, + IFR_Service_Utils_T, + "$Id$") + +template<typename T> +void +TAO_IFR_Generic_Utils<T>::destroy_special (const char *section_name, + TAO_Repository_i *repo, + ACE_Configuration_Section_Key &key + ACE_ENV_ARG_DECL) +{ + ACE_Configuration_Section_Key sub_key; + int status = + repo->config ()->open_section (key, + section_name, + 0, + sub_key); + + if (status != 0) + { + /// Nothing to destroy. + return; + } + + CORBA::ULong count = 0; + repo->config ()->get_integer_value (sub_key, + "count", + count); + + char *stringified = 0; + ACE_Configuration_Section_Key special_key; + ACE_TString holder; + + for (CORBA::ULong i = 0; i < count; ++i) + { + stringified = TAO_IFR_Service_Utils::int_to_string (i); + repo->config ()->open_section (sub_key, + stringified, + 0, + special_key); + T impl (repo); + impl.section_key (special_key); + impl.destroy_i (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } +} + +template<typename T_strseq> +void +TAO_IFR_Strseq_Utils<T_strseq> ::fill_string_seq ( + const char *section_name, + ACE_Configuration *config, + ACE_Configuration_Section_Key &key, + T_strseq &seq + ) +{ + ACE_Configuration_Section_Key section_key; + int status = config->open_section (key, + section_name, + 0, + section_key); + + if (status != 0) + { + seq.length (0); + return; + } + + CORBA::ULong count = 0; + config->get_integer_value (section_key, + "count", + count); + seq.length (count); + char *stringified = 0; + ACE_TString holder; + + for (CORBA::ULong i = 0; i < count; ++i) + { + stringified = TAO_IFR_Service_Utils::int_to_string (i); + config->get_string_value (section_key, + stringified, + holder); + seq[i] = holder.fast_rep (); + } +} + +template<typename T_desc_seq> +void +TAO_Port_Desc_Seq_Utils<T_desc_seq>::port_descriptions ( + T_desc_seq &desc_seq, + ACE_Configuration *config, + ACE_Configuration_Section_Key &key, + const char *sub_section + ) +{ + ACE_Configuration_Section_Key sub_key; + int status = config->open_section (key, + sub_section, + 0, + sub_key); + + if (status != 0) + { + desc_seq.length (0); + return; + } + + CORBA::ULong count = 0; + config->get_integer_value (sub_key, + "count", + count); + desc_seq.length (count); + ACE_Configuration_Section_Key desc_key; + char *stringified = 0; + ACE_TString holder; + + for (CORBA::ULong i = 0; i < count; ++i) + { + stringified = TAO_IFR_Service_Utils::int_to_string (i); + config->open_section (sub_key, + stringified, + 0, + desc_key); + + config->get_string_value (desc_key, + "name", + holder); + desc_seq[i].name = holder.c_str (); + + config->get_string_value (desc_key, + "id", + holder); + desc_seq[i].id = holder.c_str (); + + /// Seems to me that this field should refer to the component + /// where the port is defined - NOT where the base type is defined. + config->get_string_value (key, + "id", + holder); + desc_seq[i].defined_in = holder.c_str (); + + config->get_string_value (desc_key, + "version", + holder); + desc_seq[i].version = holder.c_str (); + + config->get_string_value (key, + "base_type", + holder); + TAO_Port_Desc_Seq_Utils<T_desc_seq>::port_base_type (desc_seq, + holder, + i); + + TAO_Port_Desc_Seq_Utils<T_desc_seq>::get_is_multiple (desc_seq, + config, + key, + i); + } +} + +template<typename T_desc_seq> +void +TAO_Port_Desc_Seq_Utils<T_desc_seq>::get_is_multiple ( + T_desc_seq &, + ACE_Configuration *, + ACE_Configuration_Section_Key &, + CORBA::ULong + ) +{ + // All types except UsesDescription have no is_multiple member. +} + +template<typename T_desc_seq> +void +TAO_Port_Desc_Seq_Utils<T_desc_seq>::port_base_type (T_desc_seq &desc_seq, + ACE_TString &holder, + CORBA::ULong index) +{ + desc_seq[index].interface_type = holder.fast_rep (); +} + +template<typename T> +T * +TAO_Port_Utils<T>::create_entry (const char *id, + const char *name, + const char *version, + const char *sub_section, + CORBA::Container_ptr port_base_type, + CORBA::Boolean is_multiple, + TAO_Repository_i *repo, + CORBA::DefinitionKind port_kind, + ACE_Configuration_Section_Key &key + ACE_ENV_ARG_DECL) +{ + TAO_Container_i::tmp_name_holder (name); + ACE_Configuration_Section_Key new_key; + ACE_TString path = + TAO_IFR_Service_Utils::create_common (CORBA::dk_Component, + port_kind, + key, + new_key, + repo, + id, + name, + &TAO_Container_i::same_as_tmp_name, + version, + sub_section + ACE_ENV_ARG_DECL); + + repo->config ()->set_string_value ( + new_key, + "base_type", + port_base_type->_interface_repository_id () + ); + + TAO_Port_Utils<T>::set_is_multiple (is_multiple, + repo->config (), + new_key); + + CORBA::Object_var obj = + TAO_IFR_Service_Utils::path_to_ir_object (path, + repo + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (CORBA::ComponentIR::ProvidesDef::_nil ()); + + return T::_narrow (obj.in () + ACE_ENV_ARG_PARAMETER); +} + +template<typename T> +void +TAO_Port_Utils<T>::set_is_multiple (CORBA::Boolean, + ACE_Configuration *, + ACE_Configuration_Section_Key &) +{ + /// Do nothing for eveything except UsesDef. +} + +#endif /* TAO_IFR_SERVICE_UTILS_T_CPP */ + diff --git a/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.h b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.h new file mode 100644 index 00000000000..67b9811150b --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.h @@ -0,0 +1,109 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/orbsvcs/orbsvcs/IFRService +// +// = FILENAME +// IFR_Service_Utils_T.h +// +// = DESCRIPTION +// Template methods useful to IFR Service . +// +// = AUTHORS +// Jeff Parsons <j.parsons@vanderbiltl.edu> +// +// ============================================================================ + +#ifndef TAO_IFR_SERVICE_UTILS_T_H +#define TAO_IFR_SERVICE_UTILS_T_H +#include "ace/pre.h" + +#include "ace/Configuration.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/IFR_Client/IFR_ComponentsC.h" + +#if defined(_MSC_VER) +#if (_MSC_VER >= 1200) +#pragma warning(push) +#endif /* _MSC_VER >= 1200 */ +#pragma warning(disable:4250) +#endif /* _MSC_VER */ + +class TAO_Repository_i; + +template<typename T> +class TAO_IFR_Generic_Utils +{ +public: + static void destroy_special (const char *section_name, + TAO_Repository_i *repo, + ACE_Configuration_Section_Key &key + ACE_ENV_ARG_DECL); +}; + +template<typename T_strseq> +class TAO_IFR_Strseq_Utils +{ +public: + static void fill_string_seq (const char *section_name, + ACE_Configuration *config, + ACE_Configuration_Section_Key &key, + T_strseq &seq); +}; + +template <typename T_desc_seq> +class TAO_Port_Desc_Seq_Utils +{ +public: + static void port_descriptions (T_desc_seq &desc_seq, + ACE_Configuration *config, + ACE_Configuration_Section_Key &key, + const char *sub_section); + + static void get_is_multiple (T_desc_seq &desc_seq, + ACE_Configuration *config, + ACE_Configuration_Section_Key &key, + CORBA::ULong index); + + static void port_base_type (T_desc_seq &desc_seq, + ACE_TString &holder, + CORBA::ULong index); +}; + +template<typename T> +class TAO_Port_Utils +{ +public: + static T *create_entry (const char *id, + const char *name, + const char *version, + const char *sub_section, + CORBA::Container_ptr port_base_type, + CORBA::Boolean is_multiple, + TAO_Repository_i *repo, + CORBA::DefinitionKind port_kind, + ACE_Configuration_Section_Key &key + ACE_ENV_ARG_DECL); + + static void set_is_multiple (CORBA::Boolean is_multiple, + ACE_Configuration *config, + ACE_Configuration_Section_Key &key); +}; + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "IFR_Service_Utils_T.cpp" +#endif /* defined REQUIRED SOURCE */ + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma warning(pop) +#endif /* _MSC_VER */ + +#endif /* TAO_IFR_SERVICE_UTILS_T_H */ + diff --git a/TAO/orbsvcs/orbsvcs/IFRService/tmplinst.cpp b/TAO/orbsvcs/orbsvcs/IFRService/tmplinst.cpp index ad2c9fdf6e8..a0a0f3b97cd 100644 --- a/TAO/orbsvcs/orbsvcs/IFRService/tmplinst.cpp +++ b/TAO/orbsvcs/orbsvcs/IFRService/tmplinst.cpp @@ -1,6 +1,7 @@ // $Id$ #include "concrete_classes.h" +#include "IFR_Service_Utils_T.h" #include "ace/Auto_Ptr.h" ACE_RCSID (IFRService, @@ -17,7 +18,7 @@ template class ACE_Unbounded_Queue<ACE_Configuration_Section_Key>; template class ACE_Unbounded_Queue_Iterator<ACE_Configuration_Section_Key>; template class POA_CORBA::Repository_tie<TAO_Repository_i>; -template class POA_IR::ComponentRepository_tie<TAO_ComponentRepository_i>; +template class POA_CORBA::Component_IR::Repository_tie<TAO_ComponentRepository_i>; template class POA_CORBA::PrimitiveDef_tie<TAO_PrimitiveDef_i>; template class POA_CORBA::StringDef_tie<TAO_StringDef_i>; template class POA_CORBA::WstringDef_tie<TAO_WstringDef_i>; @@ -30,19 +31,19 @@ template class POA_CORBA::NativeDef_tie<TAO_NativeDef_i>; template class POA_CORBA::ValueBoxDef_tie<TAO_ValueBoxDef_i>; template class POA_CORBA::UnionDef_tie<TAO_UnionDef_i>; template class POA_CORBA::StructDef_tie<TAO_StructDef_i>; -template class POA_IR::ConsumesDef_tie<TAO_ConsumesDef_i>; -template class POA_IR::PublishesDef_tie<TAO_PublishesDef_i>; -template class POA_IR::EmitsDef_tie<TAO_EmitsDef_i>; -template class POA_IR::EventDef_tie<TAO_EventDef_i>; -template class POA_IR::ProvidesDef_tie<TAO_ProvidesDef_i>; -template class POA_IR::UsesDef_tie<TAO_UsesDef_i>; +template class POA_CORBA::Component_IR::ConsumesDef_tie<TAO_ConsumesDef_i>; +template class POA_CORBA::Component_IR::PublishesDef_tie<TAO_PublishesDef_i>; +template class POA_CORBA::Component_IR::EmitsDef_tie<TAO_EmitsDef_i>; +template class POA_CORBA::Component_IR::EventDef_tie<TAO_EventDef_i>; +template class POA_CORBA::Component_IR::ProvidesDef_tie<TAO_ProvidesDef_i>; +template class POA_CORBA::Component_IR::UsesDef_tie<TAO_UsesDef_i>; template class POA_CORBA::ValueMemberDef_tie<TAO_ValueMemberDef_i>; -template class POA_IR::FactoryDef_tie<TAO_FactoryDef_i>; -template class POA_IR::FinderDef_tie<TAO_FinderDef_i>; +template class POA_CORBA::Component_IR::FactoryDef_tie<TAO_FactoryDef_i>; +template class POA_CORBA::Component_IR::FinderDef_tie<TAO_FinderDef_i>; template class POA_CORBA::AttributeDef_tie<TAO_AttributeDef_i>; template class POA_CORBA::ConstantDef_tie<TAO_ConstantDef_i>; -template class POA_IR::ComponentDef_tie<TAO_ComponentDef_i>; -template class POA_IR::HomeDef_tie<TAO_HomeDef_i>; +template class POA_CORBA::Component_IR::ComponentDef_tie<TAO_ComponentDef_i>; +template class POA_CORBA::Component_IR::HomeDef_tie<TAO_HomeDef_i>; template class POA_CORBA::ValueDef_tie<TAO_ValueDef_i>; template class POA_CORBA::ExceptionDef_tie<TAO_ExceptionDef_i>; template class POA_CORBA::ModuleDef_tie<TAO_ModuleDef_i>; @@ -128,6 +129,24 @@ template class ACE_Auto_Basic_Ptr<TAO_IDLType_i>; template class ACE_Auto_Basic_Ptr<char>; +template class TAO_IFR_Generic_Utils<TAO_AttributeDef_i>; +template class TAO_IFR_Generic_Utils<TAO_OperationDef_i>; +template class TAO_IFR_Generic_Utils<TAO_ProvidesDef_i>; +template class TAO_IFR_Generic_Utils<TAO_UsesDef_i>; +template class TAO_IFR_Generic_Utils<TAO_EmitsDef_i>; +template class TAO_IFR_Generic_Utils<TAO_PublishesDef_i>; +template class TAO_IFR_Generic_Utils<TAO_ConsumesDef_i>; +template class TAO_Port_Desc_Seq_Utils<CORBA::ComponentIR::ProvidesDescriptionSeq>; +template class TAO_Port_Desc_Seq_Utils<CORBA::ComponentIR::UsesDescriptionSeq>; +template class TAO_Port_Desc_Seq_Utils<CORBA::ComponentIR::EventPortDescriptionSeq>; +template class TAO_Port_Utils<CORBA::ComponentIR::ProvidesDef>; +template class TAO_Port_Utils<CORBA::ComponentIR::UsesDef>; +template class TAO_Port_Utils<CORBA::ComponentIR::EmitsDef>; +template class TAO_Port_Utils<CORBA::ComponentIR::PublishesDef>; +template class TAO_Port_Utils<CORBA::ComponentIR::ConsumesDef>; +template class TAO_IFR_Strseq_Utils<CORBA::RepositoryIdSeq>; +template class TAO_IFR_Strseq_Utils<CORBA::ContextIdSeq>; + #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) #pragma instantiate ACE_Node<CORBA::DefinitionKind> @@ -138,7 +157,7 @@ template class ACE_Auto_Basic_Ptr<char>; #pragma instantiate ACE_Unbounded_Queue_Iterator<ACE_Configuration_Section_Key> #pragma instantiate POA_CORBA::Repository_tie<TAO_Repository_i> -#pragma instantiate POA_IR::ComponentRepository_tie<TAO_ComponentRepository_i> +#pragma instantiate POA_CORBA::Component_IR::Repository_tie<TAO_ComponentRepository_i> #pragma instantiate POA_CORBA::PrimitiveDef_tie<TAO_PrimitiveDef_i> #pragma instantiate POA_CORBA::StringDef_tie<TAO_StringDef_i> #pragma instantiate POA_CORBA::WstringDef_tie<TAO_WstringDef_i> @@ -151,19 +170,19 @@ template class ACE_Auto_Basic_Ptr<char>; #pragma instantiate POA_CORBA::ValueBoxDef_tie<TAO_ValueBoxDef_i> #pragma instantiate POA_CORBA::UnionDef_tie<TAO_UnionDef_i> #pragma instantiate POA_CORBA::StructDef_tie<TAO_StructDef_i> -#pragma instantiate POA_IR::ConsumesDef_tie<TAO_ConsumesDef_i> -#pragma instantiate POA_IR::PublishesDef_tie<TAO_PublishesDef_i> -#pragma instantiate POA_IR::EmitsDef_tie<TAO_EmitsDef_i> -#pragma instantiate POA_IR::EventDef_tie<TAO_PrimaryKeyDef_i> -#pragma instantiate POA_IR::ProvidesDef_tie<TAO_ProvidesDef_i> -#pragma instantiate POA_IR::UsesDef_tie<TAO_UsesDef_i> +#pragma instantiate POA_CORBA::Component_IR::ConsumesDef_tie<TAO_ConsumesDef_i> +#pragma instantiate POA_CORBA::Component_IR::PublishesDef_tie<TAO_PublishesDef_i> +#pragma instantiate POA_CORBA::Component_IR::EmitsDef_tie<TAO_EmitsDef_i> +#pragma instantiate POA_CORBA::Component_IR::EventDef_tie<TAO_PrimaryKeyDef_i> +#pragma instantiate POA_CORBA::Component_IR::ProvidesDef_tie<TAO_ProvidesDef_i> +#pragma instantiate POA_CORBA::Component_IR::UsesDef_tie<TAO_UsesDef_i> #pragma instantiate POA_CORBA::ValueMemberDef_tie<TAO_ValueMemberDef_i> -#pragma instantiate POA_IR::FactoryDef_tie<TAO_FactoryDef_i> -#pragma instantiate POA_IR::FinderDef_tie<TAO_FinderDef_i> +#pragma instantiate POA_CORBA::Component_IR::FactoryDef_tie<TAO_FactoryDef_i> +#pragma instantiate POA_CORBA::Component_IR::FinderDef_tie<TAO_FinderDef_i> #pragma instantiate POA_CORBA::AttributeDef_tie<TAO_AttributeDef_i> #pragma instantiate POA_CORBA::ConstantDef_tie<TAO_ConstantDef_i> -#pragma instantiate POA_IR::ComponentDef_tie<TAO_ComponentDef_i> -#pragma instantiate POA_IR::HomeDef_tie<TAO_HomeDef_i> +#pragma instantiate POA_CORBA::Component_IR::ComponentDef_tie<TAO_ComponentDef_i> +#pragma instantiate POA_CORBA::Component_IR::HomeDef_tie<TAO_HomeDef_i> #pragma instantiate POA_CORBA::ValueDef_tie<TAO_ValueDef_i> #pragma instantiate POA_CORBA::ExceptionDef_tie<TAO_ExceptionDef_i> #pragma instantiate POA_CORBA::ModuleDef_tie<TAO_ModuleDef_i> @@ -249,4 +268,22 @@ template class ACE_Auto_Basic_Ptr<char>; #pragma instantiate ACE_Auto_Basic_Ptr<char> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_AttributeDef_i> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_OperationDef_i> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_ProvidesDef_i> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_UsesDef_i> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_EmitsDef_i> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_PublishesDef_i> +#pragma instantiate TAO_IFR_Generic_Utils<TAO_ConsumesDef_i> +#pragma instantiate TAO_Port_Desc_Seq_Utils<CORBA::ComponentIR::ProvidesDescriptionSeq> +#pragma instantiate TAO_Port_Desc_Seq_Utils<CORBA::ComponentIR::UsesDescriptionSeq> +#pragma instantiate TAO_Port_Desc_Seq_Utils<CORBA::ComponentIR::EventPortDescriptionSeq> +#pragma instantiate TAO_Port_Utils<CORBA::ComponentIR::ProvidesDef> +#pragma instantiate TAO_Port_Utils<CORBA::ComponentIR::UsesDef> +#pragma instantiate TAO_Port_Utils<CORBA::ComponentIR::EmitsDef> +#pragma instantiate TAO_Port_Utils<CORBA::ComponentIR::PublishesDef> +#pragma instantiate TAO_Port_Utils<CORBA::ComponentIR::ConsumesDef> +#pragma instantiate TAO_IFR_Strseq_Utils<CORBA::RepositoryIdSeq> +#pragma instantiate TAO_IFR_Strseq_Utils<CORBA::ContextIdSeq> + #endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |