コード例 #1
0
ファイル: IORuntime.cpp プロジェクト: JustSid/Firedrake
	void EnumerateClassesForProvider(Service *provider, const Function<bool (MetaClass *meta, Dictionary *properties)> &callback)
	{
		MetaClass *providerClass = provider->GetClass();

		spinlock_lock(&_matchingLock);

		Array *matches = Array::Alloc()->Init();

		for(size_t i = 0; i < _registeredClasses->GetCount(); i ++)
		{
			ClassEntry *entry = _registeredClasses->GetObjectAtIndex<ClassEntry>(i);

			if(!entry->IsMatched() && DoShallowMatch(providerClass, entry))
				matches->AddObject(entry);
		}

		spinlock_unlock(&_matchingLock);

		for(size_t i = 0; i < matches->GetCount(); i ++)
		{
			ClassEntry *entry = matches->GetObjectAtIndex<ClassEntry>(i);

			if(callback(entry->GetMeta(), entry->GetProperties()))
				entry->SetMatched(true);
		}

		matches->Release();
	}