5 #ifndef SMARTTESTER_ENTITYUTILS_H
6 #define SMARTTESTER_ENTITYUTILS_H
9 template<
typename T,
typename... Args>
10 HRESULT constructEntity(CDynamic_Library& library,
const std::string& symbolName, Args... args) {
11 if (!library.Is_Loaded()) {
12 Logger::getInstance().error(L
"Library is not loaded! Cannot construct entity.");
16 Logger::getInstance().debug(L
"Creating entity with " + Widen_String(symbolName) + L
" factory.");
18 auto entityFactory = library.Resolve<T>(symbolName.c_str());
20 Logger::getInstance().error(L
"Error while loading " + Widen_String(symbolName) + L
" factory!");
24 HRESULT creationResult = entityFactory(args...);
26 if (!Succeeded(creationResult)) {
33 template<
typename T,
typename D>
34 HRESULT getEntityDescriptors(CDynamic_Library& library,
const std::string& symbolName, D **begin, D **end) {
35 if (!library.Is_Loaded()) {
36 Logger::getInstance().error(L
"Library is not loaded! Cannot get entity descriptors.");
40 auto descriptorsCreator = library.Resolve<T>(symbolName.c_str());
41 if (!descriptorsCreator) {
42 Logger::getInstance().error(L
"Error while loading " + Widen_String(symbolName) + L
" descriptors factory!");
46 return descriptorsCreator(begin, end);
49 template<
typename T,
typename D>
50 D* getEntityDescriptor(CDynamic_Library& library,
const GUID& guid,
const std::string& symbolName) {
53 HRESULT result = getEntityDescriptors<T>(library, symbolName, &begin, &end);
54 if (!Succeeded(result)) {
55 Logger::getInstance().error(L
"Error while acquiring entity descriptors!");
59 while (begin != end) {
60 if (begin->id == guid) {
70 #endif //SMARTTESTER_ENTITYUTILS_H