Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends

TAO::Transport_Selection_Guard Class Reference

Used by the Transport Current feature to keep track of which Transport is currently active. More...

#include <Transport_Selection_Guard.h>

Collaboration diagram for TAO::Transport_Selection_Guard:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 Transport_Selection_Guard (TAO_Transport *t)
 Ctor.
 ~Transport_Selection_Guard (void)
 Dtor.
TAO_Transportoperator-> (void) const
 getter
TAO_Transportoperator* (void) const
 getter
TAO_Transportget (void) const
 Getter.
Transport_Selection_Guardset (TAO_Transport *t)
 Setter.
Transport_Selection_Guardoperator= (const Transport_Selection_Guard &rhs)

Static Public Member Functions

static Transport_Selection_Guardcurrent (TAO_ORB_Core *core, size_t tss_slot_id)

Private Member Functions

 Transport_Selection_Guard (const Transport_Selection_Guard &)
bool operator! () const

Private Attributes

Transport_Selection_Guardprev_
TAO_Transportcurr_
 The "real" Transport, i.e. the one selected at present.

Friends

bool operator== (const Transport_Selection_Guard &lhs, const TAO_Transport *rhs)
bool operator== (const TAO_Transport *lhs, const Transport_Selection_Guard &rhs)
bool operator!= (const Transport_Selection_Guard &lhs, const TAO_Transport *rhs)
bool operator!= (const TAO_Transport *lhs, const Transport_Selection_Guard &rhs)
template<class U >
bool operator== (const Transport_Selection_Guard &lhs, const U *rhs)
template<class U >
bool operator== (const U *lhs, const Transport_Selection_Guard &rhs)
template<class U >
bool operator!= (const Transport_Selection_Guard &lhs, const U *rhs)
template<class U >
bool operator!= (const U *lhs, const Transport_Selection_Guard &rhs)

Detailed Description

Used by the Transport Current feature to keep track of which Transport is currently active.

Whenever a Transport is selected: during an upcall, or prior to a client invocation an instance of this class is created [on the stack, or as a member of another class] to keep track of the said Transport. The class implements the RAII idiom, which makes it possible to build a stack of these instances as the thread is doing nested upcalls or client invocations.

It utilizes TAO_TSS_Resources::tsg_ member pointer to keep track of stack-linked Transport_Selection_Guard instances.

If the Transport Current feature is disabled most methods are no-ops and add no overhead on the critical path.

See Also:

https://svn.dre.vanderbilt.edu/viewvc/Middleware/trunk/TAO/docs/transport_current/index.html?revision=HEAD

Definition at line 58 of file Transport_Selection_Guard.h.


Constructor & Destructor Documentation

TAO::Transport_Selection_Guard::Transport_Selection_Guard ( TAO_Transport t  ) 

Ctor.

Definition at line 46 of file Transport_Selection_Guard.cpp.

    :
#if TAO_HAS_TRANSPORT_CURRENT == 1

    prev_ (TAO_TSS_Resources::instance ()->tsg_)
    ,

#endif  /* TAO_HAS_TRANSPORT_CURRENT == 1 */
    curr_ (t)
  {
#if TAO_HAS_TRANSPORT_CURRENT == 1

    TAO_TSS_Resources::instance ()->tsg_ = this;

#endif  /* TAO_HAS_TRANSPORT_CURRENT == 1 */

  }

TAO::Transport_Selection_Guard::~Transport_Selection_Guard ( void   ) 

Dtor.

Definition at line 65 of file Transport_Selection_Guard.cpp.

  {

#if TAO_HAS_TRANSPORT_CURRENT == 1

    TAO_TSS_Resources::instance ()->tsg_ = prev_;
    this->prev_ = 0;

#endif  /* TAO_HAS_TRANSPORT_CURRENT == 1 */
    this->curr_ = 0;
  }

TAO::Transport_Selection_Guard::Transport_Selection_Guard ( const Transport_Selection_Guard  )  [private]

Member Function Documentation

Transport_Selection_Guard * TAO::Transport_Selection_Guard::current ( TAO_ORB_Core core,
size_t  tss_slot_id 
) [static]

