blob: b8facf35e9f19f23bce8cca5ef10ce7fa0851b8c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#ifndef NULLSOFT_SERVICEMANAGERH
#define NULLSOFT_SERVICEMANAGERH
#include <api/service/api_service.h>
#include "../nu/AutoLock.h"
#include <vector>
#include <map>
struct Counter;
class ServiceManager : public api_service
{
public:
ServiceManager();
int service_register( waServiceFactory *svc );
int service_deregister( waServiceFactory *svc );
size_t service_getNumServices( FOURCC svc_type );
waServiceFactory *service_enumService( FOURCC svc_type, size_t n );
waServiceFactory *service_getServiceByGuid( GUID guid );
int service_lock( waServiceFactory *owner, void *svcptr );
int service_clientLock( void *svcptr );
int service_release( void *svcptr );
const char *service_getTypeName( FOURCC svc_type );
int service_unlock( void *svcptr );
int service_isvalid( FOURCC svctype, waServiceFactory *service );
int service_compactDuplicates( waServiceFactory *me );
protected:
RECVS_DISPATCH;
private:
Nullsoft::Utility::LockGuard serviceGuard;
typedef std::vector<waServiceFactory *> ServiceList;
ServiceList services;
std::vector<Counter *> locks;
std::map<FOURCC, ServiceList *> services_by_type;
};
extern api_service *serviceManager;
#endif
|