12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #ifndef _SVC_CACHE_H
- #define _SVC_CACHE_H
- #include <api/service/svc_enum.h>
- #include <bfc/ptrlist.h>
- /**
- This is a caching version of SvcEnum. Upon creation, it enumerates all
- service factories in the family and keeps them in a list. Then you can
- call findService() with a search string to quickly find the service you
- want. If you don't have a search string, you can still use a SvcEnum.
- */
- class SvcCache {
- protected:
- SvcCache(FOURCC type);
-
- public:
- waServiceFactory *findServiceFactory(const wchar_t *searchval);
- private:
- class waServiceFactoryCompare {
- public:
- static int compareItem(waServiceFactory *p1, waServiceFactory* p2);
- static int compareAttrib(const wchar_t *attrib, waServiceFactory *item);
- };
- PtrListQuickSorted<waServiceFactory, waServiceFactoryCompare> list;
- };
- template <class T>
- class SvcCacheT : public SvcCache {
- public:
- SvcCacheT() : SvcCache(T::getServiceType()) { }
- T *findService(const char *key, int global_lock=TRUE) {
- waServiceFactory *sf = findServiceFactory(key);
- if (sf == NULL) return NULL;
- T *ret = castService<T>(sf, global_lock);
- return ret;
- }
- };
- #endif
|