ML Reference
MeVis/Foundation/Sources/ML/include/host/mlPageRequestCursor.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //-------------------------------------------------------------------------
00009 //-------------------------------------------------------------------------
00010 #ifndef __mlPageRequestCursor_H
00011 #define __mlPageRequestCursor_H
00012 
00013 // ML-includes
00014 #ifndef __mlInitSystemML_H
00015 #include "mlInitSystemML.h"
00016 #endif
00017 
00018 #include <host/mlPageRequestProcessor.h>
00019 
00020 #include <set>
00021 
00022 ML_START_NAMESPACE
00023 
00024 class TileRequest;
00025 class PageRequest;
00026 
00027 #define ML_PAGEREQUEST_TILES_NOT_CREATED -1
00028 #define ML_TILEREQUEST_PAGES_NOT_CREATED -1
00029 
00030 //-------------------------------------------------------------------------------------------
00034 //-------------------------------------------------------------------------------------------
00035 class MLEXPORT PageRequestCursor : public PageRequestQueueInterface
00036 {
00037 public:
00039   PageRequestCursor(PageRequest* request);
00041   PageRequestCursor(TileRequest* request);
00043   PageRequestCursor();
00044 
00046   void init(TileRequest* request);
00047 
00049   void setProcessingScope(int scope) { _processingScope = scope; }
00050 
00052   int getProcessingScope() const { return _processingScope; }
00053 
00055   enum CursorState {
00056     HasMoreWork, 
00057     HasFinished, 
00058     IsBlocked    
00059   };
00060 
00065   CursorState nextStep(PageRequestQueueInterface& queue);
00066 
00068   bool propagateCancellationDownIfRequestNotNeededAnymore();
00069 
00071   void propagateErrorUpwards(MLErrorCode error);
00072 
00074   void collectPageRequestsWithErrors(std::set<PageRequest*>& result);
00075 
00077   bool isNeeded();
00078 
00080   void clear();
00081 
00083   TileRequest* currentTileRequest() { return _tileRequest; }
00084 
00086   virtual void append(PageRequest* request);
00087 
00088 private:
00090   void commonInit();
00091 
00096   void moveUpToNextDown();
00097 
00099   PageRequest* _pageRequest;
00101   TileRequest* _tileRequest;
00102 
00104   PageRequest* _pageRequestToPutInQueue;
00105 
00107   int _processingScope;
00108 
00110   int _currentDepth;
00111 };
00112 
00113 ML_END_NAMESPACE
00114 
00115 #endif //of __mlPageRequestCursor_H
00116