#include <ace/Service_Repository.h>
class ACE_Service_Repository {
public:
friend class ACE_Service_Repository_Iterator;
enum{ DEFAULT_SIZE = ACE_DEFAULT_SERVICE_REPOSITORY_SIZE };
ACE_Service_Repository (void);
ACE_Service_Repository (int size);
int open (int size = DEFAULT_SIZE);
~ACE_Service_Repository (void);
int close (void);
int fini (void);
static ACE_Service_Repository *instance ( int size = ACE_Service_Repository::DEFAULT_SIZE );
static ACE_Service_Repository *instance ( ACE_Service_Repository * );
static void close_singleton (void);
int insert (const ACE_Service_Type *);
int find ( const ASYS_TCHAR name[], const ACE_Service_Type **srp = 0, int ignore_suspended = 1 );
int remove (const ASYS_TCHAR[]);
int resume (const ASYS_TCHAR[], const ACE_Service_Type ** = 0);
int suspend (const ASYS_TCHAR[], const ACE_Service_Type ** = 0);
int current_size (void);
int total_size (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
private:
int find_i ( const ASYS_TCHAR service_name[], const ACE_Service_Type ** = 0, int ignore_suspended = 1 );
const ACE_Service_Type **service_vector_;
int current_size_;
int total_size_;
static ACE_Service_Repository *svc_rep_;
static int delete_svc_rep_;
ACE_Thread_Mutex lock_;
};
ACE_Service_Types
*'s and
allows an administrative entity to centrally manage and
control the behavior of application services. Note that if
services are removed from the middle of the repository the
order won't necessarily be maintained since the remove
method performs compaction. However, the common case is not
to remove services, so typically they are deleted in the
reverse order that they were added originally.
ACE_Service_Repository (void);
ACE_Service_Repository (int size);
int open (int size = DEFAULT_SIZE);
~ACE_Service_Repository (void);
int close (void);
int fini (void);
fini
and deleteing
dynamically allocated services.
static ACE_Service_Repository *instance (
int size = ACE_Service_Repository::DEFAULT_SIZE
);
ACE_Service_Repository
.
static ACE_Service_Repository *instance (ACE_Service_Repository *);
ACE_Service_Repository
and return
existing pointer.
static void close_singleton (void);
int insert (const ACE_Service_Type *);
int find (
const ASYS_TCHAR name[],
const ACE_Service_Type **srp = 0,
int ignore_suspended = 1
);
name
in the table. If ignore_suspended
is set then only consider services marked as resumed. If the
caller wants the located entry, pass back a pointer to the
located entry via srp
. If name
is not found, -1 is returned.
If name
is found, but it is suspended and the caller wants to
ignore suspended services a -2 is returned.
int remove (const ASYS_TCHAR[]);
int resume (const ASYS_TCHAR[], const ACE_Service_Type ** = 0);
int suspend (const ASYS_TCHAR[], const ACE_Service_Type ** = 0);
int current_size (void);
int total_size (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;