diff options
Diffstat (limited to 'TAO/tao/AnyTypeCode/NVList_Adapter_Impl.cpp')
-rw-r--r-- | TAO/tao/AnyTypeCode/NVList_Adapter_Impl.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/TAO/tao/AnyTypeCode/NVList_Adapter_Impl.cpp b/TAO/tao/AnyTypeCode/NVList_Adapter_Impl.cpp new file mode 100644 index 00000000000..7ed8cb3d983 --- /dev/null +++ b/TAO/tao/AnyTypeCode/NVList_Adapter_Impl.cpp @@ -0,0 +1,81 @@ +// @(#) $Id$ + +#include "tao/AnyTypeCode/NVList_Adapter_Impl.h" + +ACE_RCSID (AnyTypeCode, + NVList_Adapter_Impl, + "$Id$") + +#include "tao/AnyTypeCode/NVList.h" +#include "tao/SystemException.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +void +TAO_NVList_Adapter_Impl::create_list ( + CORBA::Long count, + CORBA::NVList_ptr &new_list + ACE_ENV_ARG_DECL) +{ + ACE_ASSERT (CORBA::ULong (count) <= UINT_MAX); + // Create an empty list + ACE_NEW_THROW_EX (new_list, + CORBA::NVList, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + 0, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK; + + // If count is greater than 0, create a list of NamedValues. + if (count != 0) + { + new_list->max_ = (CORBA::ULong) count; + + for (CORBA::Long i = 0; i < count; ++i) + { + CORBA::NamedValue_ptr nv = 0; + ACE_NEW_THROW_EX (nv, + CORBA::NamedValue, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + 0, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK; + + new_list->values_.enqueue_tail (nv); + } + } +} + +void +TAO_NVList_Adapter_Impl::create_named_value ( + CORBA::NamedValue_ptr &nv + ACE_ENV_ARG_DECL) +{ + ACE_NEW_THROW_EX (nv, + CORBA::NamedValue, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + 0, + ENOMEM), + CORBA::COMPLETED_NO)); +} + +int +TAO_NVList_Adapter_Impl::Initializer (void) +{ + return ACE_Service_Config::process_directive (ace_svc_desc_TAO_NVList_Adapter_Impl); +} + +TAO_END_VERSIONED_NAMESPACE_DECL + +ACE_STATIC_SVC_DEFINE (TAO_NVList_Adapter_Impl, + ACE_TEXT ("TAO_NVList_Adapter"), + ACE_SVC_OBJ_T, + &ACE_SVC_NAME (TAO_NVList_Adapter_Impl), + ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ, + 0) +ACE_FACTORY_DEFINE (TAO_AnyTypeCode, TAO_NVList_Adapter_Impl) |