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 ~PageQueue() 27 { 28 } 29 30 virtual void pop(PageOwner **owner, Flexpage **flexpage) = 0; 31 32 virtual void push(PageOwner *owner, Flexpage *flexpage) = 0; 33 34 virtual void push_front(PageOwner *owner, Flexpage *flexpage) = 0; 35 36 virtual bool remove(PageOwner *owner, Flexpage *flexpage) = 0; 37 }; 38 39 // vim: tabstop=4 expandtab shiftwidth=4