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