summaryrefslogtreecommitdiff
path: root/trunk/TAO/tao/Utils/RIR_Narrow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/tao/Utils/RIR_Narrow.cpp')
-rw-r--r--trunk/TAO/tao/Utils/RIR_Narrow.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/trunk/TAO/tao/Utils/RIR_Narrow.cpp b/trunk/TAO/tao/Utils/RIR_Narrow.cpp
new file mode 100644
index 00000000000..fad7ef86477
--- /dev/null
+++ b/trunk/TAO/tao/Utils/RIR_Narrow.cpp
@@ -0,0 +1,60 @@
+// $Id$
+
+#ifndef TAO_UTILS_RIR_NARROW_CPP
+#define TAO_UTILS_RIR_NARROW_CPP
+
+#include "tao/Utils/RIR_Narrow.h"
+#include "tao/SystemException.h"
+#if defined (ACE_HAS_EXCEPTIONS)
+ #include <stdexcept>
+#endif
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template<class T> typename TAO::Utils::RIR_Narrow<T>::_ptr_type
+TAO::Utils::RIR_Narrow<T>::narrow (CORBA::ORB_ptr orb,
+ char const * id
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::Object_var object =
+ orb->resolve_initial_references (id
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (T::_nil ());
+
+ return RIR_Narrow<T>::narrow_object (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+}
+
+template<class T> typename TAO::Utils::RIR_Narrow<T>::_ptr_type
+TAO::Utils::RIR_Narrow<T>::narrow (PortableInterceptor::ORBInitInfo_ptr info,
+ char const * id
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::Object_var object =
+ info->resolve_initial_references (id
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (T::_nil ());
+
+ return RIR_Narrow<T>::narrow_object (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+}
+
+template<class T> typename TAO::Utils::RIR_Narrow<T>::_ptr_type
+TAO::Utils::RIR_Narrow<T>::narrow_object (CORBA::Object_ptr object
+ ACE_ENV_ARG_DECL)
+{
+ _var_type narrowed_object = T::_narrow (object
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (T::_nil ());
+
+ if (CORBA::is_nil (narrowed_object.in ()))
+ {
+ ACE_THROW_RETURN (CORBA::INV_OBJREF (),
+ T::_nil ());
+ }
+ return narrowed_object._retn ();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /*TAO_UTILS_RIR_NARROW_CPP*/