diff options
Diffstat (limited to 'Src/Wasabi/api/service/waservicefactoryi.h')
-rw-r--r-- | Src/Wasabi/api/service/waservicefactoryi.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/Src/Wasabi/api/service/waservicefactoryi.h b/Src/Wasabi/api/service/waservicefactoryi.h new file mode 100644 index 00000000..28d0b846 --- /dev/null +++ b/Src/Wasabi/api/service/waservicefactoryi.h @@ -0,0 +1,73 @@ +#ifndef __WASERVICEFACTORY_IMPL_H +#define __WASERVICEFACTORY_IMPL_H + +/*<?<autoheader/>*/ +#include "waservicefactory.h" +#include "waservicefactoryx.h" + +class CfgItem; +/*?>*/ +/*[interface.header.h] +#include "common/nsguid.h" +#include "studio/api.h" +*/ + +// this is a wasabi service factory. it's a static object you can query to +// fetch the * to your real service interface +class NOVTABLE waServiceFactoryI : public waServiceFactoryX { +public: + virtual ~waServiceFactoryI() {} +protected: +/*[interface.x_getServiceType.h] + public: +*/ + DISPATCH(100) virtual FOURCC x_getServiceType() { return svc_serviceType(); } // see services.h + DISPATCH(200) virtual const char *x_getServiceName() { return svc_getServiceName(); } + DISPATCH(210) virtual GUID getGuid() { return svc_getGuid(); } // GUID per service factory, can be INVALID_GUID +/** + Fetches a pointer to an instance of the service. Optionally locks it into the + global table, so that it can be safely released via service_release() + @see ComponentAPI::service_release() + @param global_lock If TRUE, calls service_lock() with the service * + @see releaseInterface() +*/ +/*[dispatchable.getInterface.postcall] + // -- generated code - edit in waservicefactoryi.h + // support old code that always locks even when global_lock==FALSE + if (!global_lock && __retval != NULL && !supportNonLockingGetInterface()) + WASABI_API_SVC->service_unlock(__retval); +*/ + DISPATCH(300) virtual void *getInterface(int global_lock = TRUE) { return svc_getInterface(global_lock); } + DISPATCH(300) virtual void *_RETIRED_getInterface() { return getInterface(); } // for back compat + DISPATCH(301) virtual int supportNonLockingGetInterface() { return svc_supportNonLockingGetInterface(); } + +/** + Releases a pointer to an instance of the service. Call this when you're done + with a service interface. Do NOT just call delete on it! Only the original + service factory can safely delete it. Also, do not pass in any pointers + that were not allocated from this factory. + @see getInterface() + @ret TRUE if no error, FALSE if error. +*/ + DISPATCH(310) virtual int releaseInterface(void *ifc) { return svc_releaseInterface(ifc); } // when they're done w/ it + +/** + Fetches a string for optional quick lookup of a service factory. This string + is defined on a service family type basis. e.g. the xuitag for xuicreators. +*/ + DISPATCH(500) virtual const wchar_t *getTestString() { return svc_getTestString(); } + DISPATCH(600) virtual int serviceNotify(int msg, int param1 = 0, int param2 = 0) { return svc_notify(msg, param1, param2); } +public: + + NODISPATCH virtual FOURCC svc_serviceType()=0; // see services.h + NODISPATCH virtual const char *svc_getServiceName()=0; + NODISPATCH virtual GUID svc_getGuid()=0; // GUID per service factory, can be INVALID_GUID + NODISPATCH virtual void *svc_getInterface(int global_lock = TRUE)=0; + NODISPATCH virtual int svc_supportNonLockingGetInterface() { return TRUE; } + NODISPATCH virtual int svc_releaseInterface(void *ifc)=0; // when they're done w/ it + NODISPATCH virtual CfgItem *svc_getCfgInterface()=0; + NODISPATCH virtual const wchar_t *svc_getTestString()=0; + NODISPATCH virtual int svc_notify(int msg, int param1 = 0, int param2 = 0)=0; +}; + +#endif // __WASERVICEFACTORY_IMPL_H |