1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/page_mapper.h Sat Jan 23 00:01:22 2021 +0100
1.3 @@ -0,0 +1,56 @@
1.4 +#pragma once
1.5 +
1.6 +#include "access_map.h"
1.7 +#include "accessor.h"
1.8 +#include "page_owner.h"
1.9 +
1.10 +#include <mutex>
1.11 +
1.12 +/* A file mapper, associating flexpages with file regions. */
1.13 +
1.14 +class PageMapper : public PageOwner
1.15 +{
1.16 +protected:
1.17 + AccessMap _map;
1.18 + Accessor *_accessor;
1.19 + Pages *_pages;
1.20 + unsigned int _attached;
1.21 + std::mutex _lock;
1.22 +
1.23 + /* Internal flexpage retrieval methods. */
1.24 +
1.25 + Flexpage *find(offset_t offset);
1.26 +
1.27 + Flexpage *flexpage(offset_t offset);
1.28 +
1.29 +public:
1.30 + explicit PageMapper(Accessor *accessor, Pages *pages);
1.31 +
1.32 + /* Accounting methods. */
1.33 +
1.34 + void attach();
1.35 +
1.36 + unsigned int detach();
1.37 +
1.38 + /* Interface for the pager. */
1.39 +
1.40 + Flexpage *get(offset_t offset);
1.41 +
1.42 + void queue(Flexpage *flexpage);
1.43 +
1.44 + void flush_all(offset_t start, offset_t size);
1.45 +
1.46 + offset_t get_data_size();
1.47 +
1.48 + /* Data transfer methods, implementing PageOwner. */
1.49 +
1.50 + void fill(Flexpage *flexpage);
1.51 +
1.52 + void flush(Flexpage *flexpage, bool purge);
1.53 +
1.54 + /* Interface for the page collection, implementing PageOwner. */
1.55 +
1.56 + void remove(Flexpage *flexpage);
1.57 +};
1.58 +
1.59 +// vim: tabstop=4 expandtab shiftwidth=4