21 template <
typename Type1>
25 err =
"The requested object " +
object.name() +
" with type " + Type1::TYPENAME() +
", while the type " +
26 object.typeName() +
"is found in repository " + this->
name();
31 template <
typename Type>
34 return Type::TYPENAME() ==
object.typeName();
37 template<
typename T,
typename... Args>
41 if(
auto [iter2, success2] = objects_.findIf(objf.
name()); !success2 )
43 auto ptr = IOobject::make_object_t<T>(std::forward<Args>(args)...);
44 auto [iter, success] = objects_.emplace(std::piecewise_construct,
45 std::forward_as_tuple(objf.
name()),
46 std::forward_as_tuple(objf,
this, std::move(ptr) )
49 return iter->second.template getObject<T>();
54 "IOobject " << objf.
name() <<
" already exists in repository " << name() <<
endl;
56 return iter2->second.template getObject<T>();
61 template<
typename T,
typename... Args>
65 if(
auto [iter, success] = objects_.findIf(objf.
name()); !success )
67 return emplaceObject<T>(objf, std::forward<Args>(args)... );
72 if( checkForObjectType<T>( iter->second ) )
74 return iter->second.template getObject<T>();
79 " IOobject "<< objf.
name() <<
" already exist in the repository "<< name() <<
80 ". Trying to return the existing object but there is a type mismatch. \n"<<
81 reportTypeError<T>( iter->second );
83 return iter->second.template getObject<T>();
88 template<
typename T,
typename... Args>
92 eraseObject(objf.
name());
94 auto ptr = IOobject::make_object_t<T>(std::forward<Args>(args)...);
95 auto [iter, success] = objects_.emplace(std::piecewise_construct,
96 std::forward_as_tuple(objf.
name()),
97 std::forward_as_tuple(objf,
this, std::move(ptr) )
100 return iter->second.template getObject<T>();
108 eraseObject(ptr->name());
111 auto [iter, success] = objects_.emplace
113 std::piecewise_construct,
114 std::forward_as_tuple(ptr->name()),
115 std::forward_as_tuple(objf,
this, std::move(ptr))
117 return iter->second.template getObject<T>();
120 return ptr().getObject<T>();
129 eraseObject(objf.
name());
131 auto [iter, success] = objects_.emplace
133 std::piecewise_construct,
134 std::forward_as_tuple(objf.
name()),
135 std::forward_as_tuple(objf,
this, std::move(ptr))
137 return iter->second.template getObject<T>();
140 return ptr().getObject<T>();
148 if(
auto [iter, success] = objects_.findIf(name); success )
151 if( checkType<T>(iter->second) )
153 return iter->second.template getObject<T>();
158 reportTypeError<T>(iter->second)<<
endl;
160 return iter->second.template getObject<T>();
167 "Object with name " << name <<
" is not found in repository " << this->name()<<
endl <<
168 "list of avaiable objest is \n" << objectNames();
170 return iter->second.template getObject<T>();