1 #pragma once 2 3 #include "mapped_file_object_interface.h" 4 #include "pager.h" 5 #include "file_paging.h" 6 7 /* A pager abstraction for a file. */ 8 9 class FilePager : public Pager, public MappedFileObject 10 { 11 protected: 12 FilePaging *_paging; 13 14 public: 15 fileid_t fileid; 16 17 explicit FilePager(fileid_t fileid, PageMapper *mapper, flags_t flags, 18 FilePaging *paging); 19 20 virtual void close(); 21 22 /* Server details. */ 23 24 int expected_items(); 25 26 ipc_server_handler_type handler(); 27 28 void *interface() 29 { return static_cast<MappedFileObject *>(this); } 30 31 /* File methods. */ 32 33 virtual long flush(offset_t populated_size, offset_t *size); 34 35 virtual long resize(offset_t *size); 36 37 /* Pager and mapped file methods. */ 38 39 virtual long map(unsigned long offset, l4_addr_t hot_spot, flags_t flags, l4_snd_fpage_t *region); 40 41 virtual long mmap(offset_t position, offset_t length, offset_t *start_pos, offset_t *end_pos, offset_t *data_end); 42 }; 43 44 // vim: tabstop=4 expandtab shiftwidth=4