diff options
-rw-r--r-- | TAO/tao/DynamicInterface/Request.cpp | 9 | ||||
-rw-r--r-- | TAO/tao/DynamicInterface/Request.inl | 6 | ||||
-rw-r--r-- | TAO/tao/NVList.h | 5 | ||||
-rw-r--r-- | TAO/tao/NVList.i | 6 |
4 files changed, 19 insertions, 7 deletions
diff --git a/TAO/tao/DynamicInterface/Request.cpp b/TAO/tao/DynamicInterface/Request.cpp index 9917fd7fceb..ca45f417720 100644 --- a/TAO/tao/DynamicInterface/Request.cpp +++ b/TAO/tao/DynamicInterface/Request.cpp @@ -48,6 +48,13 @@ CORBA_Request::_decr_refcnt (void) return 0; } +// The pseudo-object _nil method. +CORBA_Request_ptr +CORBA_Request::_nil (void) +{ + return (CORBA_Request_ptr)0; +} + // DII Request class implementation CORBA_Request::CORBA_Request (CORBA::Object_ptr obj, @@ -133,7 +140,7 @@ CORBA_Request::~CORBA_Request (void) void CORBA_Request::invoke (CORBA::Environment &ACE_TRY_ENV) { - CORBA::Boolean argument_flag = this->args_->count () ? 1 : 0; + CORBA::Boolean argument_flag = this->args_->_lazy_has_arguments (); TAO_GIOP_DII_Invocation call (this->target_->_stubobj (), this->opname_, diff --git a/TAO/tao/DynamicInterface/Request.inl b/TAO/tao/DynamicInterface/Request.inl index 13ba1f53583..caf3d6e1a68 100644 --- a/TAO/tao/DynamicInterface/Request.inl +++ b/TAO/tao/DynamicInterface/Request.inl @@ -13,12 +13,6 @@ CORBA_Request::_duplicate (CORBA_Request_ptr x) return x; } -ACE_INLINE CORBA_Request_ptr -CORBA_Request::_nil (void) -{ - return (CORBA_Request_ptr)0; -} - ACE_INLINE CORBA::Object_ptr CORBA_Request::target (void) const { diff --git a/TAO/tao/NVList.h b/TAO/tao/NVList.h index 74169059915..3d3d6c5f593 100644 --- a/TAO/tao/NVList.h +++ b/TAO/tao/NVList.h @@ -268,6 +268,11 @@ public: // re-alignment. // It returns ACE_CDR::MAX_ALIGNMENT to indicate errors. + CORBA::Boolean _lazy_has_arguments (void) const; + // If this list is used by a DII request, this will tell us if + // our CDR stream contains any marshaled arguments (needed for + // GIOP 1.2). + // Useful for template programming. #if !defined(__GNUC__) || __GNUC__ > 2 || __GNUC_MINOR__ >= 8 typedef CORBA_NVList_ptr _ptr_type; diff --git a/TAO/tao/NVList.i b/TAO/tao/NVList.i index 02b967a4094..1d4ad9efc65 100644 --- a/TAO/tao/NVList.i +++ b/TAO/tao/NVList.i @@ -269,6 +269,12 @@ CORBA_NVList::_nil (void) return 0; } +ACE_INLINE CORBA::Boolean +CORBA_NVList::_lazy_has_arguments (void) const +{ + return this->incoming_->length () == 0 ? 0 : 1; +} + // ************************************************************* // Inline operations for class CORBA_NVList_var // ************************************************************* |