30#ifndef EXTERNALMODULE_H
31#define EXTERNALMODULE_H
46 void* ext_library =
nullptr;
47 void* ext_creator =
nullptr;
49 bool locate_module(std::string);
64 template<
typename T>
void new_object(unique_ptr<T>& return_obj, std::istringstream& command)
const {
65 if(ext_creator)
reinterpret_cast<void (*)(unique_ptr<T>&, std::istringstream&)
>(ext_creator)(return_obj, command);
68 void new_adapter(unique_ptr<Element>&, std::istringstream&)
const;
69 void new_adapter(unique_ptr<Load>&, std::istringstream&)
const;
70 void new_adapter(unique_ptr<Material>&, std::istringstream&)
const;
71 void new_adapter(unique_ptr<Section>&, std::istringstream&)
const;
72 void new_adapter(unique_ptr<Solver>&, std::istringstream&)
const;
73 void new_adapter(unique_ptr<Amplitude>&, std::istringstream&)
const;
74 void new_adapter(unique_ptr<Modifier>&, std::istringstream&)
const;
75 void new_adapter(unique_ptr<Constraint>&, std::istringstream&)
const;
79 template<
typename T>
void object(unique_ptr<T>& new_object,
const shared_ptr<DomainBase>& domain,
const std::string&
id, std::istringstream& command) {
82 for(
const auto& I : domain->get_external_module_pool())
83 if(
is_equal(I->library_name,
id) || I->locate_cpp_module(
id) || I->locate_c_module(
id)) {
90 if(loaded || domain->insert(std::make_shared<ExternalModule>(
id)))
91 for(
const auto& I : domain->get_external_module_pool()) {
92 if(I->locate_cpp_module(
id)) I->new_object(new_object, command);
93 if(new_object !=
nullptr)
break;
94 if(I->locate_c_module(
id)) I->new_adapter(new_object, command);
95 if(new_object !=
nullptr)
break;
An Amplitude class that can generate Amplitude pattern.
Definition Amplitude.h:59
A Constraint class.
Definition Constraint.h:36
A Element class.
Definition Element.h:118
A ExternalModule class handles communication between the main program and external library.
Definition ExternalModule.h:45
A Load class.
Definition Load.h:37
A Material abstract base class.
Definition Material.h:114
A Modifier class.
Definition Modifier.h:36
A Section class.
Definition Section.h:77
A Solver class defines solvers used in analysis.
Definition Solver.h:38
bool locate_c_module(const std::string &)
Definition ExternalModule.cpp:97
ExternalModule & operator=(const ExternalModule &)=delete
bool locate_cpp_module(const std::string &)
Definition ExternalModule.cpp:99
~ExternalModule()
Definition ExternalModule.cpp:89
void new_adapter(unique_ptr< Element > &, std::istringstream &) const
Definition ExternalModule.cpp:101
ExternalModule(const ExternalModule &)=delete
ExternalModule(ExternalModule &&)=delete
const std::string library_name
Definition ExternalModule.h:52
void object(unique_ptr< T > &new_object, const shared_ptr< DomainBase > &domain, const std::string &id, std::istringstream &command)
Definition ExternalModule.h:79
void new_object(unique_ptr< T > &return_obj, std::istringstream &command) const
Definition ExternalModule.h:64
ExternalModule & operator=(ExternalModule &&)=delete
Definition ExternalModule.h:78
bool is_equal(const char A, const char B)
Definition utility.cpp:104