Public Member Functions | Protected Member Functions | Static Protected Member Functions | Static Private Member Functions | Friends

ACE_Dynamic_Service_Base Class Reference

Base class for all ACE_Dynamic_Service instantiations. More...

#include <Dynamic_Service_Base.h>

Inheritance diagram for ACE_Dynamic_Service_Base:
Inheritance graph
[legend]

List of all members.

Public Member Functions

void dump (void) const
 Dump the current static of the object.

Protected Member Functions

 ACE_Dynamic_Service_Base (void)
 No need to create, or assign instances of this class.
 ~ACE_Dynamic_Service_Base (void)
const ACE_Dynamic_Service_Baseoperator= (const ACE_Dynamic_Service_Base &)

Static Protected Member Functions

static void * instance (const ACE_TCHAR *name, bool no_global=false)
static void * instance (const ACE_Service_Gestalt *repo, const ACE_TCHAR *name, bool no_global=false)

Static Private Member Functions

static const ACE_Service_Typefind_i (const ACE_Service_Gestalt *&repo, const ACE_TCHAR *name, bool no_global)

Friends

class ACE_Dynamic_Service_Dependency

Detailed Description

Base class for all ACE_Dynamic_Service instantiations.

Factors out common code shared by all ACE_Dynamic_Service instantiations, this avoid code bloat.

Definition at line 38 of file Dynamic_Service_Base.h.


Constructor & Destructor Documentation

ACE_Dynamic_Service_Base::ACE_Dynamic_Service_Base ( void   )  [protected]

No need to create, or assign instances of this class.

ACE_Dynamic_Service_Base::~ACE_Dynamic_Service_Base ( void   )  [protected]

Member Function Documentation

void ACE_Dynamic_Service_Base::dump ( void   )  const

Dump the current static of the object.

const ACE_Service_Type * ACE_Dynamic_Service_Base::find_i ( const ACE_Service_Gestalt *&  repo,
const ACE_TCHAR name,
bool  no_global 
) [static, private]

Implement the service search policy, i.e. "look for the service first locally and then globally"

Definition at line 41 of file Dynamic_Service_Base.cpp.

{
  ACE_TRACE ("ACE_Dynamic_Service_Base::find_i");
  const ACE_Service_Type *svc_rec = 0;

  ACE_Service_Gestalt* global = ACE_Service_Config::global ();

  for ( ; (repo->find (name, &svc_rec) == -1) && !no_global; repo = global)
    {
      // Check the static repo, too if different
      if (repo == global)
        break;
    }

  return svc_rec;
}

void * ACE_Dynamic_Service_Base::instance ( const ACE_TCHAR name,
bool  no_global = false 
) [static, protected]

Perform the default repo search, but optionally skip searching the global repo.

Reimplemented in ACE_Dynamic_Service< TYPE >.

Definition at line 32 of file Dynamic_Service_Base.cpp.

{
  ACE_TRACE ("ACE_Dynamic_Service_Base::instance");
  return instance (ACE_Service_Config::current (), name, no_global);
}

void * ACE_Dynamic_Service_Base::instance ( const ACE_Service_Gestalt repo,
const ACE_TCHAR name,
bool  no_global = false 
) [static, protected]

Reimplemented in ACE_Dynamic_Service< TYPE >.

Definition at line 63 of file Dynamic_Service_Base.cpp.

{
  ACE_TRACE ("ACE_Dynamic_Service_Base::instance");

  void *obj = 0;
  const ACE_Service_Type_Impl *type = 0;

  const ACE_Service_Gestalt* repo_found = repo;
  const ACE_Service_Type *svc_rec = find_i (repo_found, name, no_global);
  if (svc_rec != 0)
    {
      type = svc_rec->type ();
      if (type != 0)
        obj = type->object ();
    }

  if (ACE::debug ())
    {
      ACE_Guard <ACE_Log_Msg> log_guard (*ACE_Log_Msg::instance ());

      if (repo->repo_ != repo_found->repo_)
        {
          ACE_DEBUG ((LM_DEBUG,
                    ACE_TEXT ("ACE (%P|%t) DSB::instance, repo=%@, name=%s")
                    ACE_TEXT (" type=%@ => %@")
                    ACE_TEXT (" [in repo=%@]\n"),
                    repo->repo_, name, type, obj, 
                    repo_found->repo_));
        }
      else
        {
          ACE_DEBUG ((LM_DEBUG,
                    ACE_TEXT ("ACE (%P|%t) DSB::instance, repo=%@, name=%s")
                    ACE_TEXT (" type=%@ => %@\n"),
                    repo->repo_, name, type, obj));
        }
    }

  return obj;
}

const ACE_Dynamic_Service_Base& ACE_Dynamic_Service_Base::operator= ( const ACE_Dynamic_Service_Base  )  [protected]

Friends And Related Function Documentation

friend class ACE_Dynamic_Service_Dependency [friend]

The dependency declaration class needs access to the service search policy, implemented by find_i()

Definition at line 67 of file Dynamic_Service_Base.h.


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