Trash Stacks

Trash Stacks — Поддержка стека неиспользуемых распределённых частей памяти.

Краткое описание

#include <glib.h> GTrashStack; void g_trash_stack_push (GTrashStack **stack_p, gpointer data_p); gpointer g_trash_stack_pop (GTrashStack **stack_p); gpointer g_trash_stack_peek (GTrashStack **stack_p); guint g_trash_stack_height (GTrashStack **stack_p);

Описание

GTrashStack это эффективный способ сохранить стек неиспользуемых распределённых участков памяти. Каждый участок памяти должен быть достаточно большим для вмещения gpointer. Это позволяет поддержку стека без дополнительного пространства, так как стек указателей может быть сохранён внутри участка памяти.

Нет функции для создания GTrashStack. NULL GTrashStack* это совершенно правильный пустой стек.

Детали

GTrashStack

typedef struct { GTrashStack *next; } GTrashStack;

Каждый участок памяти, который помещён в стек, приводится к GTrashStack*.

GTrashStack *next; указатель на предыдущий элемент стека, сохраняется в первом sizeof (gpointer) байте элемента.

g_trash_stack_push ()

void g_trash_stack_push (GTrashStack **stack_p, gpointer data_p);

Помещает участок памяти в GTrashStack.

stack_p : указатель на GTrashStack.
data_p : участок памяти помещаемый в стек.

g_trash_stack_pop ()

gpointer g_trash_stack_pop (GTrashStack **stack_p);

Выталкивает участок памяти из GTrashStack.

stack_p : указатель на GTrashStack.
Возвращает : верхний элемент стека.

g_trash_stack_peek ()

gpointer g_trash_stack_peek (GTrashStack **stack_p);

Возвращает верхний элемент GTrashStack, который может быть NULL.

stack_p : указатель на GTrashStack.
Возвращает : верхний элемент стека.

g_trash_stack_height ()

guint g_trash_stack_height (GTrashStack **stack_p);

Возвращает высоту GTrashStack. Помните что выполнение этой функции имеет сложность O(N), где N означает количество элементов стека.

stack_p : указатель на GTrashStack.
Возвращает : высота стека.