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 <set>
00019 
00020 ML_START_NAMESPACE
00021 
00022 class TileRequest;
00023 class PageRequest;
00024 class PageRequestQueueInterface;
00025 
00026 #define ML_PAGEREQUEST_TILES_NOT_CREATED -1
00027 #define ML_TILEREQUEST_PAGES_NOT_CREATED -1
00028 
00029 //-------------------------------------------------------------------------------------------
00033 //-------------------------------------------------------------------------------------------
00034 class ML_UNIX_ONLY_EXPORT(MLEXPORT) PageRequestCursor
00035 {
00036 public:
00038   PageRequestCursor(PageRequest* request);
00040   PageRequestCursor(TileRequest* request);
00042   PageRequestCursor();
00043 
00045   void init(TileRequest* request);
00046 
00048   enum CursorState {
00049     HasMoreWork, 
00050     HasFinished, 
00051     IsBlocked    
00052   };
00053 
00058   CursorState nextStep(PageRequestQueueInterface& queue);
00059 
00061   bool propagateCancellationDownIfRequestNotNeededAnymore();
00062 
00064   void collectPageRequestsWithErrors(std::set<PageRequest*>& result);
00065 
00067   bool isNeeded();
00068 
00070   void clear();
00071 
00072 private:
00077   void moveUpToNextDown();
00078 
00080   PageRequest* _pageRequest;
00082   TileRequest* _tileRequest;
00083 
00085   int          _currentDepth;
00086 };
00087 
00088 ML_END_NAMESPACE
00089 
00090 #endif //of __mlPageRequestCursor_H
00091