123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #include <precomp.h>
- //<?#include "<class data="implementationheader"/>"
- #include "svcenum.h"
- //?>
- #include <api/service/services.h>
- #include <api/service/waservicefactory.h>
- #include <bfc/bfc_assert.h>
- SvcEnum::SvcEnum() : type(WaSvc::NONE), factory(NULL) {
- reset();
- }
- void *SvcEnum::_getNext(int global_lock) {
- if (WASABI_API_SVC == NULL) return NULL;
- for (;;) {
- factory = WASABI_API_SVC->service_enumService(type, pos++);
- if (factory == NULL) return NULL;
- void *s = factory->getInterface(FALSE);// get but don't lock
- if (s)
- {
- if (_testService(s)) {
- if (global_lock)
- WASABI_API_SVC->service_lock(factory, s); // lock in sys tables
- return s;
- }
- factory->releaseInterface(s);
- }
- }
- }
- void SvcEnum::reset() {
- pos = 0;
- factory = NULL;
- }
- int SvcEnum::release(void *ptr) {
- return WASABI_API_SVC->service_release(ptr);
- }
- waServiceFactory *SvcEnum::getLastFactory() {
- return factory;
- }
|