Definition at line 16 of file Transport_Selection_Guard.cpp.

  {
    // @NOTE: (Iliyan) Started making this method aware of the core
    // and the tss slot that correspond to the "current" transport,
    // influenced by a general design preference to keep things
    // local. The idea was to make the current TSG part of the TSS
    // storage for a specific ORB Core, as opposed to using the global
    // TSS Resources. However, it really doesn't offer any benefit to
    // store a Transport pointer locally, for each ORB. There is
    // always only one current Transport per thread. Period. The
    // number of ORB Core instances in existence does not change that
    // fact, so keeping a separate pointer would have been an
    // over-kill.
    ACE_UNUSED_ARG (core);
    ACE_UNUSED_ARG (tss_slot_id);

#if TAO_HAS_TRANSPORT_CURRENT == 1

    return TAO_TSS_Resources::instance ()->tsg_;

#else  /* TAO_HAS_TRANSPORT_CURRENT != 1 */

    return 0;

#endif  /* TAO_HAS_TRANSPORT_CURRENT == 1 */
  }

TAO_Transport* TAO::Transport_Selection_Guard::get ( void   )  const [inline]

Getter.

Definition at line 86 of file Transport_Selection_Guard.h.

    {
      return this->curr_;
    };

bool TAO::Transport_Selection_Guard::operator! (  )  const [inline, private]

Definition at line 127 of file Transport_Selection_Guard.h.

    {
      return curr_ == 0;
    }

TAO_Transport& TAO::Transport_Selection_Guard::operator* ( void   )  const [inline]

getter

Definition at line 80 of file Transport_Selection_Guard.h.

    {
      return *this->get ();
    };

TAO_Transport* TAO::Transport_Selection_Guard::operator-> ( void   )  const [inline]

getter

Definition at line 74 of file Transport_Selection_Guard.h.

    {
      return this->get ();
    };

Transport_Selection_Guard& TAO::Transport_Selection_Guard::operator= ( const Transport_Selection_Guard rhs  )  [inline]

Definition at line 98 of file Transport_Selection_Guard.h.

                                                                             {
    if (this != &rhs)
      {
#if TAO_HAS_TRANSPORT_CURRENT == 1
        prev_ = rhs.prev_;
#endif  /* TAO_HAS_TRANSPORT_CURRENT == 1 */
        curr_ = rhs.curr_;
      }
    return *this;
  }

Transport_Selection_Guard& TAO::Transport_Selection_Guard::set ( TAO_Transport t  )  [inline]

Setter.

Definition at line 92 of file Transport_Selection_Guard.h.

    {
      this->curr_ = t;
      return *this;
    };


Friends And Related Function Documentation

bool operator!= ( const Transport_Selection_Guard lhs,
const TAO_Transport rhs 
) [friend]

Definition at line 147 of file Transport_Selection_Guard.h.

    {
      return lhs.curr_ != rhs;
    }

bool operator!= ( const TAO_Transport lhs,
const Transport_Selection_Guard rhs 
) [friend]

Definition at line 154 of file Transport_Selection_Guard.h.

    {
      return lhs != rhs.curr_;
    }

template<class U >
bool operator!= ( const U *  lhs,
const Transport_Selection_Guard rhs 
) [friend]

Definition at line 182 of file Transport_Selection_Guard.h.

    {
      return lhs != rhs.curr_;
    }

template<class U >
bool operator!= ( const Transport_Selection_Guard lhs,
const U *  rhs 
) [friend]

Definition at line 175 of file Transport_Selection_Guard.h.

    {
      return lhs.curr_ != rhs;
    }

template<class U >
bool operator== ( const Transport_Selection_Guard lhs,
const U *  rhs 
) [friend]

Definition at line 161 of file Transport_Selection_Guard.h.

    {
      return lhs.curr_ == rhs;
    }

bool operator== ( const TAO_Transport lhs,
const Transport_Selection_Guard rhs 
) [friend]

Definition at line 140 of file Transport_Selection_Guard.h.

    {
      return lhs == rhs.curr_;
    }

template<class U >
bool operator== ( const U *  lhs,
const Transport_Selection_Guard rhs 
) [friend]

Definition at line 168 of file Transport_Selection_Guard.h.

    {
      return lhs == rhs.curr_;
    }

bool operator== ( const Transport_Selection_Guard lhs,
const TAO_Transport rhs 
) [friend]

Definition at line 133 of file Transport_Selection_Guard.h.

    {
      return lhs.curr_ == rhs;
    }


Member Data Documentation

TAO_Transport* TAO::Transport_Selection_Guard::curr_ [private]

The "real" Transport, i.e. the one selected at present.

Definition at line 123 of file Transport_Selection_Guard.h.

Transport_Selection_Guard* TAO::Transport_Selection_Guard::prev_ [private]

This is pointing to the guard that was active prior to instantiating us.

Definition at line 118 of file Transport_Selection_Guard.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines