53template<
typename T>
const char*
StorageType() {
return "Unknown"; }
95template<
typename T>
class Storage :
public std::enable_shared_from_this<Storage<T>> {
96 const char* type = StorageType<object_type>();
98 std::vector<shared_ptr<T>> fish;
100 const shared_ptr<T> empty =
nullptr;
125 const shared_ptr<T>&
at(
unsigned)
const;
127 const std::vector<shared_ptr<T>>&
get()
const;
129 [[nodiscard]]
bool find(
unsigned)
const;
139 [[nodiscard]]
size_t size()
const;
142template<
typename T>
typename Storage<T>::const_iterator
Storage<T>::cbegin()
const {
return pond.cbegin(); }
144template<
typename T>
typename Storage<T>::const_iterator
Storage<T>::cend()
const {
return pond.cend(); }
148template<
typename T>
typename Storage<T>::iterator
Storage<T>::end() {
return pond.end(); }
151 auto flag = pond.insert({I->get_tag(), I}).second;
159template<
typename T>
const shared_ptr<T>&
Storage<T>::at(
const unsigned L)
const {
return pond.contains(L) ? pond.at(L) : empty; }
161template<
typename T>
const std::vector<shared_ptr<T>>&
Storage<T>::get()
const {
return fish; }
163template<
typename T>
bool Storage<T>::find(
const unsigned L)
const {
return pond.contains(L); }
167 return pond.unsafe_erase(L) == 1;
169 return pond.erase(L) == 1;
174 if(find(L)) pond[L]->enable();
178 if(find(L)) pond[L]->disable();
183 fish.reserve(size());
184 for(
const auto& [tag, obj] : pond)
185 if(obj->is_active()) fish.push_back(obj);
186 else bait.insert(tag);
190 for(
const auto& I : pond) I.second->enable();
205template<
typename T>
typename Storage<T>::const_iterator
cbegin(
const Storage<T>&
S) {
return S.cbegin(); }
207template<
typename T>
typename Storage<T>::const_iterator
cend(
const Storage<T>&
S) {
return S.cend(); }
211template<
typename T>
typename Storage<T>::iterator
end(
Storage<T>&
S) {
return S.end(); }
213template<
typename T>
using dual = std::pair<unsigned, shared_ptr<T>>;
void reset(const ExternalMaterialData *data, int *info)
Definition ElasticExternal.cpp:74
const char * StorageType< Criterion >()
Definition Storage.hpp:63
const char * StorageType()
Definition Storage.hpp:53
std::pair< unsigned, shared_ptr< T > > dual
Definition Storage.hpp:213
const char * StorageType< Modifier >()
Definition Storage.hpp:83
Storage< T >::iterator end(Storage< T > &S)
Definition Storage.hpp:211
const char * StorageType< Interaction >()
Definition Storage.hpp:77
const char * StorageType< Converger >()
Definition Storage.hpp:61
const char * StorageType< Element >()
Definition Storage.hpp:71
const char * StorageType< Constraint >()
Definition Storage.hpp:59
const char * StorageType< Orientation >()
Definition Storage.hpp:87
Storage< Domain > DomainStorage
Definition Storage.hpp:221
const char * StorageType< Expression >()
Definition Storage.hpp:57
const char * StorageType< Solver >()
Definition Storage.hpp:93
const char * StorageType< DomainBase >()
Definition Storage.hpp:69
const char * StorageType< Group >()
Definition Storage.hpp:73
const char * StorageType< Amplitude >()
Definition Storage.hpp:55
const char * StorageType< Load >()
Definition Storage.hpp:79
Storage< T >::const_iterator cend(const Storage< T > &S)
Definition Storage.hpp:207
Storage< T >::const_iterator cbegin(const Storage< T > &S)
Definition Storage.hpp:205
const char * StorageType< Integrator >()
Definition Storage.hpp:75
const char * StorageType< Domain >()
Definition Storage.hpp:67
const char * StorageType< Section >()
Definition Storage.hpp:91
const char * StorageType< Node >()
Definition Storage.hpp:85
Storage< T >::iterator begin(Storage< T > &S)
Definition Storage.hpp:209
const char * StorageType< Recorder >()
Definition Storage.hpp:89
const char * StorageType< Database >()
Definition Storage.hpp:65
const char * StorageType< Material >()
Definition Storage.hpp:81
An Amplitude class that can generate Amplitude pattern.
Definition Amplitude.h:59
A Constraint class.
Definition Constraint.h:36
The Converger class handles converger test to indicate if the iteration converges according to variou...
Definition Converger.h:44
A Criterion class.
Definition Criterion.h:38
A Database class is a top level container.
Definition Database.h:33
The DomainBase class is a template.
Definition DomainBase.h:94
A Domain class holds all FE model components.
Definition Domain.h:38
A Element class.
Definition Element.h:118
A Expression class represents a maths expression.
Definition Expression.h:34
The Group class.
Definition Group.h:36
The Integrator class is basically a wrapper of the DomainBase class with regard to some status changi...
Definition Integrator.h:46
Definition Interaction.h:65
A Load class.
Definition Load.h:37
A Material abstract base class.
Definition Material.h:114
A Modifier class.
Definition Modifier.h:36
The Node class holds the number of DoFs, coordinate, displacement, velocity and acceleration.
Definition Node.h:79
A Orientation class.
Definition Orientation.h:40
A Recorder class.
Definition Recorder.h:35
A Section class.
Definition Section.h:77
A Solver class defines solvers used in analysis.
Definition Solver.h:38
A candidate Storage class that stores FEM objects.
Definition Storage.hpp:95
bool insert(const shared_ptr< T > &)
Definition Storage.hpp:150
void reset()
Definition Storage.hpp:193
shared_ptr< T > & operator[](unsigned)
Definition Storage.hpp:157
bool find(unsigned) const
Definition Storage.hpp:163
void enable(unsigned)
Definition Storage.hpp:173
Storage & operator=(Storage &&)=delete
Storage(const Storage &)=delete
void enable()
Definition Storage.hpp:189
Storage & operator=(const Storage &)=delete
size_t size() const
Definition Storage.hpp:203
iterator end()
Definition Storage.hpp:148
const shared_ptr< T > & at(unsigned) const
Definition Storage.hpp:159
void clear()
Definition Storage.hpp:198
void update()
Definition Storage.hpp:181
const_iterator cend() const
Definition Storage.hpp:144
iterator begin()
Definition Storage.hpp:146
bool erase(unsigned)
Definition Storage.hpp:165
void disable(unsigned)
Definition Storage.hpp:177
const std::vector< shared_ptr< T > > & get() const
Definition Storage.hpp:161
Storage(Storage &&)=delete
T object_type
Definition Storage.hpp:109
const_iterator cbegin() const
Definition Storage.hpp:142
std::unordered_set< T > unordered_set
Definition container.h:55
std::unordered_map< T, D > unordered_map
Definition container.h:57
#define suanpan_warning(...)
Definition suanPan.h:348