1 #pragma once 2 3 #include <list> 4 #include <map> 5 6 #include "flexpage.h" 7 #include "page_owner.h" 8 9 10 11 /* Collection types. */ 12 13 typedef struct { Flexpage *flexpage; PageOwner *owner; } QueueEntry; 14 typedef std::list<QueueEntry> Queue; 15 16 typedef std::pair<Flexpage *, Queue::iterator> Position; 17 typedef std::map<Flexpage *, Queue::iterator> Positions; 18 19 20 21 /* A queue of managed pages. */ 22 23 class PageQueue 24 { 25 public: 26 virtual void pop(PageOwner **owner, Flexpage **flexpage) = 0; 27 28 virtual void push(PageOwner *owner, Flexpage *flexpage) = 0; 29 30 virtual void push_front(PageOwner *owner, Flexpage *flexpage) = 0; 31 32 virtual bool remove(PageOwner *owner, Flexpage *flexpage) = 0; 33 }; 34 35 // vim: tabstop=4 expandtab shiftwidth=4