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 /* Endpoint status. */ 27 28 unsigned int _endpoints = 2; 29 30 public: 31 explicit PipePaging(offset_t size); 32 33 virtual void detach(); 34 35 virtual PagesConserving *pages() 36 { return &_pages; } 37 38 virtual offset_t region_size() 39 { return _size; } 40 41 /* Region management. */ 42 43 virtual void add_region(PageMapper *mapper); 44 45 virtual PageMapper *first_region(); 46 47 virtual PageMapper *next_region(); 48 49 virtual PipeAccessor *accessor(); 50 }; 51 52 // vim: tabstop=4 expandtab shiftwidth=4