// -*- C++ -*- // // $Id: Based_Pointer_T.inl 81705 2008-05-15 14:02:02Z johnnyw $ #define ACE_COMPUTE_BASED_POINTER(P) (((char *) (P) - (P)->base_offset_) + (P)->target_) #include "ace/Global_Macros.h" ACE_BEGIN_VERSIONED_NAMESPACE_DECL template ACE_INLINE CONCRETE * ACE_Based_Pointer::operator->(void) { ACE_TRACE ("ACE_Based_Pointer::operator->"); return reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); } template ACE_INLINE void ACE_Based_Pointer_Basic::operator = (CONCRETE *rhs) { ACE_TRACE ("ACE_Based_Pointer_Basic::operator ="); if (rhs == 0) // Store a value of that indicate "NULL" pointer. this->target_ = -1; else this->target_ = ((char *) rhs - ((char *) this - this->base_offset_)); } template ACE_INLINE void ACE_Based_Pointer::operator = (CONCRETE *rhs) { ACE_TRACE ("ACE_Based_Pointer::operator ="); if (rhs == 0) // Store a value of that indicate "NULL" pointer. this->target_ = -1; else this->target_ = ((char *) rhs - ((char *) this - this->base_offset_)); } template ACE_INLINE CONCRETE ACE_Based_Pointer_Basic::operator *(void) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator *"); return *reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); } template ACE_INLINE CONCRETE * ACE_Based_Pointer_Basic::addr (void) const { ACE_TRACE ("ACE_Based_Pointer_Basic::addr"); if (this->target_ == -1) return 0; else return reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); } template ACE_INLINE ACE_Based_Pointer_Basic::operator CONCRETE *() const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator CONCRETE *()"); return this->addr (); } template ACE_INLINE CONCRETE ACE_Based_Pointer_Basic::operator [] (int index) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator []"); CONCRETE *c = reinterpret_cast (ACE_COMPUTE_BASED_POINTER (this)); return c[index]; } template ACE_INLINE void ACE_Based_Pointer_Basic::operator += (int index) { ACE_TRACE ("ACE_Based_Pointer_Basic::operator +="); this->base_offset_ += (index * sizeof (CONCRETE)); } template ACE_INLINE bool ACE_Based_Pointer_Basic::operator == (const ACE_Based_Pointer_Basic &rhs) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator =="); return ACE_COMPUTE_BASED_POINTER (this) == ACE_COMPUTE_BASED_POINTER (&rhs); } template ACE_INLINE bool ACE_Based_Pointer_Basic::operator != (const ACE_Based_Pointer_Basic &rhs) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator !="); return !(*this == rhs); } template ACE_INLINE bool ACE_Based_Pointer_Basic::operator < (const ACE_Based_Pointer_Basic &rhs) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator <"); return ACE_COMPUTE_BASED_POINTER (this) < ACE_COMPUTE_BASED_POINTER (&rhs); } template ACE_INLINE bool ACE_Based_Pointer_Basic::operator <= (const ACE_Based_Pointer_Basic &rhs) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator <="); return ACE_COMPUTE_BASED_POINTER (this) <= ACE_COMPUTE_BASED_POINTER (&rhs); } template ACE_INLINE bool ACE_Based_Pointer_Basic::operator > (const ACE_Based_Pointer_Basic &rhs) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator >"); return ACE_COMPUTE_BASED_POINTER (this) > ACE_COMPUTE_BASED_POINTER (&rhs); } template ACE_INLINE bool ACE_Based_Pointer_Basic::operator >= (const ACE_Based_Pointer_Basic &rhs) const { ACE_TRACE ("ACE_Based_Pointer_Basic::operator >="); return ACE_COMPUTE_BASED_POINTER (this) >= ACE_COMPUTE_BASED_POINTER (&rhs); } template ACE_INLINE void ACE_Based_Pointer_Basic::operator= (const ACE_Based_Pointer_Basic &rhs) { ACE_TRACE ("ACE_Based_Pointer_Basic::operator="); *this = rhs.addr (); } template ACE_INLINE void ACE_Based_Pointer::operator= (const ACE_Based_Pointer &rhs) { ACE_TRACE ("ACE_Based_Pointer::operator="); *this = rhs.addr (); } ACE_END_VERSIONED_NAMESPACE_DECL