1 #pragma once 2 3 #include <list> 4 5 #include "page_mapper.h" 6 #include "pages_conserving.h" 7 #include "pipe_accessor.h" 8 9 /* Pipe paging support, maintaining the sequence of active regions or sections 10 in a pipe. */ 11 12 class PipePaging 13 { 14 protected: 15 PagesConserving _pages; 16 17 /* Regions acting as files with their own accessors. */ 18 19 std::list<PageMapper *> _regions; 20 std::list<PipeAccessor> _accessors; 21 22 /* Pipe section/region size. */ 23 24 offset_t _size; 25 26 public: 27 explicit PipePaging(offset_t size); 28 29 virtual void add_region(PageMapper *mapper); 30 31 virtual PageMapper *first_region(); 32 33 virtual PageMapper *next_region(); 34 35 virtual PipeAccessor *accessor(); 36 37 virtual PagesConserving *pages() 38 { return &_pages; } 39 40 virtual offset_t region_size() 41 { return _size; } 42 }; 43 44 // vim: tabstop=4 expandtab shiftwidth=4