00001 // Copyright CERN 2012 - Developed in collaboration with GSI 00002 00003 #ifndef ROLLING_MULTIPLEXING_MANAGER_H_ 00004 #define ROLLING_MULTIPLEXING_MANAGER_H_ 00005 00006 #include <fesa-core/Synchronization/AbstractMultiplexingManager.h> 00007 #include <fesa-core/Synchronization/RollingMultiplexingDataManager.h> 00008 00009 #include <string> 00010 00011 namespace fesa 00012 { 00013 00014 class MultiplexingContext; 00015 00021 class RollingMultiplexingManager : public AbstractMultiplexingManager 00022 { 00023 public: 00024 00031 int32_t requireSlot(MultiplexingContext& context); 00032 00039 int32_t getSlot(MultiplexingContext& context); 00040 00047 RollingMultiplexingManager(std::string& name, CycleDescriptor* timingDescriptor, 00048 RollingMultiplexingDataManager* dataManager); 00049 00050 00055 RollingMultiplexingManager(RollingMultiplexingDataManager* dataManager); 00056 00057 00062 int32_t getDepth(); 00063 00064 00065 00066 protected: 00067 00073 AbstractMultiplexingDataManager* getMultiplexingDataManager(); 00074 00081 int32_t getLastSlot(const std::string& cycleName); 00082 00089 int32_t requireSlot(const std::string& cycleName); 00090 00097 int32_t getLastSlot(int32_t cycleId); 00098 00105 int32_t requireSlot(int32_t cycleId); 00106 00107 private: 00108 00112 RollingMultiplexingDataManager* dataManager_; 00113 }; 00114 00115 inline int32_t RollingMultiplexingManager::getDepth() 00116 { 00117 return dataManager_->getDepth(); 00118 } 00119 00120 inline AbstractMultiplexingDataManager* RollingMultiplexingManager::getMultiplexingDataManager() 00121 { 00122 return dataManager_; 00123 } 00124 00125 } // fesa 00126 00127 #endif // ROLLING_MULTIPLEXING_MANAGER_H_