1e5c31af7Sopenharmony_ci#ifndef _TCUFUNCTIONLIBRARY_HPP 2e5c31af7Sopenharmony_ci#define _TCUFUNCTIONLIBRARY_HPP 3e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 4e5c31af7Sopenharmony_ci * drawElements Quality Program Tester Core 5e5c31af7Sopenharmony_ci * ---------------------------------------- 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project 8e5c31af7Sopenharmony_ci * 9e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 10e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 11e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 12e5c31af7Sopenharmony_ci * 13e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 14e5c31af7Sopenharmony_ci * 15e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 16e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 17e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 19e5c31af7Sopenharmony_ci * limitations under the License. 20e5c31af7Sopenharmony_ci * 21e5c31af7Sopenharmony_ci *//*! 22e5c31af7Sopenharmony_ci * \file 23e5c31af7Sopenharmony_ci * \brief Generic interface for library containing functions. 24e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/ 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci#include "tcuDefs.hpp" 27e5c31af7Sopenharmony_ci#include "deDynamicLibrary.hpp" 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ci#include <string> 30e5c31af7Sopenharmony_ci#include <vector> 31e5c31af7Sopenharmony_ci#include <map> 32e5c31af7Sopenharmony_ci 33e5c31af7Sopenharmony_cinamespace tcu 34e5c31af7Sopenharmony_ci{ 35e5c31af7Sopenharmony_ci 36e5c31af7Sopenharmony_ci// \note Returned function pointers have same lifetime as the library. 37e5c31af7Sopenharmony_ciclass FunctionLibrary 38e5c31af7Sopenharmony_ci{ 39e5c31af7Sopenharmony_ciprotected: 40e5c31af7Sopenharmony_ci FunctionLibrary (void); 41e5c31af7Sopenharmony_ci 42e5c31af7Sopenharmony_cipublic: 43e5c31af7Sopenharmony_ci virtual ~FunctionLibrary (void); 44e5c31af7Sopenharmony_ci virtual deFunctionPtr getFunction (const char* funcName) const = 0; 45e5c31af7Sopenharmony_ci 46e5c31af7Sopenharmony_ciprivate: 47e5c31af7Sopenharmony_ci FunctionLibrary (const FunctionLibrary&); 48e5c31af7Sopenharmony_ci FunctionLibrary& operator= (const FunctionLibrary&); 49e5c31af7Sopenharmony_ci}; 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ciclass StaticFunctionLibrary : public FunctionLibrary 52e5c31af7Sopenharmony_ci{ 53e5c31af7Sopenharmony_cipublic: 54e5c31af7Sopenharmony_ci struct Entry 55e5c31af7Sopenharmony_ci { 56e5c31af7Sopenharmony_ci const char* name; 57e5c31af7Sopenharmony_ci deFunctionPtr ptr; 58e5c31af7Sopenharmony_ci }; 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci StaticFunctionLibrary (const Entry* entries, int numEntries); 61e5c31af7Sopenharmony_ci ~StaticFunctionLibrary (void); 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci deFunctionPtr getFunction (const char* funcName) const; 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ciprivate: 66e5c31af7Sopenharmony_ci 67e5c31af7Sopenharmony_ci StaticFunctionLibrary (const StaticFunctionLibrary&); 68e5c31af7Sopenharmony_ci StaticFunctionLibrary& operator= (const StaticFunctionLibrary&); 69e5c31af7Sopenharmony_ci 70e5c31af7Sopenharmony_ci // \todo [2014-03-11 pyry] This could be implemented with const char* pointers and custom compare. 71e5c31af7Sopenharmony_ci std::map<std::string, deFunctionPtr> m_functions; 72e5c31af7Sopenharmony_ci}; 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_ciclass DynamicFunctionLibrary : public FunctionLibrary 75e5c31af7Sopenharmony_ci{ 76e5c31af7Sopenharmony_cipublic: 77e5c31af7Sopenharmony_ci DynamicFunctionLibrary (const char* fileName); 78e5c31af7Sopenharmony_ci ~DynamicFunctionLibrary (void); 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ci deFunctionPtr getFunction (const char* funcName) const; 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ciprivate: 83e5c31af7Sopenharmony_ci DynamicFunctionLibrary (const DynamicFunctionLibrary&); 84e5c31af7Sopenharmony_ci DynamicFunctionLibrary& operator= (const DynamicFunctionLibrary&); 85e5c31af7Sopenharmony_ci 86e5c31af7Sopenharmony_ci de::DynamicLibrary m_dynamicLibrary; 87e5c31af7Sopenharmony_ci}; 88e5c31af7Sopenharmony_ci 89e5c31af7Sopenharmony_ciclass CompositeFunctionLibrary : public FunctionLibrary 90e5c31af7Sopenharmony_ci{ 91e5c31af7Sopenharmony_cipublic: 92e5c31af7Sopenharmony_ci CompositeFunctionLibrary (const FunctionLibrary* libraries, int numLibraries); 93e5c31af7Sopenharmony_ci ~CompositeFunctionLibrary (void); 94e5c31af7Sopenharmony_ci 95e5c31af7Sopenharmony_ci deFunctionPtr getFunction (const char* funcName) const; 96e5c31af7Sopenharmony_ci 97e5c31af7Sopenharmony_ciprivate: 98e5c31af7Sopenharmony_ci const FunctionLibrary* const m_libraries; 99e5c31af7Sopenharmony_ci const int m_numLibraries; 100e5c31af7Sopenharmony_ci}; 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_ci} // tcu 103e5c31af7Sopenharmony_ci 104e5c31af7Sopenharmony_ci#endif // _TCUFUNCTIONLIBRARY_HPP 105