get_arg.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 //=============================================================================
00004 /**
00005  *  @file get_arg.h
00006  *
00007  *  $Id: get_arg.h 73949 2006-08-10 09:44:53Z johnnyw $
00008  *
00009  *  Thru-POA/skeleton argument selection function templates.
00010  *  @par
00011  *  These function templates are used to choose between arguments
00012  *  supplied in thru-POA collocated invocations and arguments in
00013  *  uncollocated invocations.
00014  *
00015  *  @note A function template approach is used to avoid complicated
00016  *        argument conversions between stub supplied arguments and
00017  *        skeleton supplied ones.  For example, it is possible to make
00018  *        argument selection more transparent by taking advantage of
00019  *        run-time polymorphism.  However, that approach would incur
00020  *        additional footprint overhead on the client side due to the
00021  *        introduction of virtual tables, etc.
00022  *
00023  *  @author  Ossama Othman
00024  */
00025 //=============================================================================
00026 
00027 #ifndef TAO_GET_ARG_H
00028 #define TAO_GET_ARG_H
00029 
00030 #include /**/ "ace/pre.h"
00031 
00032 #include "tao/operation_details.h"
00033 
00034 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00035 
00036 namespace TAO
00037 {
00038   namespace Portable_Server
00039   {
00040     /// Get return value/argument.
00041     template<typename T>
00042     typename TAO::SArg_Traits<T>::ret_arg_type
00043     get_ret_arg (TAO_Operation_Details const * details,
00044                  TAO::Argument * const * skel_args)
00045     {
00046       return
00047         (details != 0 && details->use_stub_args ())
00048         ? static_cast<typename TAO::Arg_Traits<T>::ret_val *> (
00049             details->args ()[0])->arg ()
00050         : static_cast<typename TAO::SArg_Traits<T>::ret_val *> (
00051             skel_args[0])->arg ();
00052     }
00053 
00054     /// Get "in" argument.
00055     template<typename T>
00056     typename TAO::SArg_Traits<T>::in_arg_type
00057     get_in_arg (TAO_Operation_Details const * details,
00058                 TAO::Argument * const * skel_args,
00059                 size_t i)
00060     {
00061       return
00062         (details != 0 && details->use_stub_args ())
00063         ? static_cast<typename TAO::Arg_Traits<T>::in_arg_val *> (
00064             details->args ()[i])->arg ()
00065         : static_cast<typename TAO::SArg_Traits<T>::in_arg_val *> (
00066             skel_args[i])->arg ();
00067     }
00068 
00069     /// Get "inout" argument.
00070     template<typename T>
00071     typename TAO::SArg_Traits<T>::inout_arg_type
00072     get_inout_arg (TAO_Operation_Details const * details,
00073                    TAO::Argument * const * skel_args,
00074                    size_t i)
00075     {
00076       return
00077         (details != 0 && details->use_stub_args ())
00078         ? static_cast<typename TAO::Arg_Traits<T>::inout_arg_val *> (
00079             details->args ()[i])->arg ()
00080         : static_cast<typename TAO::SArg_Traits<T>::inout_arg_val *> (
00081             skel_args[i])->arg ();
00082     }
00083 
00084     /// Get "out" argument.
00085     template<typename T>
00086     typename TAO::SArg_Traits<T>::out_arg_type
00087     get_out_arg (TAO_Operation_Details const * details,
00088                  TAO::Argument * const * skel_args,
00089                  size_t i)
00090     {
00091       return
00092         (details != 0 && details->use_stub_args ())
00093         ? static_cast<typename TAO::Arg_Traits<T>::out_arg_val *> (
00094             details->args ()[i])->arg ()
00095         : static_cast<typename TAO::SArg_Traits<T>::out_arg_val *> (
00096             skel_args[i])->arg ();
00097     }
00098   }
00099 }
00100 
00101 TAO_END_VERSIONED_NAMESPACE_DECL
00102 
00103 #include /**/ "ace/post.h"
00104 
00105 #endif  /* TAO_GET_ARG_H*/

Generated on Tue Feb 2 17:40:54 2010 for TAO_PortableServer by  doxygen 1.4.7