Public Types | Public Member Functions | Public Attributes | Private Attributes

ACE_Service_Type Class Reference

Keeps track of information related to the various ACE_Service_Type_Impl subclasses. More...

#include <Service_Object.h>

Collaboration diagram for ACE_Service_Type:
Collaboration graph
[legend]

List of all members.

Public Types

enum  { DELETE_OBJ = 1, DELETE_THIS = 2 }
enum  { SERVICE_OBJECT = ACE_SVC_OBJ_T, MODULE = ACE_MODULE_T, STREAM = ACE_STREAM_T, INVALID_TYPE = -1 }

Public Member Functions

 ACE_Service_Type (const ACE_TCHAR *n, ACE_Service_Type_Impl *o, const ACE_DLL &dll, bool active)
 ACE_Service_Type (const ACE_TCHAR *n, ACE_Service_Type_Impl *o, ACE_SHLIB_HANDLE handle, bool active)
 ~ACE_Service_Type (void)
const ACE_TCHARname (void) const
void name (const ACE_TCHAR *)
const ACE_Service_Type_Impltype (void) const
void type (const ACE_Service_Type_Impl *, bool active=true)
bool is_forward_declaration (void) const
 Is this just a stub for the real thing?
int suspend (void) const
int resume (void) const
bool active (void) const
void active (bool turnon)
int fini (void)
 Calls fini on type_.
bool fini_called (void) const
 Check if the service has been fini'ed.
void dump (void) const
 Dump the state of an object.
const ACE_DLLdll (void) const
 Get to the DLL's implentation.
void dll (const ACE_DLL &)
 Sets the DLL.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Private Attributes

const ACE_TCHARname_
 Humanly readible name of svc.
const ACE_Service_Type_Impltype_
 Pointer to C++ object that implements the svc.
ACE_DLL dll_
bool active_
 true if svc is currently active, otherwise false.
bool fini_already_called_
 true if fini on type_ has already been called, otherwise false.

Detailed Description

Keeps track of information related to the various ACE_Service_Type_Impl subclasses.

This class acts as the interface of the "Bridge" pattern.

Definition at line 74 of file Service_Object.h.


Member Enumeration Documentation

anonymous enum
Enumerator:
DELETE_OBJ 

Delete the payload object.

DELETE_THIS 

Delete the enclosing object.

Definition at line 77 of file Service_Object.h.

  {
    /// Delete the payload object.
    DELETE_OBJ = 1,

    /// Delete the enclosing object.
    DELETE_THIS = 2
  };

anonymous enum
Enumerator:
SERVICE_OBJECT 
MODULE 
STREAM 
INVALID_TYPE 

Definition at line 86 of file Service_Object.h.

    {
      SERVICE_OBJECT = ACE_SVC_OBJ_T,
      MODULE = ACE_MODULE_T,
      STREAM = ACE_STREAM_T,
      INVALID_TYPE = -1
    };


Constructor & Destructor Documentation

ACE_Service_Type::ACE_Service_Type ( const ACE_TCHAR n,
ACE_Service_Type_Impl o,
const ACE_DLL dll,
bool  active 
)

Definition at line 51 of file Service_Object.cpp.

  : name_ (0),
    type_ (t),
    dll_ (dll),
    active_ (active),
    fini_already_called_ (false)
{
  ACE_TRACE ("ACE_Service_Type::ACE_Service_Type");
  this->name (n);
}

ACE_Service_Type::ACE_Service_Type ( const ACE_TCHAR n,
ACE_Service_Type_Impl o,
ACE_SHLIB_HANDLE  handle,
bool  active 
)

Definition at line 65 of file Service_Object.cpp.

  : name_ (0),
    type_ (t),
    active_ (active),
    fini_already_called_ (false)
{
  ACE_TRACE ("ACE_Service_Type::ACE_Service_Type");
  this->dll_.set_handle (handle);
  this->name (n);
}

ACE_Service_Type::~ACE_Service_Type ( void   ) 

Definition at line 79 of file Service_Object.cpp.

{
  ACE_TRACE ("ACE_Service_Type::~ACE_Service_Type");
  this->fini ();

  delete [] const_cast <ACE_TCHAR *> (this->name_);
}


