1 #pragma once 2 3 #include "access_map.h" 4 #include "accessor.h" 5 #include "page_owner.h" 6 7 #include <mutex> 8 9 /* A file mapper, associating flexpages with file regions. */ 10 11 class PageMapper : public PageOwner 12 { 13 protected: 14 AccessMap _map; 15 Accessor *_accessor; 16 Pages *_pages; 17 unsigned int _attached; 18 std::mutex _lock; 19 20 /* Internal flexpage retrieval methods. */ 21 22 Flexpage *find(offset_t offset); 23 24 Flexpage *flexpage(offset_t offset); 25 26 public: 27 explicit PageMapper(Accessor *accessor, Pages *pages); 28 29 /* Accounting methods. */ 30 31 void attach(); 32 33 unsigned int detach(); 34 35 /* Interface for the pager. */ 36 37 Flexpage *get(offset_t offset, unsigned long flags); 38 39 void queue(Flexpage *flexpage); 40 41 void flush_all(offset_t start, offset_t size); 42 43 offset_t get_data_size(); 44 45 /* Data transfer methods, implementing PageOwner. */ 46 47 void fill(Flexpage *flexpage); 48 49 void flush(Flexpage *flexpage, bool purge); 50 51 /* Interface for the page collection, implementing PageOwner. */ 52 53 void remove(Flexpage *flexpage); 54 }; 55 56 // vim: tabstop=4 expandtab shiftwidth=4