1
<refentry id="glib-Trash-Stacks">
3
<refentrytitle role="top_of_page">Trash Stacks</refentrytitle>
4
<manvolnum>3</manvolnum>
5
<refmiscinfo>GLIB Library</refmiscinfo>
9
<refname>Trash Stacks</refname>
10
<refpurpose>maintain a stack of unused allocated memory chunks.</refpurpose>
11
<!--[<xref linkend="desc" endterm="desc.title"/>]-->
14
<refsynopsisdiv role="synopsis">
15
<title role="synopsis.title">Synopsis</title>
19
#include <glib.h>
22
<link linkend="GTrashStack">GTrashStack</link>;
23
<link linkend="void">void</link> <link linkend="g-trash-stack-push">g_trash_stack_push</link> (<link linkend="GTrashStack">GTrashStack</link> **stack_p,
24
<link linkend="gpointer">gpointer</link> data_p);
25
<link linkend="gpointer">gpointer</link> <link linkend="g-trash-stack-pop">g_trash_stack_pop</link> (<link linkend="GTrashStack">GTrashStack</link> **stack_p);
26
<link linkend="gpointer">gpointer</link> <link linkend="g-trash-stack-peek">g_trash_stack_peek</link> (<link linkend="GTrashStack">GTrashStack</link> **stack_p);
27
<link linkend="guint">guint</link> <link linkend="g-trash-stack-height">g_trash_stack_height</link> (<link linkend="GTrashStack">GTrashStack</link> **stack_p);
39
<refsect1 role="desc">
40
<title role="desc.title">Description</title>
42
A <link linkend="GTrashStack"><type>GTrashStack</type></link> is an efficient way to keep a stack of unused allocated
43
memory chunks. Each memory chunk is required to be large enough to hold
44
a <link linkend="gpointer"><type>gpointer</type></link>. This allows the stack to be maintained without any space
45
overhead, since the stack pointers can be stored inside the memory chunks.
48
There is no function to create a <link linkend="GTrashStack"><type>GTrashStack</type></link>. A <link linkend="NULL:CAPS"><literal>NULL</literal></link> <link linkend="GTrashStack"><type>GTrashStack</type></link>*
49
is a perfectly valid empty stack.
53
<refsect1 role="details">
54
<title role="details.title">Details</title>
56
<title><anchor id="GTrashStack" role="struct"/>GTrashStack</title>
57
<indexterm><primary>GTrashStack</primary></indexterm><programlisting>typedef struct {
62
Each piece of memory that is pushed onto the stack
63
is cast to a <structname>GTrashStack*</structname>.
64
</para><variablelist role="struct">
66
<term><link linkend="GTrashStack">GTrashStack</link> *<structfield>next</structfield>;</term>
67
<listitem><simpara>pointer to the previous element of the stack,
68
gets stored in the first <literal>sizeof (gpointer)</literal>
73
</variablelist></refsect2>
75
<title><anchor id="g-trash-stack-push" role="function"/>g_trash_stack_push ()</title>
76
<indexterm><primary>g_trash_stack_push</primary></indexterm><programlisting><link linkend="void">void</link> g_trash_stack_push (<link linkend="GTrashStack">GTrashStack</link> **stack_p,
77
<link linkend="gpointer">gpointer</link> data_p);</programlisting>
79
Pushes a piece of memory onto a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
80
</para><variablelist role="params">
81
<varlistentry><term><parameter>stack_p</parameter> :</term>
82
<listitem><simpara>a pointer to a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
83
</simpara></listitem></varlistentry>
84
<varlistentry><term><parameter>data_p</parameter> :</term>
85
<listitem><simpara>the piece of memory to push on the stack.
88
</simpara></listitem></varlistentry>
89
</variablelist></refsect2>
91
<title><anchor id="g-trash-stack-pop" role="function"/>g_trash_stack_pop ()</title>
92
<indexterm><primary>g_trash_stack_pop</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_trash_stack_pop (<link linkend="GTrashStack">GTrashStack</link> **stack_p);</programlisting>
94
Pops a piece of memory off a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
95
</para><variablelist role="params">
96
<varlistentry><term><parameter>stack_p</parameter> :</term>
97
<listitem><simpara>a pointer to a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
98
</simpara></listitem></varlistentry>
99
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the element at the top of the stack.
102
</simpara></listitem></varlistentry>
103
</variablelist></refsect2>
105
<title><anchor id="g-trash-stack-peek" role="function"/>g_trash_stack_peek ()</title>
106
<indexterm><primary>g_trash_stack_peek</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_trash_stack_peek (<link linkend="GTrashStack">GTrashStack</link> **stack_p);</programlisting>
108
Returns the element at the top of a <link linkend="GTrashStack"><type>GTrashStack</type></link> which may be <link linkend="NULL:CAPS"><literal>NULL</literal></link>.
109
</para><variablelist role="params">
110
<varlistentry><term><parameter>stack_p</parameter> :</term>
111
<listitem><simpara>a pointer to a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
112
</simpara></listitem></varlistentry>
113
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the element at the top of the stack.
116
</simpara></listitem></varlistentry>
117
</variablelist></refsect2>
119
<title><anchor id="g-trash-stack-height" role="function"/>g_trash_stack_height ()</title>
120
<indexterm><primary>g_trash_stack_height</primary></indexterm><programlisting><link linkend="guint">guint</link> g_trash_stack_height (<link linkend="GTrashStack">GTrashStack</link> **stack_p);</programlisting>
122
Returns the height of a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
123
Note that execution of this function is of O(N) complexity
124
where N denotes the number of items on the stack.
125
</para><variablelist role="params">
126
<varlistentry><term><parameter>stack_p</parameter> :</term>
127
<listitem><simpara>a pointer to a <link linkend="GTrashStack"><type>GTrashStack</type></link>.
128
</simpara></listitem></varlistentry>
129
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the height of the stack.
132
</simpara></listitem></varlistentry>
133
</variablelist></refsect2>