RedBlackTree.hpp
Vá para a documentação deste arquivo.
1 
6 #ifndef PERSISTENCE_REDBLACKTREE_HPP_
7 #define PERSISTENCE_REDBLACKTREE_HPP_
8 
9 #include <vector>
10 
11 namespace persistence {
12 
13 namespace red_black_tree {
14 
18 template<class T> class Node {
19  public:
20 
24 
29  Node *child[2];
30 
35  bool red;
36 
42  const T value;
44 
48 
53  int timestamp;
54 
64 
72 
78 
86 
95  bool extraSide;
96 
102 
104 
109  Node(const T& val, int version);
110 };
111 
123 template<class T> class RedBlackTree {
124  public:
125 
134 
141  const T* Find(const T& x, int version);
142 
147  void Insert(const T& value);
148 
154  const T* Remove(const T& value);
155 
159  inline int current();
161 
164 
169  std::vector<Node<T>*> roots;
170 
171 
175  RedBlackTree();
179  ~RedBlackTree();
180 
189  Node<T>* Child(Node<T> *u, bool side, int version) const;
191 
202 
209  Node<T>* Active(Node<T> *u);
210 
217  Node<T>* Child(Node<T> *u, bool side);
218 
231  void Modify(Node<T> *u, bool side, Node<T> *v);
232 
240  Node<T> *Copy(Node<T> *u);
241 
253  void Rotate(Node<T> *u, bool side);
254 
264  void Transplant(Node<T> *u, Node<T> *x);
265 
272 
279  void AddBlack(Node<T> *y, bool side);
280 
282 
283 };
284 
285 } // namespace red_black_tree
286 
287 } // namespace persistence
288 
289 #include "RedBlackTree.tpp"
290 
291 #endif // PERSISTENCE_REDBLACKTREE_HPP_
void Insert(const T &value)
Inserção de valor na ARN.
Node * parent
Nó pai do nó.
Definition: RedBlackTree.hpp:71
Nó da ARN parcialmente persistente.
Definition: RedBlackTree.hpp:18
void AddBlack(Node< T > *y, bool side)
Arruma violações causadas por remoção.
Node< T > * Active(Node< T > *u)
Versão ativa de um nó.
Árvore rubro-negra (ARN) parcialmente persistente.
Definition: RedBlackTree.hpp:123
const T * Remove(const T &value)
Remoção de valor na ARN.
Node * copy
Cópia do nó (se não é ativo).
Definition: RedBlackTree.hpp:63
bool red
Cor do nó (vermelho ou preto) Este campo só armazena a cor de nós ativos, ou seja, nós com copy = nullptr.
Definition: RedBlackTree.hpp:35
Node(const T &val, int version)
Construtor padrão.
void Modify(Node< T > *u, bool side, Node< T > *v)
Modificação de filho de um nó.
int current()
Versão atual da ARN.
Node< T > * Child(Node< T > *u, bool side, int version) const
Retorna um filho de um nó em dada versão.
int extraTimestamp
Tempo de criação do ponteiro extra.
Definition: RedBlackTree.hpp:101
const T value
Valor armazenado pelo nó Como este é um nó de uma árvore de busca binária, vale que os valores dos nó...
Definition: RedBlackTree.hpp:42
void Rotate(Node< T > *u, bool side)
Rotaciona um nó.
const T * Find(const T &x, int version)
Busca por um valor em dada versão da ARN.
Node< T > * Copy(Node< T > *u)
Copia um nó.
std::vector< Node< T > * > roots
Raízes de todas as versões.
Definition: RedBlackTree.hpp:169
Node * child[2]
Nós filhos do nó.
Definition: RedBlackTree.hpp:29
void Transplant(Node< T > *u, Node< T > *x)
Subsitui um nó.
Node< T > * MinElement(Node< T > *u)
Menor elemento em uma subárvore na versão atual.
bool extraSide
Lado do ponteiro extra.
Definition: RedBlackTree.hpp:95
Node * extra
Ponteiro extra.
Definition: RedBlackTree.hpp:85
int timestamp
Tempo de criação do nó.
Definition: RedBlackTree.hpp:53