Member Function Documentation

bool ACE_Service_Type::active ( void   )  const

Definition at line 46 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::active");
  return this->active_;
}

void ACE_Service_Type::active ( bool  turnon  ) 

Definition at line 53 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::active");
  this->active_ = turnon;
}

const ACE_DLL & ACE_Service_Type::dll ( void   )  const

Get to the DLL's implentation.

Definition at line 66 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::dll");
  return this->dll_;
}

void ACE_Service_Type::dll ( const ACE_DLL adll  ) 

Sets the DLL.

Definition at line 72 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::dll");
  this->dll_ = adll;
}

void ACE_Service_Type::dump ( void   )  const

Dump the state of an object.

int ACE_Service_Type::fini ( void   ) 

Calls fini on type_.

Definition at line 88 of file Service_Object.cpp.

{
  if (ACE::debug ())
    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("ACE (%P|%t) ST::fini - destroying name=%s, dll=%s\n"),
                this->name_,
                this->dll_.dll_name_));

  if (this->fini_already_called_)
    return 0;

  this->fini_already_called_ = true;

  if (this->type_ == 0)
    {
      // Returning 1 currently only makes sense for dummy instances, used
      // to "reserve" a spot (kind of like forward-declarations) for a
      // dynamic service. This is necessary to help enforce the correct
      // finalization order, when such service also has any (dependent)
      // static services

      return 1; // No implementation was found.
    }

  int ret = this->type_->fini ();

  // Ensure type is 0 to prevent invalid access after call to fini.
  this->type_ = 0;

  // Ensure that closing the DLL is done after type_->fini() as it may
  // require access to the code for the service object destructor,
  // which resides in the DLL

  return (ret | this->dll_.close ());
}

bool ACE_Service_Type::fini_called ( void   )  const

Check if the service has been fini'ed.

Definition at line 60 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::fini_called");
  return this->fini_already_called_;
}

bool ACE_Service_Type::is_forward_declaration ( void   )  const

Is this just a stub for the real thing?

const ACE_TCHAR * ACE_Service_Type::name ( void   )  const

Definition at line 24 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::name");
  return this->name_;
}

void ACE_Service_Type::name ( const ACE_TCHAR n  ) 

Definition at line 166 of file Service_Object.cpp.

{
  ACE_TRACE ("ACE_Service_Type::name");

  delete [] const_cast <ACE_TCHAR *> (this->name_);
  this->name_ = ACE::strnew (n);
}

int ACE_Service_Type::resume ( void   )  const

Definition at line 133 of file Service_Object.cpp.

{
  ACE_TRACE ("ACE_Service_Type::resume");
  (const_cast<ACE_Service_Type *> (this))->active_ = true;
  return this->type_->resume ();
}

int ACE_Service_Type::suspend ( void   )  const

Definition at line 125 of file Service_Object.cpp.

{
  ACE_TRACE ("ACE_Service_Type::suspend");
  (const_cast<ACE_Service_Type *> (this))->active_ = false;
  return this->type_->suspend ();
}

const ACE_Service_Type_Impl * ACE_Service_Type::type ( void   )  const

Definition at line 31 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::type");
  return this->type_;
}

void ACE_Service_Type::type ( const ACE_Service_Type_Impl o,
bool  active = true 
)

Definition at line 38 of file Service_Object.inl.

{
  ACE_TRACE ("ACE_Service_Type::type");
  this->type_ = o;
  ((ACE_Service_Type *) this)->active_ = enabled;
}


Member Data Documentation

Declare the dynamic allocation hooks.

Definition at line 135 of file Service_Object.h.

bool ACE_Service_Type::active_ [private]

true if svc is currently active, otherwise false.

Definition at line 149 of file Service_Object.h.

ACE_DLL ACE_Service_Type::dll_ [mutable, private]

ACE_DLL representing the shared object file (non-zero if dynamically linked).

Definition at line 146 of file Service_Object.h.

true if fini on type_ has already been called, otherwise false.

Definition at line 152 of file Service_Object.h.

Humanly readible name of svc.

Definition at line 139 of file Service_Object.h.

Pointer to C++ object that implements the svc.

Definition at line 142 of file Service_Object.h.


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