ML Reference
mlHost.h
Go to the documentation of this file.
1/*************************************************************************************
2**
3** Copyright 2007, MeVis Medical Solutions AG
4**
5** The user may use this file in accordance with the license agreement provided with
6** the Software or, alternatively, in accordance with the terms contained in a
7** written agreement between the user and MeVis Medical Solutions AG.
8**
9** For further information use the contact form at https://www.mevislab.de/contact
10**
11**************************************************************************************/
12
13#ifndef ML_HOST_H
14#define ML_HOST_H
15
26
27//ML-includes
28#include "mlInitSystemML.h"
29#include "mlPagedImage.h"
30#include "mlSubImage.h"
31#include "mlFields.h"
32#include "mlWaitCondition.h"
33#include "mlThread.h"
34
35ML_START_NAMESPACE
36
38class Module;
39class ThreadDataClass;
40class ProcessAllPagesHandler;
41class ClassicHost;
42class PageRequestProcessorBase;
43class PageRequestProcessor;
44class ProcessingTimeLine;
45class GetTileJobBase;
47
49#define ML_HOST_UPDATE_PROGRESS_INTERVAL 0.3
50
51//-------------------------------------------------------------------------
113//-------------------------------------------------------------------------
115{
116
117public:
118
122 friend class ClassicHost;
123
124 //------------------------------------------------------
127 //------------------------------------------------------
131
136
138 virtual ~Host();
140
141 //--- Progress Callback
143 void setProgressCB(void *userData, MLHostProgressCB *callback);
144
147
150
157 void updateProgress(const char* info1, const char* info2);
158
159 //--- Break check callback
161 void setBreakCheckCB(void *userData, MLHostBreakCheckCB *callback);
162
165
168
169
172 bool shouldTerminate() const;
173
179
182
184 static void destroyDefaultHost();
185
190 void setMaxNumThreads(MLint32 numThreads);
191
194
200
202 MLint32 getRestrictMaxNumThreads() const { return _restrictMaxNumThreads; }
203
206
207protected:
211
216
217public:
218 //------------------------------------------------------
221 //------------------------------------------------------
222
246 [[nodiscard]]
248 SubImageBox location,
249 MLDataType dataType,
250 void** data,
251 const ScaleShiftData& scaleShiftData = ScaleShiftData(),
252 MLRequestProgressCB* progressCallback = nullptr,
253 void* progressCallbackUserData = nullptr);
254
282 [[nodiscard]]
284 SubImage& subImage,
285 const ScaleShiftData& scaleShiftData = ScaleShiftData(),
286 MLRequestProgressCB* progressCallback = nullptr,
287 void* progressCallbackUserData = nullptr);
288
292 void freeTile(void* data);
294
295 //---------------------------------------------------------------------------
298 //---------------------------------------------------------------------------
301 //---------------------------------------------------------------------------
302 [[nodiscard]]
304 MLint outputIndex,
305 SubImageBox region = SubImageBox(),
306 MLRequestProgressCB* progressCallback = nullptr,
307 void* progressCallbackUserData = nullptr);
308
309 //------------------------------------------------------------------------------
313 //------------------------------------------------------------------------------
314 [[nodiscard]]
316 ProcessAllPagesHandler& handler,
317 SubImageBox region=SubImageBox(),
318 MLRequestProgressCB* progressCallback = nullptr,
319 void* progressCallbackUserData = nullptr);
320
321 //------------------------------------------------------------------------------
324 //------------------------------------------------------------------------------
325 [[nodiscard]]
327 MLRequestProgressCB* progressCallback = nullptr,
328 void* progressCallbackUserData = nullptr);
329
330
331 //-------------------------------------------------------------------------------------------------
338 [[nodiscard]]
340 MLRequestProgressCB* progressCallback = nullptr,
341 void* progressCallbackUserData = nullptr);
342
343 //-------------------------------------------------------------------------------------------------
350 [[nodiscard]]
351 MLErrorCode processAllPagesWithInputImages(const std::vector<PagedImage*>& inputImages, ProcessAllPagesHandler& handler, const SubImageBox& region= SubImageBox(),
352 MLRequestProgressCB* progressCallback = nullptr,
353 void* progressCallbackUserData = nullptr);
354
356
357 //------------------------------------------------------
360 //------------------------------------------------------
361
370 [[nodiscard]]
372
379 [[nodiscard]]
382
384 static inline unsigned int getMemoryManagerId() { return _memoryManagerId; }
385
388 static SubImageBox calculateInputSubImageBoxDebug(Module& module, int inIndex, const SubImageBox& outputSubImageBox, int outputIndex);
389
391 ClassicHost* getClassicHostDebug() { return _classicHost; }
392
394 void setUseClassicHost(bool flag);
395
397 bool getUseClassicHost() const { return _useClassicMLHost; }
398
401
404
406 void enableTimeLineProfiling(bool flag);
407
408private:
410
411 // ------------------------------------------------------------------------------
413 // ------------------------------------------------------------------------------
414 [[nodiscard]]
415 MLErrorCode _processAllPages(Module& module,
416 MLint outputIndex,
417 SubImageBox region,
418 ProcessAllPagesHandler* handler,
419 bool clearPages = true,
420 MLRequestProgressCB* progressCallback = nullptr,
421 void* progressCallbackUserData = nullptr);
422
426 MLErrorCode _requiredTypesRegisteredAndSupported(PagedImage* outputImage);
427
431 [[nodiscard]]
432 MLErrorCode _updateImageProperties(PagedImage* outputImage);
433
439 bool tryDirectCacheAccess(PagedImage& inImage, const SubImageBox& box, MLDataType dataType, const ScaleShiftData& scaleShiftData, void** data, MLErrorCode& resultCode);
440
441 //------------------------------------------------------
444 //------------------------------------------------------
446 void* _userData;
447
449 MLHostProgressCB* _progressCB;
450
452 bool _insideUpdateProgress;
453
455 GetTileJobBase* _currentTopLevelRequest;
456
458 void* _breakCheckUserData;
459
461 MLHostBreakCheckCB* _breakCheckCB;
462
464 MLint32 _maxNumThreads;
465
467 MLint32 _restrictMaxNumThreads;
468
470 MLuint32 _isProcessingActive;
471
474 static unsigned int _memoryManagerId;
475
477 static Host* _instance;
478
480 ClassicHost* _classicHost;
481
483 PageRequestProcessorBase* _processor;
484
485 bool _useClassicMLHost;
486
488
489}; //End of class Host
490
491ML_END_NAMESPACE
492
493//-----------------------------------------------------------------------------------
494// Stream output for std::ostream
495//-----------------------------------------------------------------------------------
496namespace std {
497
499 MLEXPORT ostream& operator<<(ostream& s, const ML_NAMESPACE::Host &host);
500
501}
502
503#endif //of __mlHost_H
Classic ML host used internally to calculate getTile and processAllPages requests.
Base class for all fields used in the ML.
Definition mlField.h:73
Base class for TileRequest based jobs.
The Host is the central image processing class in the ML.
Definition mlHost.h:115
MLErrorCode processAllPages(Module &module, ProcessAllPagesHandler &handler, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Processes input images with a ProcessAllPagesHandler on a temporary output image (which allocates no ...
void setMaxNumThreads(MLint32 numThreads)
Sets maximum number of permitted worker threads to numThreads.
MLErrorCode getTile(PagedImage &outputImage, SubImage &subImage, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Requests the image region subImage.getBox() from output image outputImage.
ProcessingTimeLine & getProcessingTimeLine()
Get access to the processing time line.
static void registerWithMemoryManager()
Registers the Host as library using the memory manager and initializes the memory manager id.
Host()
Constructor.
Field * getPressedNotifyField()
Checks if a notify button was pressed (outside of normal notification) It returns the notify field or...
bool shouldTerminate() const
Checks if current calculation should be terminated.
MLErrorCode processAllPagesWithInputImage(PagedImage &inputImage, ProcessAllPagesHandler &handler, const SubImageBox &region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Processes all pages as specified by the handler using inputImage as single input.
void * getProgressCBUserData() const
Returns user data of current callback for progress/busy cursor updates.
MLint32 getMaxNumThreads() const
Returns maximum number of permitted worker threads.
void * getBreakCheckCBUserData() const
Returns user data of current callback for break checking.
bool getUseClassicHost() const
Returns if classic ML host is used.
Definition mlHost.h:397
MLHostProgressCB * getProgressCB() const
Returns current callback for progress/busy cursor updates.
MLHostBreakCheckCB * getBreakCheckCB() const
Returns current callback for break checking.
void _unsetProcessingActive()
Disables the flag that indicates active image processing.
void _setProcessingActive()
Enables the flag that indicates active image processing.
void enableTimeLineProfiling(bool flag)
Enable/disable time line profiling.
void freeTile(void *data)
Frees (image) memory which has been allocated with any getTile() function of the Host class.
MLErrorCode updateImageProperties(Module &module, MLint outputIndex)
/deprecated Updates the module graph under module and including the output image at outputIndex of mo...
void setUseClassicHost(bool flag)
Enable/disable usage of classic ML host.
static unsigned int getMemoryManagerId()
Returns the memory manager id that is used for allocation of memory by the ML.
Definition mlHost.h:384
MLErrorCode processMissingPages(Module &module, MLint outputIndex, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
See Module::processMissingPages() for details on this method.
ClassicHost * getClassicHostDebug()
Get access to classic ML host (for debugging purposes only!)
Definition mlHost.h:391
void updateProgress(const char *info1, const char *info2)
Calls the busy cursor/progress callback if it is set.
static SubImageBox calculateInputSubImageBoxDebug(Module &module, int inIndex, const SubImageBox &outputSubImageBox, int outputIndex)
This is a method that allows access to the (otherwise protected) calculateInputSubImageBox of a modul...
MLErrorCode processAllPagesWithInputImages(const std::vector< PagedImage * > &inputImages, ProcessAllPagesHandler &handler, const SubImageBox &region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Processes all pages as specified by the handler using inputImages as inputs.
void setBreakCheckCB(void *userData, MLHostBreakCheckCB *callback)
Sets callback for break checking.
PageRequestProcessor * getPageRequestProcessor()
Get the currently responsible page request processor.
static Host & getDefaultHost()
Return a reference to the Host singleton.
void setProgressCB(void *userData, MLHostProgressCB *callback)
Sets callback for progress/busy cursor updates.
static void destroyDefaultHost()
Destroys and cleans up allocated memory of default Host.
MLErrorCode getTile(PagedImage &outputImage, SubImageBox location, MLDataType dataType, void **data, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Requests the image region location from the image outputImage.
virtual ~Host()
Destructor.
void setRestrictMaxNumThreads(MLint32 numThreads)
Restricts the maximum number of permitted worker threads to be lower or equal to numThreads.
MLint32 getRestrictMaxNumThreads() const
Get the restriction for setMaxNumThreads().
Definition mlHost.h:202
MLuint32 isProcessingActive() const
Non-zero return values mean that (image) processing is currently active.
MLErrorCode updateImageProperties(PagedImage &outputImage)
Updates the module graph under outputImage->getModule() and including outputImage.
MLErrorCode processAllPages(Module &module, MLint outputIndex, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
See Module::processAllPages() for details on this method.
Base class for an image processing module of the ML.
Definition mlModule.h:151
A multi-threaded processor that takes one or even multiple tile requests and can process them iterati...
Base class for single and multi-threaded processor.
Abstract base class for page request processors.
Class which represents an image, which manages properties of an image and image data which is located...
Base class for handlers that are used for the Module::processAllPages facility.
Stores a processing time line for multiple threads.
A single-threaded processor that takes one or even multiple tile requests and can process them iterat...
This class manages/represents a rectangular 6d image region which is organized linearly in memory.
Definition mlSubImage.h:75
#define ML_DISALLOW_COPY_AND_ASSIGN(className)
Defines basic macros.
Definition mlMacros.h:23
MLint32 MLDataType
MLDataType.
Definition mlTypeDefs.h:596
MLint32 MLErrorCode
Type of an ML Error code.
Definition mlTypeDefs.h:716
#define MLEXPORT
To export symbols from a dll/shared object, we need to mark them with the MLEXPORT symbol.
MLint32 MLHostBreakCheckCB(void *usrData, void **hitField)
unsigned int MLuint32
Definition mlTypeDefs.h:185
void MLRequestProgressCB(void *usrData, double progress)
MLint64 MLint
A signed ML integer type with at least 64 bits used for index calculations on very large images even ...
Definition mlTypeDefs.h:490
signed int MLint32
Definition mlTypeDefs.h:161
void MLHostProgressCB(void *usrData, const char *info1, const char *info2)
STL namespace.
MLEXPORT std::ostream & operator<<(std::ostream &s, const ml::Field &v)
Overloads the operator "<<" for stream output of Field objects.