ML Reference
MeVis/Foundation/Sources/ML/include/host/mlPageRequest.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //-------------------------------------------------------------------------
00009 //-------------------------------------------------------------------------
00010 #ifndef __mlPageRequest_H
00011 #define __mlPageRequest_H
00012 
00013 // ML-includes
00014 #ifndef __mlInitSystemML_H
00015 #include "mlInitSystemML.h"
00016 #endif
00017 
00018 #include "mlPagedImage.h"
00019 
00020 ML_START_NAMESPACE
00021 
00022 class TileRequest;
00023 class PageRequestQueueInterface;
00024 
00025 //-------------------------------------------------------------------------------------------
00028 //-------------------------------------------------------------------------------------------
00029 class PageRequest
00030 {
00031 public:
00033   PageRequest(PagedImage* outputImage, MLint pageId);
00034 
00036   ~PageRequest();
00037 
00038   //------------------------------------------------------
00040 
00041   //------------------------------------------------------
00042 
00046   void createInputTileRequests();
00047 
00052   void addNeededBy(TileRequest* request) {
00053     _neededByTiles.push_back(request);
00054   }
00055 
00057   bool tileRequestFinished() { _inputTilesNeeded--; return _inputTilesNeeded==0; }
00058 
00060   inline bool isNeededByTiles() { return _neededByTiles.size()!=0; }
00061 
00063 
00064   //------------------------------------------------------
00066 
00067   //------------------------------------------------------
00068 
00071   inline bool isReadyForProcessing() { return _inputTilesNeeded == 0; };
00072 
00075   MLErrorCode runCalculateOutputSubImage();
00076 
00079   void copyPageToTileRequests(PageRequestQueueInterface& queue);
00080 
00082 
00083   //------------------------------------------------------
00085 
00086   //------------------------------------------------------
00087 
00090   void propagateErrorUpwards(MLErrorCode error);
00091 
00095   bool propagateCancellationDownIfRequestNotNeededAnymore();
00096 
00098   void collectPageRequestsWithErrors(std::set<PageRequest*>& result);
00099 
00101   bool hasError() const { return _error!=ML_RESULT_OK; }
00102 
00104   void setError(MLErrorCode error) { _error = error; }
00105 
00107   MLErrorCode getError() { return _error; }
00108 
00110 
00111 #ifdef ML_TILEREQUEST_DEBUG_PRINTING
00112   // TODO: remove or replace with stream ops
00113   void print(int depth);
00114 #endif
00115 
00116 protected:
00118   void freeInputTiles();
00119 
00121   friend class PageRequestCursor;
00122 
00124   std::vector <TileRequest*> _inputTiles;
00126   int                        _inputTilesNeeded;
00128   int                        _totalInputTilesNeeded;
00129 
00131   int                        _traversalCursorPosition;
00133   int                        _traversalCreatedTiles;
00134 
00136   MLMemoryBlockHandle        _page;
00138   PagedImage*                  _image;
00140   MLint                      _pageId;
00141 
00143   MLErrorCode _error;
00144 
00146   std::vector <TileRequest*> _neededByTiles;
00147 };
00148 
00149 
00150 ML_END_NAMESPACE
00151 
00152 #endif //of __mlPageRequest_H
00153