IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
BaseProcessorDispatcher.h
1 // BaseProcessorDispatcher.h:
3 // --------------------------
4 //
14 
15 #ifndef __IPSDKBASEPROCESSING_BASEPROCESSORDISPATCHER_H__
16 #define __IPSDKBASEPROCESSING_BASEPROCESSORDISPATCHER_H__
17 
18 // suppression warnings
19 // warning C4251: 'ipsdk::processor::BaseProcessorDispatcher::_processorRulePolicy' : class 'ipsdk::processor::eProcessorRulePolicy' needs to have dll-interface to be used by clients of class 'ipsdk::processor::BaseProcessorDispatcher'
20 #pragma warning (push)
21 #pragma warning (disable : 4251)
22 
26 #include <IPSDKCore/Processing/ActionProvider/BaseActionProvider.h>
27 #include <IPSDKUtil/Tools/ProcessingResult.h>
29 #include <boost/thread/mutex.hpp>
30 
31 namespace ipsdk {
32 namespace processor {
33 
36 
38 {
39 public:
43  virtual ~BaseProcessorDispatcher() = 0;
45 
46 // methods
47 public:
50  void setProcessorRulePolicy(const eProcessorRulePolicy& processorRulePolicy);
51  const eProcessorRulePolicy& getProcessorRulePolicy() const;
53 
58  BoolResult setProcessorDispatchPolicy(const ProcessorDispatchPolicy& processorDispatchPolicy);
59 
62  const ProcessorDispatchPolicy& getProcessorDispatchPolicy() const;
63 
65  virtual const std::string& getProcessorName() const = 0;
66 
68  virtual const std::string& getProcessorToolTip() const = 0;
69 
73  ElementsSplitInfoConstPtr getElementsSplitInfo() const;
74 
76  ipUInt64 getNbNotReleased() const;
77 
79  ipUInt64 getNbPendingElements() const;
80 
82  ipUInt64 getNbProcessedElements() const;
83 
85  RemoteDataSize getNotReleasedDataSizes() const;
86 
88  ipUInt64 getRemainingDataMemorySize() const;
89 
90 protected:
98  BoolResult initBase(const core::BasePriority& actionPriority,
99  const ElementsLocationInfo& elementsLocationInfo,
100  const GuidSet& broadcastSocketGuids,
101  const ipUInt64 nbMinEltsPerSplit,
102  const ipUInt64 nbMaxEltsPerSplit,
103  const ipUInt64 minMemSzPerThread = 0,
104  const ipUInt64 maxMemSzPerThread = NumericLimits<ipUInt64>::max(),
105  const ipUInt64 nbMaxThreads = 0);
106 
108  virtual ProcessorPtr createProcessor() const = 0;
109 
112  virtual BoolResult initAttributes(const ElementsRange& elementsRange,
113  const core::BaseRequestOrigin& requestOrigin,
114  const ProcessorPtr& pProcessor) = 0;
115 
118  void broadcastToRemotes();
119 
120 private:
125  core::QueryResult queryNextAction(const core::BaseRequestOrigin& requestOrigin,
126  core::ActionRequestPtr& pActionRequest,
127  bool& bProcessCompletionCheck,
128  SerializationObjectPtr& pCbAdditionalData);
129 
131  core::QueryResult acquireNextProcessingRange(const core::BaseRequestOrigin& requestOrigin,
132  ElementsRange& elementsRange,
133  ipUInt64& dataMemorySize);
134 
137  BoolResult createProcessor(const ElementsRange& elementsRange,
138  const core::BaseRequestOrigin& requestOrigin,
139  ProcessorPtr& pProcessor);
140 
143  bool hasPendingAction() const;
144 
148  BoolResult notifyDerived(const core::ActionRequestPtr& pActionRequest,
149  const SerializationObjectConstPtr& pCbAdditionalData,
150  bool& bRestartProvider);
151 
152 // attributes
153 private:
156  eProcessorRulePolicy _processorRulePolicy;
157 
159  ElementsLocationInfoPtr _pElementsLocationInfo;
160 
162  ElementsSplitInfoPtr _pElementsSplitInfo;
163 
164  // flag indicating whether local processing is allowed for dispatcher
165  bool _bLocalProcessingAllowed;
166 
167  // flag indicating whether remote processing is allowed for dispatcher
168  bool _bRemoteProcessingAllowed;
169 
171  GuidSet _broadcastSocketGuids;
172 
178  GuidSet _overSuppliedSocketGuids;
179 
181  ProcessorDispatchPolicyPtr _pProcessorDispatchPolicy;
182 };
183 
186 
187 } // end of namespace processor
188 } // end of namespace ipsdk
189 
190 #pragma warning (pop)
191 
192 #endif // __IPSDKBASEPROCESSING_BASEPROCESSORDISPATCHER_H__
Predefined types for elements informations management.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
#define IPSDKBASEPROCESSING_API
Import/Export macro for library IPSDKBaseProcessing.
Definition: IPSDKBaseProcessingExports.h:27
boost::shared_ptr< const BaseSerializationObject > SerializationObjectConstPtr
shared pointer to a const base serialization object
Definition: SerializationTypes.h:32
uint64_t ipUInt64
Base types definition.
Definition: BaseTypes.h:55
Base class for priority encapsulation.
Definition: BasePriority.h:32
boost::shared_ptr< const ElementsSplitInfo > ElementsSplitInfoConstPtr
shared pointer to const elements split informations
Definition: ElementsInfoTypes.h:61
std::map< Guid, ipUInt64 > RemoteDataSize
collection of guid associated to a data size
Definition: ElementsInfoTypes.h:46
Definition: NumericLimits.h:27
Predefined types for processor management.
Base class for action providers.
Definition: BaseActionProvider.h:54
boost::shared_ptr< ElementsSplitInfo > ElementsSplitInfoPtr
shared pointer to elements split informations
Definition: ElementsInfoTypes.h:58
boost::shared_ptr< BaseActionRequest > ActionRequestPtr
shared pointer for action requests
Definition: ActionRequestTypes.h:52
Class allowing to store information about elements range (start offset and number of elements) ...
Definition: ElementsRange.h:27
boost::shared_ptr< ElementsLocationInfo > ElementsLocationInfoPtr
shared pointer to elements location informations
Definition: ElementsInfoTypes.h:52
boost::shared_ptr< BaseSerializationObject > SerializationObjectPtr
shared pointer to a base serialization object
Definition: SerializationTypes.h:23
Definition of import/export macro for library.
Base class for request origin description.
Definition: BaseRequestOrigin.h:28
boost::shared_ptr< BaseProcessor > ProcessorPtr
shared pointer to processor class
Definition: ProcessorTypes.h:106
std::set< Guid > GuidSet
collection of unique ordered guid
Definition: GuidTypes.h:27
Base class for processor operations dispatching.
Definition: BaseProcessorDispatcher.h:37
Class encapsuling dispatch policy for processor dispatcher classes.
Definition: ProcessorDispatchPolicy.h:33
Class allowing to store elements location informations.
Definition: ElementsLocationInfo.h:32
eProcessorRulePolicy
Enumerate describing processor rule policy.
Definition: ProcessorTypes.h:65
boost::shared_ptr< ProcessorDispatchPolicy > ProcessorDispatchPolicyPtr
shared pointer to ProcessorDispatchPolicy object
Definition: ProcessorDispatchPolicyTypes.h:49