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.

00078   {
00079     /// Delete the payload object.
00080     DELETE_OBJ = 1,
00081 
00082     /// Delete the enclosing object.
00083     DELETE_THIS = 2
00084   };

anonymous enum
Enumerator:
SERVICE_OBJECT 
MODULE 
STREAM 
INVALID_TYPE 

Definition at line 86 of file Service_Object.h.

00087     {
00088       SERVICE_OBJECT = ACE_SVC_OBJ_T,
00089       MODULE = ACE_MODULE_T,
00090       STREAM = ACE_STREAM_T,
00091       INVALID_TYPE = -1
00092     };


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.

00055   : name_ (0),
00056     type_ (t),
00057     dll_ (dll),
00058     active_ (active),
00059     fini_already_called_ (false)
00060 {
00061   ACE_TRACE ("ACE_Service_Type::ACE_Service_Type");
00062   this->name (n);
00063 }

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.

00069   : name_ (0),
00070     type_ (t),
00071     active_ (active),
00072     fini_already_called_ (false)
00073 {
00074   ACE_TRACE ("ACE_Service_Type::ACE_Service_Type");
00075   this->dll_.set_handle (handle);
00076   this->name (n);
00077 }

ACE_Service_Type::~ACE_Service_Type ( void   ) 

Definition at line 79 of file Service_Object.cpp.

00080 {
00081   ACE_TRACE ("ACE_Service_Type::~ACE_Service_Type");
00082   this->fini ();
00083 
00084   delete [] const_cast <ACE_TCHAR *> (this->name_);
00085 }


Member Function Documentation

void ACE_Service_Type::active ( bool  turnon  ) 

Definition at line 53 of file Service_Object.inl.

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

bool ACE_Service_Type::active ( void   )  const

Definition at line 46 of file Service_Object.inl.

00047 {
00048   ACE_TRACE ("ACE_Service_Type::active");
00049   return this->active_;
00050 }

void ACE_Service_Type::dll ( const ACE_DLL adll  ) 

Sets the DLL.

Definition at line 72 of file Service_Object.inl.

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

const ACE_DLL & ACE_Service_Type::dll ( void   )  const

Get to the DLL's implentation.

Definition at line 66 of file Service_Object.inl.

00067 {
00068   ACE_TRACE ("ACE_Service_Type::dll");
00069   return this->dll_;
00070 }

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.

00089 {
00090   if (ACE::debug ())
00091     ACE_DEBUG ((LM_DEBUG,
00092                 ACE_TEXT ("ACE (%P|%t) ST::fini - destroying name=%s, dll=%s\n"),
00093                 this->name_,
00094                 this->dll_.dll_name_));
00095 
00096   if (this->fini_already_called_)
00097     return 0;
00098 
00099   this->fini_already_called_ = true;
00100 
00101   if (this->type_ == 0)
00102     {
00103       // Returning 1 currently only makes sense for dummy instances, used
00104       // to "reserve" a spot (kind of like forward-declarations) for a
00105       // dynamic service. This is necessary to help enforce the correct
00106       // finalization order, when such service also has any (dependent)
00107       // static services
00108 
00109       return 1; // No implementation was found.
00110     }
00111 
00112   int ret = this->type_->fini ();
00113 
00114   // Ensure that closing the DLL is done after type_->fini() as it may
00115   // require access to the code for the service object destructor,
00116   // which resides in the DLL
00117 
00118   return (ret | this->dll_.close ());
00119 }

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.

00061 {
00062   ACE_TRACE ("ACE_Service_Type::fini_called");
00063   return this->fini_already_called_;
00064 }

bool ACE_Service_Type::is_forward_declaration ( void   )  const

Is this just a stub for the real thing?

void ACE_Service_Type::name ( const ACE_TCHAR n  ) 

Definition at line 163 of file Service_Object.cpp.

00164 {
00165   ACE_TRACE ("ACE_Service_Type::name");
00166 
00167   delete [] const_cast <ACE_TCHAR *> (this->name_);
00168   this->name_ = ACE::strnew (n);
00169 }

const ACE_TCHAR * ACE_Service_Type::name ( void   )  const

Definition at line 24 of file Service_Object.inl.

00025 {
00026   ACE_TRACE ("ACE_Service_Type::name");
00027   return this->name_;
00028 }

int ACE_Service_Type::resume ( void   )  const

Definition at line 130 of file Service_Object.cpp.

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

int ACE_Service_Type::suspend ( void   )  const

Definition at line 122 of file Service_Object.cpp.

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

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

Definition at line 38 of file Service_Object.inl.

00039 {
00040   ACE_TRACE ("ACE_Service_Type::type");
00041   this->type_ = o;
00042   ((ACE_Service_Type *) this)->active_ = enabled;
00043 }

const ACE_Service_Type_Impl * ACE_Service_Type::type ( void   )  const

Definition at line 31 of file Service_Object.inl.

00032 {
00033   ACE_TRACE ("ACE_Service_Type::type");
00034   return this->type_;
00035 }


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

Generated on Sat Nov 21 23:18:05 2009 for ACE by  doxygen 1.6.1