106using namespace Aleph;
141# define PREV(p) (p->getL())
142# define NEXT(p) (p->getR())
143# define ULINK(p) reinterpret_cast<Node*&>((p)->getU())
144# define IS_LEAF(p) ((p)->get_control_fields().is_leaf)
145# define IS_LEFT(p) ((p)->get_control_fields().is_left)
146# define CTRL_BITS(p) ((p)->get_control_fields())
170 template <
template <
class>
class NodeType,
typename Key,
194 std::swap(
root,
h.root);
195 std::swap(
last,
h.last);
197 std::swap(
cmp,
h.cmp);
466 ULINK(new_node) = parent;
474 LLINK(parent) = new_node;
479 RLINK(parent) = new_node;
527 template <
class Operation>
539 template <
class Operation>
551 template <
class Operation>
564 template <
class Operation>
570 template <
class Operation>
576 template <
class Operation>
582 template <
class Operation>
588 template <
class Operation>
856 if (left_link ==
nullptr)
866 if (right_link ==
nullptr)
1002 template <
class Key,
typename Compare = Aleph::less<Key>>
1027 template <
class Key,
typename Compare = Aleph::less<Key>>
#define ah_underflow_error_if(C)
Throws std::underflow_error if condition holds.
#define ah_overflow_error_if(C)
Throws std::overflow_error if condition holds.
BinHeapNode_Data() noexcept
BinHeapNode_Data *& getU() noexcept
Control_Fields control_fields
Control_Fields & get_control_fields() noexcept
Dynamic queue of elements of generic type T based on single linked list.
T & put(const T &data)
The type of element.
T get()
Remove the oldest item of the queue.
bool is_empty() const noexcept
Return true if this is empty.
T & push(const T &data) noexcept
Push a copy of data
bool is_empty() const noexcept
Return true if stack is empty.
T pop() noexcept
Pop by moving the top of stack.
void empty() noexcept
Empty the stack.
Iterator() noexcept
Default constructor creates an "end" iterator.
Node * get_curr_ne() const noexcept
bool has_curr() const noexcept
void reset_first() noexcept
Iterator(const GenBinHeap &h)
static const size_t Stack_Size
void reset_last() noexcept
size_t get_pos() const noexcept
bool preorder_traverse(Operation op) const
Node * getRoot() noexcept
bool preorder_traverse(Node *p, Operation op) const
Compare & get_compare() noexcept
void update(Node *p) noexcept
Actualiza prioridad de un nodo contenido en el heap.
virtual bool verify_heap(Node *p) const
bool is_empty() const noexcept
static Node * advance_left(Node *p) noexcept
void for_each_in_preorder(Operation &&operation=Operation()) const
Node * getMin()
Elimina del heap el nodo de menor prioridad.
static bool is_in_list(Node *p) noexcept
Node * getRoot() const noexcept
Node * remove(Node *node)
Elimina del heap el nodo node.
void for_each_in_inorder(Operation &operation) const
void swap_with_parent(Node *p) noexcept
virtual ~GenBinHeap() noexcept
static Node * advance_right(Node *p) noexcept
void remove_all_and_delete() noexcept
Borra todos los nodos del heap, invoca a los destructores de los nodos eliminados y libera toda la me...
bool level_traverse(Op operation=Op()) const
void replace_node(Node *node, Node *new_node) noexcept
GenBinHeap(Compare __cmp=Compare()) noexcept
static void __for_each_in_inorder(Node *p, Operation &operation)
virtual void sift_up(Node *p) noexcept
Node * getMin_ne() noexcept
virtual void sift_down(Node *p) noexcept
void swap(GenBinHeap &h) noexcept
void for_each_in_preorder(Operation &operation) const
void swap_root_with_last() noexcept
Compare & key_comp() noexcept
static void __for_each_in_preorder(Node *p, Operation &operation)
static void __postorder_delete(Node *p, Node *incomplete_node) noexcept
Node * insert(Node *p) noexcept
Inserta un nodo en un heap.
Node * top()
Retorna el nodo con menor prioridad según el criterio de comparación especificado en la declaración.
void for_each_in_inorder(Operation &&operation=Operation()) const
static bool has_sibling(Node *p) noexcept
const size_t & size() const noexcept
bool __level_traverse(Node *root, Op &operation) const
Node * remove_last() noexcept
constexpr Node *& RLINK(Node *p) noexcept
Return the right tree of p.
#define DECLARE_BINNODE(Name, height, Control_Data)
Specify tree node for a binary tree.
constexpr Node *& LLINK(Node *p) noexcept
Return a pointer to left subtree.
Singly linked list implementations with head-tail access.
Main namespace for Aleph-w library functions.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Heap of nodes with virtual destroyer.
Node heap without virtual destructor.
Stack implementations backed by dynamic or fixed arrays.
Basic binary tree node definitions.
Dynamic queue implementation based on linked lists.