IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
BaseAction.h
1 // BaseAction.h:
3 // -------------
4 //
14 
15 #ifndef __IPSDKCORE_BASEACTION_H__
16 #define __IPSDKCORE_BASEACTION_H__
17 
18 // suppression warnings
19 // warning C4251: 'boost::enable_shared_from_this<T>::weak_this_' : class 'boost::weak_ptr<T>' needs to have dll-interface to be used by clients of class 'boost::enable_shared_from_this<T>'
20 #pragma warning (push)
21 #pragma warning (disable : 4251)
22 
27 #include <IPSDKCore/Processing/Priority/NormalPriority.h>
28 #include <IPSDKBaseData/ToolTip/BaseToolTip.h>
29 #include <IPSDKSerialization/Engine/SerializationObjectWithGuid.h>
30 #include <IPSDKUtil/Tools/Guid.h>
31 #include <IPSDKUtil/Tools/Chrono.h>
32 #include <boost/enable_shared_from_this.hpp>
33 #include <boost/thread/mutex.hpp>
34 #include <boost/thread/condition_variable.hpp>
35 #include <boost/optional/optional.hpp>
36 
37 namespace ipsdk {
38 namespace core {
39 
42 
44  public BaseToolTip,
45  public boost::enable_shared_from_this<BaseAction>
46 {
47  // friend class for protected accesses
48  friend class LocalActionRequest;
49  friend class RemoteActionRequest;
50  friend class PendingActionRequest;
51 
52  // declare serial class
54 
55 protected:
57  BaseAction();
58 
59 public:
61  virtual ~BaseAction() = 0;
62 
63 // methods
64 public:
66  virtual bool isComplexAction() const = 0;
67 
69  bool isInit() const;
70 
73  eExecutionStatus getStatus() const;
74 
76  const ePriority& getActionPriority() const;
77 
81  void setActionPriority(const BasePriority& actionPriority);
82 
87  void addCompletionCB(const ActionCompletionCB& completionCB);
88 
93 
95  bool hasSocketGuid() const;
96 
98  void setSocketGuid(const Guid& socketGuid);
99 
103  const Guid& getSocketGuid() const;
105 
109  // \return execution result
110  ExecResult run(const eSynchroType& synchroType = eSynchroType::eST_Default);
111 
114  void requestCancellation();
115 
118  bool isCancellationRequested() const;
119 
123  void waitForCompletion();
124 
128  ExecResult getActionResult() const;
129 
134  double getFullActionDuration() const;
135 
140  double getExecutionActionDuration() const;
141 
148  BoolResult clear();
149 
150 protected:
155  bool isSynchronismForced() const;
156 
166  BoolResult initBase(const BasePriority& defaultPriority = NormalPriority());
167 
172  virtual BoolResult globalCleanDerived() {return true;}
173 
178  IPSDK_ENUM(eCleanReason,
179  (eCR_Failure)
180  (eCR_Exception)
181  (eCR_Cancellation)
182  )
183 
184 
185  virtual BoolResult cleanOnErrorDerived(const eCleanReason& cleanReason) {return true;}
192 
198  (eERD_Success)
199  (eERD_Failure)
200  (eERD_Canceled)
201  (eERD_Running)
202  )
203 
204 
206 
209  virtual ExecResultDerived runDerived() = 0;
210 
212  virtual void requestCancellationdDerived() {}
218  void notifyCompletion(const ExecResult& bCompletionResult);
219 
221  ExecResultDerived toExecResultDerived(const ExecResult& execResult) const;
222 
224  virtual BoolResult syncInputDataDerived(const Guid& processingSocketGuid) {return true;}
227  virtual BoolResult syncOutputDataDerived(const Guid& processingSocketGuid) {return true;}
228 
230  virtual void clearInputData() {}
231 
233  virtual void clearIntermediateData() {}
234 
237  virtual void clearOutputData() {}
238 
239 private:
241  BoolResult syncInputData(const Guid& processingSocketGuid);
242 
244  BoolResult syncOutputData(const Guid& processingSocketGuid);
245 
250  BoolResult globalClean();
251 
258  BoolResult cleanOnError(const eCleanReason& cleanReason);
259 
262  ExecResult syncRun(bool bForceSynchronous);
263 
268  ExecResult asyncRun();
269 
271  void processCancellation();
272 
274  void processRunException(const std::string& msg);
275 
280  void addCompletionCB(const ActionCompletionCB& completionCB,
281  bool bPushBack);
282 
284  void callCompletionCB();
285 
286 // attributes
287 private:
289  eExecutionStatus _actionStatus;
290 
292  ePriority _actionPriority;
293 
295  ActionCompletionCBColl _completionCBColl;
296 
298  ExecResult _bResult;
299 
301  Chrono _fullActionChrono;
302 
304  double _fullActionDuration;
305 
308  Chrono _executionActionChrono;
309 
312  double _executionActionDuration;
313 
315  boost::optional<Guid> _pSocketGuid;
316 
318  bool volatile _bCancellationRequested;
319 
321  mutable boost::mutex _mutex;
322 
324  boost::condition_variable _condition;
325 
327  bool _bForceSynchronous;
328 
330  bool _bInit;
331 };
332 
335 
336 inline bool
337 BaseAction::isInit() const
338 {
339  return _bInit;
340 }
341 
344 
345 } // end of namespace core
346 } // end of namespace ipsdk
347 
348 #pragma warning (pop)
349 
350 #endif // __IPSDKCORE_BASEACTION_H__
eSynchroType
Enumerate describing synchronization type for execution.
Definition: ActionTypes.h:37
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Synchronism of execution will be defined by object prefered state.
Definition: ActionTypes.h:46
Header part of macros set for action class declaration.
eExecutionResultDerived
Enumerate describing execution status after call to runDerived.
Definition: BaseAction.h:205
virtual BoolResult globalCleanDerived()
method called to clean execution data in derived class before initialization or during call to clear ...
Definition: BaseAction.h:172
#define IPSDK_DECLARE_ABSTRACT_SERIAL_WITHOUT_COPY(libraryName, className)
macro enabling serialization on abstract class
Definition: SerializationHdrMacro.h:97
Definition of import/export macro for library.
Base class for priority encapsulation.
Definition: BasePriority.h:32
bool isInit() const
retrieve object initialization flag
Definition: BaseAction.h:350
Serialization object with builtin guid.
Definition: SerializationObjectWithGuid.h:26
#define IPSDKCORE_API
Import/Export macro for library IPSDKCore.
Definition: IPSDKCoreExports.h:27
eCleanReason
Enumerate describing clean reason.
Definition: BaseAction.h:180
Class encapsulating an auto initialized uuid.
Definition: Guid.h:27
Class used for pending action request encapsulation.
Definition: PendingActionRequest.h:39
ePriority
Enumerate describing priority.
Definition: PriorityTypes.h:32
Predefined types for processing management.
std::list< ActionCompletionCB > ActionCompletionCBColl
collection of functions callback used to notify of action completion
Definition: ActionTypes.h:60
boost::function1< void, const ActionPtr & > ActionCompletionCB
function callback used to notify of action completion
Definition: ActionTypes.h:57
Class used for remote action request encapsulation.
Definition: RemoteActionRequest.h:37
Class used for local action request encapsulation.
Definition: LocalActionRequest.h:32
Chronometer class for library processing time evaluation.
Definition: Chrono.h:33
eExecutionStatus
Enumerate describing an execution status.
Definition: ProcessingTypes.h:33
Class used to encapsulate normal priority.
Definition: NormalPriority.h:26
Base class for objects with name and tool tip informations.
Definition: BaseToolTip.h:27
Predefined types for actions management.
Base class for library actions.
Definition: BaseAction.h:43
#define IPSDK_ENUM(enumTypeStr, enumSeq)
macro allowing to declare an enumerate for library
Definition: EnumMacros.h:26