12 #ifndef SST_CORE_CORE_SHAREDREGIONIMPL_H 
   13 #define SST_CORE_CORE_SHAREDREGIONIMPL_H 
   15 #include <sst/core/sst_types.h> 
   16 #include <sst/core/warnmacros.h> 
   24 #include <sst/core/sharedRegion.h> 
   25 #include <sst/core/serialization/serializable.h> 
   30 class SharedRegionImpl;
 
   39     ChangeSet(
size_t offset, 
size_t length,  uint8_t *data = NULL) : offset(offset), length(length), data(data) { }
 
   50         ser & SST::Core::Serialization::array(data,length);
 
   70         RegionMergeInfo(
int rank, 
const std::string &key) : rank(rank), key(key) { }
 
   73         virtual bool merge(
RegionInfo *UNUSED(ri)) { 
return true; }
 
   74         const std::string& getKey()
 const { 
return key; }
 
   93             length(length), data(data)
 
   97             bool ret = ri->getMerger()->
merge((uint8_t*)ri->getMemory(), (
const uint8_t*)data, length);
 
  103             RegionInfo::RegionMergeInfo::serialize_order(ser);
 
  112             ser & SST::Core::Serialization::array(data,length);
 
  122         std::vector<ChangeSet> changeSets;
 
  128             changeSets(changeSets)
 
  131             return ri->getMerger()->
merge((uint8_t*)ri->getMemory(), ri->getSize(), changeSets);
 
  135             RegionInfo::RegionMergeInfo::serialize_order(ser);
 
  152     std::vector<SharedRegionImpl*> sharers;
 
  156     std::vector<ChangeSet> changesets;
 
  164     RegionInfo() : realSize(0), apparentSize(0), memory(NULL),
 
  165         shareCount(0), publishCount(0), merger(NULL),
 
  166         didBulk(false), initialized(false), ready(false)
 
  169     bool initialize(
const std::string &key, 
size_t size, uint8_t initByte, 
SharedRegionMerger *mergeObj);
 
  170     bool isInitialized()
 const { 
return initialized; }
 
  171     bool isReady()
 const { 
return ready; }
 
  173     SharedRegionImpl* addSharer(SharedRegionManager *manager);
 
  174     void removeSharer(SharedRegionImpl *sri);
 
  177     void modifyRegion(
size_t offset, 
size_t length, 
const void *data);
 
  180     void updateState(
bool finalize);
 
  182     const std::string& getKey()
 const { 
return myKey; }
 
  183     void* getMemory() { didBulk = 
true; 
return memory; }
 
  184     const void* getConstPtr()
 const { 
return memory; }
 
  185     size_t getSize()
 const { 
return apparentSize; }
 
  186     size_t getNumSharers()
 const { 
return shareCount; }
 
  188     bool shouldMerge()
 const { 
return (NULL != merger); }
 
  189     SharedRegionMerger* getMerger() { 
return merger; }
 
  193     void setProtected(
bool readOnly);
 
  203         published(
false), region(region)
 
  206     bool isPublished()
 const { 
return published; }
 
  207     void setPublished() { published = 
true; }
 
  208     RegionInfo* getRegion()
 const { 
return region; }
 
  217         std::vector<int> tgtRanks;
 
  218         std::vector<char> sendBuffer;
 
  221     std::map<std::string, RegionInfo> regions;
 
  225     void modifyRegion(
SharedRegion *sr, 
size_t offset, 
size_t length, 
const void *data) 
override;
 
  227     const void* getConstPtr(
const SharedRegion *sr) 
const override;
 
  233     virtual SharedRegion* getLocalSharedRegion(
const std::string &key, 
size_t size, uint8_t initByte = 0) 
override;
 
  234     virtual SharedRegion* getGlobalSharedRegion(
const std::string &key, 
size_t size, 
SharedRegionMerger *merger = NULL, uint8_t initByte = 0) 
override;
 
  237     virtual bool isRegionReady(
const SharedRegion*) 
override;
 
  238     virtual void shutdownSharedRegion(
SharedRegion*) 
override;
 
  240     void updateState(
bool finalize) 
override;
 
Definition: sharedRegion.h:81
Definition: sharedRegionImpl.h:213
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:35
Definition: sharedRegionImpl.h:32
Definition: sharedRegionImpl.h:197
Utility class to define how to merge multiple pieces of shared memory regions Useful in the multi-MPI...
Definition: sharedRegion.h:30
RegionMergeInfo * getMergeInfo()
Returns the size of the data to be transferred. 
Definition: sharedRegion.cc:190
Definition: serializable.h:110
Definition: sharedRegionImpl.h:60
virtual bool merge(uint8_t *target, const uint8_t *newData, size_t size)
Merge the data from 'newData' into 'target'. 
Definition: sharedRegionImpl.h:119
Definition: sharedRegionImpl.h:62
Definition: sharedRegion.h:60
Definition: sharedRegionImpl.h:85