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 Memory *_memory; 16 PagesConserving *_pages; 17 18 /* Regions acting as files with their own accessors. */ 19 20 std::list<PageMapper *> _regions; 21 std::list<PipeAccessor> _accessors; 22 23 /* Pipe section/region size. */ 24 25 offset_t _size; 26 27 /* Endpoint status. */ 28 29 unsigned int _endpoints = 2; 30 31 public: 32 explicit PipePaging(Memory *memory, offset_t size); 33 34 explicit PipePaging(offset_t size); 35 36 virtual void detach(); 37 38 virtual PagesConserving *pages() 39 { return _pages; } 40 41 virtual offset_t region_size() 42 { return _size; } 43 44 /* Region management. */ 45 46 virtual void add_region(PageMapper *mapper); 47 48 virtual PageMapper *first_region(); 49 50 virtual PageMapper *next_region(); 51 52 virtual PipeAccessor *accessor(); 53 }; 54 55 // vim: tabstop=4 expandtab shiftwidth=4