1 #pragma once 2 3 #include <list> 4 #include <map> 5 6 #include "flexpage.h" 7 #include "memory.h" 8 #include "page_owner.h" 9 10 11 12 /* Collection types. */ 13 14 typedef struct { Flexpage *flexpage; PageOwner *owner; } QueueEntry; 15 typedef std::list<QueueEntry> Queue; 16 17 typedef std::pair<Flexpage *, Queue::iterator> Position; 18 typedef std::map<Flexpage *, Queue::iterator> Positions; 19 20 21 22 /* A queue of managed pages. */ 23 24 class PageQueue 25 { 26 protected: 27 28 /* Helper methods. */ 29 30 virtual void discard(Queue &queue, Memory *memory); 31 32 virtual bool remove(Queue &queue, Positions &positions, PageOwner *owner, Flexpage *flexpage); 33 34 public: 35 virtual ~PageQueue() 36 { 37 } 38 39 virtual void close(Memory *memory) = 0; 40 41 virtual void pop(PageOwner **owner, Flexpage **flexpage) = 0; 42 43 virtual void push(PageOwner *owner, Flexpage *flexpage) = 0; 44 45 virtual void push_front(PageOwner *owner, Flexpage *flexpage) = 0; 46 47 virtual bool remove(PageOwner *owner, Flexpage *flexpage) = 0; 48 }; 49 50 // vim: tabstop=4 expandtab shiftwidth=4