Deque2.hpp
Vá para a documentação deste arquivo.
1 
6 #ifndef PERSISTENCE_DEQUE2_HPP_
7 #define PERSISTENCE_DEQUE2_HPP_
8 
9 namespace persistence {
10 
11 namespace deque2 {
12 
14 struct any {
15  const void *ptr;
16  any(const void *p);
17  inline void add_ref();
18  template<class T> inline void rem_ref(int);
19  inline void rem_ref();
20 private:
21  int ref_ct;
22 };
24 
36 class Node {
37 public:
41  any* preffix;
49  any* suffix;
50 
55  int size;
56 
57  Node(any *p, Node *c, any *s, int sz);
58  void add_ref();
59  template<class T> void rem_ref(int=0);
60 private:
61  int ref_ct;
62 };
63 
89 template<class T> class Deque {
90 public:
96 
100  Deque();
101 
104 
110  const T& Front() const;
111 
116  const T& Back() const;
117 
123  const T& K_th(int k) const;
124 
126 
131 
137  Deque<T> PushFront(const T& x) const;
138 
143  Deque<T> PushBack(const T& x) const;
144 
149  Deque<T> PopFront() const;
150 
155  Deque<T> PopBack() const;
156 
158 
159  ~Deque();
160  Deque(const Deque& o);
161  Deque& operator=(const Deque &o);
162 
163 private:
164  Deque(Node *u);
165 };
166 
167 } // namespace deque2
168 
169 } // namespace persistence
170 
171 #include "Deque2.tpp"
172 
173 #endif // PERSISTENCE_DEQUE2_HPP_
int size
Tamanho da deque.
Definition: Deque2.hpp:55
Deque< T > PopBack() const
Remoção do final.
Deque< T > PushBack(const T &x) const
Inserção no final.
const T & K_th(int k) const
Acesso ao k-ésimo elemento.
Nó da deque recursiva.
Definition: Deque2.hpp:36
Deque()
Construtor vazio.
Deque< T > PushFront(const T &x) const
Inserção no início.
Deque persistente de estrutura recursiva.
Definition: Deque2.hpp:89
any * preffix
Prefixo da deque.
Definition: Deque2.hpp:41
const T & Front() const
Acesso ao primeiro elemento.
Node * node
Nó principal.
Definition: Deque2.hpp:95
Node * center
Sub-deque central.
Definition: Deque2.hpp:45
const T & Back() const
Acesso ao último elemento.
any * suffix
Sufixo da deque.
Definition: Deque2.hpp:49
Deque< T > PopFront() const
Remoção do início.