Deque3.hpp
Vá para a documentação deste arquivo.
1 
6 #ifndef PERSISTENCE_DEQUE3_HPP_
7 #define PERSISTENCE_DEQUE3_HPP_
8 
9 #include "Deque2.hpp"
10 
11 namespace persistence {
12 
13 namespace deque3 {
14 
19 template<class T> class SubDeque {
20 public:
21  inline int size() const;
22  inline bool empty() const;
23  inline void clear();
24 
25  void push_back(const T &x);
26  void push_front(const T &x);
27 
28  void pop_back();
29  void pop_front();
30 
31  const T& front() const;
32  const T& back() const;
33 
34 
35  const T& operator [](int i) const;
36 
37  SubDeque();
38 
39 private:
43  T v[5];
44 
48  int i;
49 
53  int size_;
54 };
55 
56 using any = deque2::any;
57 
70 class Node {
71 public:
84 
89 
94  int size;
95 
96  int level;
97  int ref_ct;
98  inline void add_ref();
99  template<class T> inline void rem_ref();
100  inline void safe_rem_ref();
101 
105  Node();
106 
107  Node(const Node &o);
108  ~Node();
109 };
110 
136 template<class T> class Deque {
137 public:
143 
147  Deque();
148 
151 
157  const T& Front() const;
158 
163  const T& Back() const;
164 
170  const T& K_th(int k) const;
171 
173 
178 
184  Deque<T> PushFront(const T& x) const;
185 
190  Deque<T> PushBack(const T& x) const;
191 
196  Deque<T> PopFront() const;
197 
202  Deque<T> PopBack() const;
203 
205 
206  ~Deque();
207  Deque(const Deque &o);
208  Deque& operator=(const Deque &o);
209 
210 private:
211  Deque(Node *u);
212 };
213 
217 
225 void Check(Node *a);
226 
233 Node* Copy(const Node *a);
234 
241 int Digit(const Node *a, bool last);
242 
248 void Fix(Node *a);
249 
260 void FixDeques(SubDeque<any*> &l, SubDeque<any*> &r,
262 
264 
265 } // namespace deque3
266 
267 } // namespace persistence
268 
269 #include "Deque3.tpp"
270 
271 #endif // PERSISTENCE_DEQUE3_HPP_
const T & Back() const
Acesso ao último elemento.
Deque persistente de Kaplan e Tarjan.
Definition: Deque3.hpp:136
SubDeque< any * > prefix
Prefixo da deque.
Definition: Deque3.hpp:75
Implementação de uma deque persistente de acordo com o capítulo 4.
Deque< T > PushBack(const T &x) const
Inserção no final.
Deque< T > PopFront() const
Remoção do início.
SubDeque< any * > suffix
Sufixo da deque.
Definition: Deque3.hpp:83
Nó da deque de Kaplan e Tarjan.
Definition: Deque3.hpp:70
Deque< T > PopBack() const
Remoção do final.
int size
Tamanho da deque.
Definition: Deque3.hpp:94
const T & K_th(int k) const
Acesso ao k-ésimo elemento.
Deque não persistente de até 5 elementos.
Definition: Deque3.hpp:19
const T & Front() const
Acesso ao primeiro elemento.
Node * node
Nó principal.
Definition: Deque3.hpp:142
Deque()
Construtor vazio.
Deque< T > PushFront(const T &x) const
Inserção no início.
Node * child
Sub-deque central.
Definition: Deque3.hpp:79
Node * next
Próximo nó na pilha de nós.
Definition: Deque3.hpp:88