12 #ifndef SST_CORE_CORE_SHARED_SHAREDOBJECT_H
13 #define SST_CORE_CORE_SHARED_SHAREDOBJECT_H
15 #include "sst/core/sst_types.h"
17 #include "sst/core/simulation.h"
18 #include "sst/core/serialization/serializable.h"
24 class Simulation_impl;
32 class SharedObjectDataManager;
60 virtual void clear() = 0;
68 const std::string&
getName() {
return name; }
76 ImplementVirtualSerializable(SharedObjectChangeSet);
99 const std::string&
getName() {
return name; }
131 bool fully_published;
135 mutable std::mutex mtx;
138 inline void check_lock_for_write(
const std::string& obj) {
141 CALL_INFO_LONG,1,
"ERROR: attempt to write to %s %s after init phase\n",obj.c_str(),name.c_str());
152 std::lock_guard<std::mutex>
lock(mtx);
153 int ret = share_count;
162 std::lock_guard<std::mutex>
lock(mtx);
197 fully_published(false),
210 std::map<std::string, SharedObjectData*> shared_data;
213 static std::mutex mtx;
214 static std::mutex update_mtx;
224 for (
auto x : shared_data ) {
229 template <
typename T>
230 T* getSharedObjectData(
const std::string name)
234 std::lock_guard<std::mutex> lock(mtx);
237 CALL_INFO,1,
"Attempting to initialize SharedObject %s after the init() phase\n",name.c_str());
239 auto obj = shared_data.find(name);
240 if ( obj == shared_data.end() ) {
242 auto ret =
new T(name);
243 shared_data[name] = ret;
248 auto obj_cast =
dynamic_cast<T*
>(obj->second);
250 if ( obj_cast ==
nullptr ) {
252 CALL_INFO,1,
"ERROR: Shared object %s requested with two different types\n",name.c_str());
258 void updateState(
bool finalize);
271 enum verify_type { VERIFY_UNINITIALIZED, FE_VERIFY, INIT_VERIFY, NO_VERIFY };
276 virtual ~SharedObject() {}
280 static SharedObjectDataManager manager;
283 void incPublishCount(SharedObjectData* data) {
284 data->incPublishCount();
287 int incShareCount(SharedObjectData* data) {
288 return data->incShareCount();
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:35
Definition: sharedObject.h:263
virtual SharedObjectChangeSet * getChangeSet()=0
Gets the changeset for this data on this rank.
virtual int getShareCount()
Get the number of sharers for this data.
Definition: sharedObject.h:116
void lock()
Called by the core when writing to shared regions is no longer allowed.
Definition: sharedObject.h:185
bool isFullyPublished()
Checks to see if all instances of this SharedObject have called publish().
Definition: sharedObject.h:109
const std::string & getName()
Get the name of the shared data the changeset should be applied to.
Definition: sharedObject.h:68
SharedObjectData(const std::string &name)
Constructor for SharedObjectData.
Definition: sharedObject.h:193
verify_type
Enum of verify types.
Definition: sharedObject.h:271
Definition: serializable.h:109
virtual void incPublishCount()
Increment the count of instances that have called publish.
Definition: sharedObject.h:161
void fatal(uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const
Output the fatal message with formatting as specified by the format parameter.
Definition: output.cc:155
Definition: sharedObject.h:208
Main control class for a SST Simulation.
Definition: simulation_impl.h:72
virtual int getPublishCount()
Get the number of instances that have called publish() on their instance of the shared object...
Definition: sharedObject.h:124
virtual int incShareCount()
Increment the count of sharers.
Definition: sharedObject.h:151
const std::string & getName()
Get the name of the SharedObject for this data.
Definition: sharedObject.h:99
virtual void clear()=0
Clears the data.
virtual void applyChanges(SharedObjectDataManager *UNUSED(manager))=0
Apply the changes to the name shared data.
static Output & getSimulationOutput()
Return the base simulation Output class instance.
Definition: simulation.cc:70
virtual void resetChangeSet()=0
Resets the changeset for this data on this rank.
This is the base class for holding data on changes made to the shared data on each rank...
Definition: sharedObject.h:39
Base class for holding SharedObject data.
Definition: sharedObject.h:87
virtual ~SharedObjectData()
Destructor for SharedObjectData.
Definition: sharedObject.h:204