#ifndef _SVC_CACHE_H #define _SVC_CACHE_H #include #include /** 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 list; }; template 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(sf, global_lock); return ret; } }; #endif