ML Reference
|
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