1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program Tester Core
3  * ----------------------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Generic registry class for factories
22  *//*--------------------------------------------------------------------*/
23 
24 #include "tcuFactoryRegistry.hpp"
25 
26 namespace tcu
27 {
28 
29 // AbstractFactory
30 
AbstractFactory(void)31 AbstractFactory::AbstractFactory (void)
32 {
33 }
34 
~AbstractFactory(void)35 AbstractFactory::~AbstractFactory (void)
36 {
37 }
38 
39 // GenericFactoryRegistry
40 
GenericFactoryRegistry(void)41 GenericFactoryRegistry::GenericFactoryRegistry (void)
42 {
43 }
44 
~GenericFactoryRegistry(void)45 GenericFactoryRegistry::~GenericFactoryRegistry (void)
46 {
47 	for (std::vector<AbstractFactory*>::const_iterator i = m_factories.begin(); i != m_factories.end(); ++i)
48 		delete *i;
49 }
50 
getFactoryByIndex(size_t index)51 AbstractFactory* GenericFactoryRegistry::getFactoryByIndex (size_t index)
52 {
53 	DE_ASSERT(index < m_factories.size());
54 	return m_factories[index];
55 }
56 
getFactoryByIndex(size_t index) const57 const AbstractFactory* GenericFactoryRegistry::getFactoryByIndex (size_t index) const
58 {
59 	DE_ASSERT(index < m_factories.size());
60 	return m_factories[index];
61 }
62 
getFactoryByName(const std::string & name)63 AbstractFactory* GenericFactoryRegistry::getFactoryByName (const std::string& name)
64 {
65 	for (size_t index = 0; index < m_factories.size(); index++)
66 	{
67 		if (name == m_factories[index]->getName())
68 			return m_factories[index];
69 	}
70 
71 	return DE_NULL;
72 }
73 
getFactoryByName(const std::string & name) const74 const AbstractFactory* GenericFactoryRegistry::getFactoryByName (const std::string& name) const
75 {
76 	for (size_t index = 0; index < m_factories.size(); index++)
77 	{
78 		if (name == m_factories[index]->getName())
79 			return m_factories[index];
80 	}
81 
82 	return DE_NULL;
83 }
84 
registerFactory(AbstractFactory * factory)85 void GenericFactoryRegistry::registerFactory (AbstractFactory* factory)
86 {
87 	DE_ASSERT(!getFactoryByName(factory->getName()));
88 	m_factories.push_back(factory);
89 }
90 
91 // FactoryBase
92 
FactoryBase(const std::string & name,const std::string & description)93 FactoryBase::FactoryBase (const std::string& name, const std::string& description)
94 	: m_name		(name)
95 	, m_description	(description)
96 {
97 }
98 
~FactoryBase(void)99 FactoryBase::~FactoryBase (void)
100 {
101 }
102 
getName(void) const103 const char* FactoryBase::getName (void) const
104 {
105 	return m_name.c_str();
106 }
107 
getDescription(void) const108 const char* FactoryBase::getDescription (void) const
109 {
110 	return m_description.c_str();
111 }
112 
113 } // tcu
114