aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/service/svcenumbyguid.h
blob: 412523c3b32648bcfed84755b450a7b3ba3da47c (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
#ifndef _SVCENUMBYGUID_H
#define _SVCENUMBYGUID_H

/*<?<autoheader/>*/
/*?>*/

#include "svc_enum.h"

/*
 * this is a helper class to fetch a service * by GUID
 * usage: svc_something *svc = SvcEnumByGuid<svc_something>(svcguid);
 * @short: Helper class to fetch unique service by GUID
*/
template <class SERVICETYPE>
class SvcEnumByGuid {
public:
/**
@param _guid The GUID of the service factory to fetch the service from.
*/
  SvcEnumByGuid() : guid(SERVICETYPE::getServiceGuid()) {}
  SvcEnumByGuid(GUID _guid) : guid(_guid) {}

/**
@return The pointer to the service.
*/
  SERVICETYPE *getInterface() {
    waServiceFactory *svc = WASABI_API_SVC->service_getServiceByGuid(guid);
    return castService<SERVICETYPE>(svc);
  }

  operator SERVICETYPE *() { return getInterface(); }

private:
  GUID guid;
};

#endif // _SVCENUMBYGUID_H