~ubuntu-branches/ubuntu/maverick/evolution-data-server/maverick-proposed

« back to all changes in this revision

Viewing changes to docs/reference/libedataserver/xml/e-memory.xml

  • Committer: Bazaar Package Importer
  • Author(s): Didier Roche
  • Date: 2010-05-17 17:02:06 UTC
  • mfrom: (1.1.79 upstream) (1.6.12 experimental)
  • Revision ID: james.westby@ubuntu.com-20100517170206-4ufr52vwrhh26yh0
Tags: 2.30.1-1ubuntu1
* Merge from debian experimental. Remaining change:
  (LP: #42199, #229669, #173703, #360344, #508494)
  + debian/control:
    - add Vcs-Bzr tag
    - don't use libgnome
    - Use Breaks instead of Conflicts against evolution 2.25 and earlier.
  + debian/evolution-data-server.install,
    debian/patches/45_libcamel_providers_version.patch:
    - use the upstream versioning, not a Debian-specific one 
  + debian/libedata-book1.2-dev.install, debian/libebackend-1.2-dev.install,
    debian/libcamel1.2-dev.install, debian/libedataserverui1.2-dev.install:
    - install html documentation
  + debian/rules:
    - don't build documentation it's shipped with the tarball

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?xml version="1.0"?>
2
 
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
3
 
               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
4
 
<refentry id="libedataserver-e-memory">
5
 
<refmeta>
6
 
<refentrytitle role="top_of_page" id="libedataserver-e-memory.top_of_page">e-memory</refentrytitle>
7
 
<manvolnum>3</manvolnum>
8
 
<refmiscinfo>
9
 
  LIBEDATASERVER Library
10
 
</refmiscinfo>
11
 
</refmeta>
12
 
<refnamediv>
13
 
<refname>e-memory</refname>
14
 
<refpurpose></refpurpose>
15
 
</refnamediv>
16
 
 
17
 
<refsynopsisdiv id="libedataserver-e-memory.synopsis" role="synopsis">
18
 
<title role="synopsis.title">Synopsis</title>
19
 
 
20
 
<synopsis>                    <link linkend="EMemChunk">EMemChunk</link>;
21
 
<link linkend="EMemChunk"><returnvalue>EMemChunk</returnvalue></link> *         <link linkend="e-memchunk-new">e_memchunk_new</link>                      (<parameter><link linkend="gint"><type>gint</type></link> atomcount</parameter>,
22
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> atomsize</parameter>);
23
 
<link linkend="gpointer"><returnvalue>gpointer</returnvalue></link>            <link linkend="e-memchunk-alloc">e_memchunk_alloc</link>                    (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);
24
 
<link linkend="gpointer"><returnvalue>gpointer</returnvalue></link>            <link linkend="e-memchunk-alloc0">e_memchunk_alloc0</link>                   (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);
25
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-memchunk-free">e_memchunk_free</link>                     (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>,
26
 
                                                         <parameter><link linkend="gpointer"><type>gpointer</type></link> mem</parameter>);
27
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-memchunk-empty">e_memchunk_empty</link>                    (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);
28
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-memchunk-clean">e_memchunk_clean</link>                    (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);
29
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-memchunk-destroy">e_memchunk_destroy</link>                  (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);
30
 
                    <link linkend="EMemPool">EMemPool</link>;
31
 
enum                <link linkend="EMemPoolFlags">EMemPoolFlags</link>;
32
 
<link linkend="EMemPool"><returnvalue>EMemPool</returnvalue></link> *          <link linkend="e-mempool-new">e_mempool_new</link>                       (<parameter><link linkend="gint"><type>gint</type></link> blocksize</parameter>,
33
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> threshold</parameter>,
34
 
                                                         <parameter><link linkend="EMemPoolFlags"><type>EMemPoolFlags</type></link> flags</parameter>);
35
 
<link linkend="gpointer"><returnvalue>gpointer</returnvalue></link>            <link linkend="e-mempool-alloc">e_mempool_alloc</link>                     (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>,
36
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> size</parameter>);
37
 
<link linkend="gchar"><returnvalue>gchar</returnvalue></link> *             <link linkend="e-mempool-strdup">e_mempool_strdup</link>                    (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>,
38
 
                                                         <parameter>const <link linkend="gchar"><type>gchar</type></link> *str</parameter>);
39
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-mempool-flush">e_mempool_flush</link>                     (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>,
40
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> freeall</parameter>);
41
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-mempool-destroy">e_mempool_destroy</link>                   (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>);
42
 
                    <link linkend="EStrv">EStrv</link>;
43
 
<link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             <link linkend="e-strv-new">e_strv_new</link>                          (<parameter><link linkend="gint"><type>gint</type></link> size</parameter>);
44
 
<link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             <link linkend="e-strv-set-ref">e_strv_set_ref</link>                      (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
45
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
46
 
                                                         <parameter><link linkend="gchar"><type>gchar</type></link> *str</parameter>);
47
 
<link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             <link linkend="e-strv-set-ref-free">e_strv_set_ref_free</link>                 (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
48
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
49
 
                                                         <parameter><link linkend="gchar"><type>gchar</type></link> *str</parameter>);
50
 
<link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             <link linkend="e-strv-set">e_strv_set</link>                          (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
51
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
52
 
                                                         <parameter>const <link linkend="gchar"><type>gchar</type></link> *str</parameter>);
53
 
<link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             <link linkend="e-strv-pack">e_strv_pack</link>                         (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>);
54
 
const <link linkend="gchar"><returnvalue>gchar</returnvalue></link> *       <link linkend="e-strv-get">e_strv_get</link>                          (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
55
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>);
56
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-strv-destroy">e_strv_destroy</link>                      (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>);
57
 
                    <link linkend="EPoolv">EPoolv</link>;
58
 
<link linkend="EPoolv"><returnvalue>EPoolv</returnvalue></link> *            <link linkend="e-poolv-new">e_poolv_new</link>                         (<parameter><link linkend="guint"><type>guint</type></link> size</parameter>);
59
 
<link linkend="EPoolv"><returnvalue>EPoolv</returnvalue></link> *            <link linkend="e-poolv-cpy">e_poolv_cpy</link>                         (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *dest</parameter>,
60
 
                                                         <parameter>const <link linkend="EPoolv"><type>EPoolv</type></link> *src</parameter>);
61
 
<link linkend="EPoolv"><returnvalue>EPoolv</returnvalue></link> *            <link linkend="e-poolv-set">e_poolv_set</link>                         (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *poolv</parameter>,
62
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
63
 
                                                         <parameter><link linkend="gchar"><type>gchar</type></link> *str</parameter>,
64
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> freeit</parameter>);
65
 
const <link linkend="gchar"><returnvalue>gchar</returnvalue></link> *       <link linkend="e-poolv-get">e_poolv_get</link>                         (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *poolv</parameter>,
66
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>);
67
 
<link linkend="void"><returnvalue>void</returnvalue></link>                <link linkend="e-poolv-destroy">e_poolv_destroy</link>                     (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *poolv</parameter>);
68
 
</synopsis>
69
 
</refsynopsisdiv>
70
 
 
71
 
<refsect1 id="libedataserver-e-memory.description" role="desc">
72
 
<title role="desc.title">Description</title>
73
 
<para>
74
 
</para>
75
 
</refsect1>
76
 
<refsect1 id="libedataserver-e-memory.details" role="details">
77
 
<title role="details.title">Details</title>
78
 
<refsect2 id="EMemChunk" role="struct">
79
 
<title>EMemChunk</title>
80
 
<indexterm zone="EMemChunk"><primary>EMemChunk</primary></indexterm>
81
 
<programlisting>typedef struct _EMemChunk EMemChunk;</programlisting>
82
 
<para>
83
 
</para></refsect2>
84
 
<refsect2 id="e-memchunk-new" role="function">
85
 
<title>e_memchunk_new ()</title>
86
 
<indexterm zone="e-memchunk-new"><primary>e_memchunk_new</primary></indexterm>
87
 
<programlisting><link linkend="EMemChunk"><returnvalue>EMemChunk</returnvalue></link> *         e_memchunk_new                      (<parameter><link linkend="gint"><type>gint</type></link> atomcount</parameter>,
88
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> atomsize</parameter>);</programlisting>
89
 
<para>
90
 
Create a new memchunk header.  Memchunks are an efficient way to allocate
91
 
and deallocate identical sized blocks of memory quickly, and space efficiently.
92
 
</para>
93
 
<para>
94
 
e_memchunks are effectively the same as gmemchunks, only faster (much), and
95
 
they use less memory overhead for housekeeping.</para>
96
 
<variablelist role="params">
97
 
<varlistentry><term><parameter>atomcount</parameter>&#160;:</term>
98
 
<listitem><simpara>The number of atoms stored in a single malloc'd block of memory.
99
 
</simpara></listitem></varlistentry>
100
 
<varlistentry><term><parameter>atomsize</parameter>&#160;:</term>
101
 
<listitem><simpara>The size of each allocation.
102
 
</simpara></listitem></varlistentry>
103
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The new header.
104
 
</simpara></listitem></varlistentry>
105
 
</variablelist></refsect2>
106
 
<refsect2 id="e-memchunk-alloc" role="function">
107
 
<title>e_memchunk_alloc ()</title>
108
 
<indexterm zone="e-memchunk-alloc"><primary>e_memchunk_alloc</primary></indexterm>
109
 
<programlisting><link linkend="gpointer"><returnvalue>gpointer</returnvalue></link>            e_memchunk_alloc                    (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);</programlisting>
110
 
<para>
111
 
</para><variablelist role="params">
112
 
<varlistentry><term><parameter>m</parameter>&#160;:</term>
113
 
<listitem><simpara>
114
 
</simpara></listitem></varlistentry>
115
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
116
 
</simpara></listitem></varlistentry>
117
 
</variablelist></refsect2>
118
 
<refsect2 id="e-memchunk-alloc0" role="function">
119
 
<title>e_memchunk_alloc0 ()</title>
120
 
<indexterm zone="e-memchunk-alloc0"><primary>e_memchunk_alloc0</primary></indexterm>
121
 
<programlisting><link linkend="gpointer"><returnvalue>gpointer</returnvalue></link>            e_memchunk_alloc0                   (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);</programlisting>
122
 
<para>
123
 
</para><variablelist role="params">
124
 
<varlistentry><term><parameter>m</parameter>&#160;:</term>
125
 
<listitem><simpara>
126
 
</simpara></listitem></varlistentry>
127
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
128
 
</simpara></listitem></varlistentry>
129
 
</variablelist></refsect2>
130
 
<refsect2 id="e-memchunk-free" role="function">
131
 
<title>e_memchunk_free ()</title>
132
 
<indexterm zone="e-memchunk-free"><primary>e_memchunk_free</primary></indexterm>
133
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_memchunk_free                     (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>,
134
 
                                                         <parameter><link linkend="gpointer"><type>gpointer</type></link> mem</parameter>);</programlisting>
135
 
<para>
136
 
Free a single atom back to the free pool of atoms in the given
137
 
memchunk.</para>
138
 
<variablelist role="params">
139
 
<varlistentry><term><parameter>mem</parameter>&#160;:</term>
140
 
<listitem><simpara>Address of atom to free.
141
 
</simpara></listitem></varlistentry>
142
 
</variablelist></refsect2>
143
 
<refsect2 id="e-memchunk-empty" role="function">
144
 
<title>e_memchunk_empty ()</title>
145
 
<indexterm zone="e-memchunk-empty"><primary>e_memchunk_empty</primary></indexterm>
146
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_memchunk_empty                    (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);</programlisting>
147
 
<para>
148
 
Clean out the memchunk buffers.  Marks all allocated memory as free blocks,
149
 
but does not give it back to the system.  Can be used if the memchunk
150
 
is to be used repeatedly.</para>
151
 
</refsect2>
152
 
<refsect2 id="e-memchunk-clean" role="function">
153
 
<title>e_memchunk_clean ()</title>
154
 
<indexterm zone="e-memchunk-clean"><primary>e_memchunk_clean</primary></indexterm>
155
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_memchunk_clean                    (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);</programlisting>
156
 
<para>
157
 
Scan all empty blocks and check for blocks which can be free'd
158
 
back to the system.
159
 
</para>
160
 
<para>
161
 
This routine may take a while to run if there are many allocated
162
 
memory blocks (if the total number of allocations is many times
163
 
greater than atomcount).</para>
164
 
</refsect2>
165
 
<refsect2 id="e-memchunk-destroy" role="function">
166
 
<title>e_memchunk_destroy ()</title>
167
 
<indexterm zone="e-memchunk-destroy"><primary>e_memchunk_destroy</primary></indexterm>
168
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_memchunk_destroy                  (<parameter><link linkend="EMemChunk"><type>EMemChunk</type></link> *m</parameter>);</programlisting>
169
 
<para>
170
 
Free the memchunk header, and all associated memory.</para>
171
 
</refsect2>
172
 
<refsect2 id="EMemPool" role="struct">
173
 
<title>EMemPool</title>
174
 
<indexterm zone="EMemPool"><primary>EMemPool</primary></indexterm>
175
 
<programlisting>typedef struct _EMemPool EMemPool;</programlisting>
176
 
<para>
177
 
</para></refsect2>
178
 
<refsect2 id="EMemPoolFlags" role="enum">
179
 
<title>enum EMemPoolFlags</title>
180
 
<indexterm zone="EMemPoolFlags"><primary>EMemPoolFlags</primary></indexterm>
181
 
<programlisting>typedef enum {
182
 
        E_MEMPOOL_ALIGN_STRUCT = 0,&#160;/* allocate to native structure alignment */
183
 
        E_MEMPOOL_ALIGN_WORD = 1,&#160;/* allocate to words - 16 bit alignment */
184
 
        E_MEMPOOL_ALIGN_BYTE = 2,&#160;/* allocate to bytes - 8 bit alignment */
185
 
        E_MEMPOOL_ALIGN_MASK = 3&#160;/* which bits determine the alignment information */
186
 
} EMemPoolFlags;
187
 
</programlisting>
188
 
<para>
189
 
</para></refsect2>
190
 
<refsect2 id="e-mempool-new" role="function">
191
 
<title>e_mempool_new ()</title>
192
 
<indexterm zone="e-mempool-new"><primary>e_mempool_new</primary></indexterm>
193
 
<programlisting><link linkend="EMemPool"><returnvalue>EMemPool</returnvalue></link> *          e_mempool_new                       (<parameter><link linkend="gint"><type>gint</type></link> blocksize</parameter>,
194
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> threshold</parameter>,
195
 
                                                         <parameter><link linkend="EMemPoolFlags"><type>EMemPoolFlags</type></link> flags</parameter>);</programlisting>
196
 
<para>
197
 
Create a new mempool header.  Mempools can be used to efficiently
198
 
allocate data which can then be freed as a whole.
199
 
</para>
200
 
<para>
201
 
Mempools can also be used to efficiently allocate arbitrarily
202
 
aligned data (such as strings) without incurring the space overhead
203
 
of aligning each allocation (which is not required for strings).
204
 
</para>
205
 
<para>
206
 
However, each allocation cannot be freed individually, only all
207
 
or nothing.</para>
208
 
<variablelist role="params">
209
 
<varlistentry><term><parameter>blocksize</parameter>&#160;:</term>
210
 
<listitem><simpara>The base blocksize to use for all system alocations.
211
 
</simpara></listitem></varlistentry>
212
 
<varlistentry><term><parameter>threshold</parameter>&#160;:</term>
213
 
<listitem><simpara>If the allocation exceeds the threshold, then it is
214
 
allocated separately and stored in a separate list.
215
 
</simpara></listitem></varlistentry>
216
 
<varlistentry><term><parameter>flags</parameter>&#160;:</term>
217
 
<listitem><simpara>Alignment options: E_MEMPOOL_ALIGN_STRUCT uses native
218
 
struct alignment, E_MEMPOOL_ALIGN_WORD aligns to 16 bits (2 bytes),
219
 
and E_MEMPOOL_ALIGN_BYTE aligns to the nearest byte.  The default
220
 
is to align to native structures.
221
 
</simpara></listitem></varlistentry>
222
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
223
 
</simpara></listitem></varlistentry>
224
 
</variablelist></refsect2>
225
 
<refsect2 id="e-mempool-alloc" role="function">
226
 
<title>e_mempool_alloc ()</title>
227
 
<indexterm zone="e-mempool-alloc"><primary>e_mempool_alloc</primary></indexterm>
228
 
<programlisting><link linkend="gpointer"><returnvalue>gpointer</returnvalue></link>            e_mempool_alloc                     (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>,
229
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> size</parameter>);</programlisting>
230
 
<para>
231
 
Allocate a new data block in the mempool.  Size will
232
 
be rounded up to the mempool's alignment restrictions
233
 
before being used.</para>
234
 
<variablelist role="params">
235
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
236
 
</simpara></listitem></varlistentry>
237
 
</variablelist></refsect2>
238
 
<refsect2 id="e-mempool-strdup" role="function">
239
 
<title>e_mempool_strdup ()</title>
240
 
<indexterm zone="e-mempool-strdup"><primary>e_mempool_strdup</primary></indexterm>
241
 
<programlisting><link linkend="gchar"><returnvalue>gchar</returnvalue></link> *             e_mempool_strdup                    (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>,
242
 
                                                         <parameter>const <link linkend="gchar"><type>gchar</type></link> *str</parameter>);</programlisting>
243
 
<para>
244
 
</para><variablelist role="params">
245
 
<varlistentry><term><parameter>pool</parameter>&#160;:</term>
246
 
<listitem><simpara>
247
 
</simpara></listitem></varlistentry>
248
 
<varlistentry><term><parameter>str</parameter>&#160;:</term>
249
 
<listitem><simpara>
250
 
</simpara></listitem></varlistentry>
251
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
252
 
</simpara></listitem></varlistentry>
253
 
</variablelist></refsect2>
254
 
<refsect2 id="e-mempool-flush" role="function">
255
 
<title>e_mempool_flush ()</title>
256
 
<indexterm zone="e-mempool-flush"><primary>e_mempool_flush</primary></indexterm>
257
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_mempool_flush                     (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>,
258
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> freeall</parameter>);</programlisting>
259
 
<para>
260
 
Flush used memory and mark allocated blocks as free.
261
 
</para>
262
 
<para>
263
 
If <parameter>freeall</parameter> is <link linkend="TRUE:CAPS"><type>TRUE</type></link>, then all allocated blocks are free'd
264
 
as well.  Otherwise only blocks above the threshold are
265
 
actually freed, and the others are simply marked as empty.</para>
266
 
<variablelist role="params">
267
 
<varlistentry><term><parameter>freeall</parameter>&#160;:</term>
268
 
<listitem><simpara>Free all system allocated blocks as well.
269
 
</simpara></listitem></varlistentry>
270
 
</variablelist></refsect2>
271
 
<refsect2 id="e-mempool-destroy" role="function">
272
 
<title>e_mempool_destroy ()</title>
273
 
<indexterm zone="e-mempool-destroy"><primary>e_mempool_destroy</primary></indexterm>
274
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_mempool_destroy                   (<parameter><link linkend="EMemPool"><type>EMemPool</type></link> *pool</parameter>);</programlisting>
275
 
<para>
276
 
Free all memory associated with a mempool.</para>
277
 
</refsect2>
278
 
<refsect2 id="EStrv" role="struct">
279
 
<title>EStrv</title>
280
 
<indexterm zone="EStrv"><primary>EStrv</primary></indexterm>
281
 
<programlisting>typedef struct _EStrv EStrv;</programlisting>
282
 
<para>
283
 
</para></refsect2>
284
 
<refsect2 id="e-strv-new" role="function">
285
 
<title>e_strv_new ()</title>
286
 
<indexterm zone="e-strv-new"><primary>e_strv_new</primary></indexterm>
287
 
<programlisting><link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             e_strv_new                          (<parameter><link linkend="gint"><type>gint</type></link> size</parameter>);</programlisting>
288
 
<para>
289
 
Create a new strv (string array) header.  strv's can be used to
290
 
create and work with arrays of strings that can then be compressed
291
 
into a space-efficient static structure.  This is useful
292
 
where a number of strings are to be stored for lookup, and not
293
 
generally edited afterwards.
294
 
</para>
295
 
<para>
296
 
The size limit is currently 254 elements.  This will probably not
297
 
change as arrays of this size suffer significant performance
298
 
penalties when looking up strings with high indices.</para>
299
 
<variablelist role="params">
300
 
<varlistentry><term><parameter>size</parameter>&#160;:</term>
301
 
<listitem><simpara>The number of elements in the strv.  Currently this is limited
302
 
to 254 elements.
303
 
</simpara></listitem></varlistentry>
304
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
305
 
</simpara></listitem></varlistentry>
306
 
</variablelist></refsect2>
307
 
<refsect2 id="e-strv-set-ref" role="function">
308
 
<title>e_strv_set_ref ()</title>
309
 
<indexterm zone="e-strv-set-ref"><primary>e_strv_set_ref</primary></indexterm>
310
 
<programlisting><link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             e_strv_set_ref                      (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
311
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
312
 
                                                         <parameter><link linkend="gchar"><type>gchar</type></link> *str</parameter>);</programlisting>
313
 
<para>
314
 
Set a string array element by reference.  The string
315
 
is not copied until the array is packed.
316
 
</para>
317
 
<para>
318
 
If <parameter>strv</parameter> has been packed, then it is unpacked ready
319
 
for more inserts, and should be packed again once finished with.
320
 
The memory used by the original <parameter>strv</parameter> is not freed until
321
 
the new strv is packed, or freed itself.</para>
322
 
<variablelist role="params">
323
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A new EStrv if the strv has already
324
 
been packed, otherwise <parameter>strv</parameter>.
325
 
</simpara></listitem></varlistentry>
326
 
</variablelist></refsect2>
327
 
<refsect2 id="e-strv-set-ref-free" role="function">
328
 
<title>e_strv_set_ref_free ()</title>
329
 
<indexterm zone="e-strv-set-ref-free"><primary>e_strv_set_ref_free</primary></indexterm>
330
 
<programlisting><link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             e_strv_set_ref_free                 (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
331
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
332
 
                                                         <parameter><link linkend="gchar"><type>gchar</type></link> *str</parameter>);</programlisting>
333
 
<para>
334
 
Set a string by reference, similar to set_ref, but also
335
 
free the string when finished with it.  The string
336
 
is not copied until the strv is packed, and not at
337
 
all if the index is overwritten.</para>
338
 
<variablelist role="params">
339
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <parameter>strv</parameter> if already unpacked, otherwise an packed
340
 
EStrv.
341
 
</simpara></listitem></varlistentry>
342
 
</variablelist></refsect2>
343
 
<refsect2 id="e-strv-set" role="function">
344
 
<title>e_strv_set ()</title>
345
 
<indexterm zone="e-strv-set"><primary>e_strv_set</primary></indexterm>
346
 
<programlisting><link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             e_strv_set                          (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
347
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
348
 
                                                         <parameter>const <link linkend="gchar"><type>gchar</type></link> *str</parameter>);</programlisting>
349
 
<para>
350
 
Set a string array reference.  The string <parameter>str</parameter> is copied
351
 
into the string array at location <parameter>index</parameter>.
352
 
</para>
353
 
<para>
354
 
If <parameter>strv</parameter> has been packed, then it is unpacked ready
355
 
for more inserts, and should be packed again once finished with.</para>
356
 
<variablelist role="params">
357
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A new EStrv if the strv has already
358
 
been packed, otherwise <parameter>strv</parameter>.
359
 
</simpara></listitem></varlistentry>
360
 
</variablelist></refsect2>
361
 
<refsect2 id="e-strv-pack" role="function">
362
 
<title>e_strv_pack ()</title>
363
 
<indexterm zone="e-strv-pack"><primary>e_strv_pack</primary></indexterm>
364
 
<programlisting><link linkend="EStrv"><returnvalue>EStrv</returnvalue></link> *             e_strv_pack                         (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>);</programlisting>
365
 
<para>
366
 
Pack the <parameter>strv</parameter> into a space efficient structure for later lookup.
367
 
</para>
368
 
<para>
369
 
All strings are packed into a single allocated block, separated
370
 
by single \0 characters, together with a count byte.</para>
371
 
<variablelist role="params">
372
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
373
 
</simpara></listitem></varlistentry>
374
 
</variablelist></refsect2>
375
 
<refsect2 id="e-strv-get" role="function">
376
 
<title>e_strv_get ()</title>
377
 
<indexterm zone="e-strv-get"><primary>e_strv_get</primary></indexterm>
378
 
<programlisting>const <link linkend="gchar"><returnvalue>gchar</returnvalue></link> *       e_strv_get                          (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>,
379
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>);</programlisting>
380
 
<para>
381
 
Retrieve a string by index.  This function works
382
 
identically on both packed and unpacked strv's, although
383
 
may be much slower on a packed strv.</para>
384
 
<variablelist role="params">
385
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
386
 
</simpara></listitem></varlistentry>
387
 
</variablelist></refsect2>
388
 
<refsect2 id="e-strv-destroy" role="function">
389
 
<title>e_strv_destroy ()</title>
390
 
<indexterm zone="e-strv-destroy"><primary>e_strv_destroy</primary></indexterm>
391
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_strv_destroy                      (<parameter><link linkend="EStrv"><type>EStrv</type></link> *strv</parameter>);</programlisting>
392
 
<para>
393
 
Free a strv and all associated memory.  Works on packed
394
 
or unpacked strv's.</para>
395
 
</refsect2>
396
 
<refsect2 id="EPoolv" role="struct">
397
 
<title>EPoolv</title>
398
 
<indexterm zone="EPoolv"><primary>EPoolv</primary></indexterm>
399
 
<programlisting>typedef struct _EPoolv EPoolv;</programlisting>
400
 
<para>
401
 
</para></refsect2>
402
 
<refsect2 id="e-poolv-new" role="function">
403
 
<title>e_poolv_new ()</title>
404
 
<indexterm zone="e-poolv-new"><primary>e_poolv_new</primary></indexterm>
405
 
<programlisting><link linkend="EPoolv"><returnvalue>EPoolv</returnvalue></link> *            e_poolv_new                         (<parameter><link linkend="guint"><type>guint</type></link> size</parameter>);</programlisting>
406
 
<para>
407
 
</para><variablelist role="params">
408
 
<varlistentry><term><parameter>size</parameter>&#160;:</term>
409
 
<listitem><simpara>
410
 
</simpara></listitem></varlistentry>
411
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
412
 
</simpara></listitem></varlistentry>
413
 
</variablelist></refsect2>
414
 
<refsect2 id="e-poolv-cpy" role="function">
415
 
<title>e_poolv_cpy ()</title>
416
 
<indexterm zone="e-poolv-cpy"><primary>e_poolv_cpy</primary></indexterm>
417
 
<programlisting><link linkend="EPoolv"><returnvalue>EPoolv</returnvalue></link> *            e_poolv_cpy                         (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *dest</parameter>,
418
 
                                                         <parameter>const <link linkend="EPoolv"><type>EPoolv</type></link> *src</parameter>);</programlisting>
419
 
<para>
420
 
Copy the contents of a pooled string vector</para>
421
 
<variablelist role="params">
422
 
<varlistentry><term><parameter>dest</parameter>&#160;:</term>
423
 
<listitem><simpara>destination pooled string vector
424
 
</simpara></listitem></varlistentry>
425
 
<varlistentry><term><parameter>src</parameter>&#160;:</term>
426
 
<listitem><simpara>source pooled string vector
427
 
</simpara></listitem></varlistentry>
428
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <parameter>dest</parameter>, which may be re-allocated if the strings
429
 
are different lengths.
430
 
</simpara></listitem></varlistentry>
431
 
</variablelist></refsect2>
432
 
<refsect2 id="e-poolv-set" role="function">
433
 
<title>e_poolv_set ()</title>
434
 
<indexterm zone="e-poolv-set"><primary>e_poolv_set</primary></indexterm>
435
 
<programlisting><link linkend="EPoolv"><returnvalue>EPoolv</returnvalue></link> *            e_poolv_set                         (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *poolv</parameter>,
436
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>,
437
 
                                                         <parameter><link linkend="gchar"><type>gchar</type></link> *str</parameter>,
438
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> freeit</parameter>);</programlisting>
439
 
<para>
440
 
Set a string vector reference.  If the caller will no longer be
441
 
referencing the string, freeit should be TRUE.  Otherwise, this
442
 
will duplicate the string if it is not found in the pool.</para>
443
 
<variablelist role="params">
444
 
<varlistentry><term><parameter>poolv</parameter>&#160;:</term>
445
 
<listitem><simpara>pooled string vector
446
 
</simpara></listitem></varlistentry>
447
 
<varlistentry><term><parameter>index</parameter>&#160;:</term>
448
 
<listitem><simpara>index in vector of string
449
 
</simpara></listitem></varlistentry>
450
 
<varlistentry><term><parameter>str</parameter>&#160;:</term>
451
 
<listitem><simpara>string to set
452
 
</simpara></listitem></varlistentry>
453
 
<varlistentry><term><parameter>freeit</parameter>&#160;:</term>
454
 
<listitem><simpara>whether the caller is releasing its reference to the
455
 
string
456
 
</simpara></listitem></varlistentry>
457
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <parameter>poolv</parameter>
458
 
</simpara></listitem></varlistentry>
459
 
</variablelist></refsect2>
460
 
<refsect2 id="e-poolv-get" role="function">
461
 
<title>e_poolv_get ()</title>
462
 
<indexterm zone="e-poolv-get"><primary>e_poolv_get</primary></indexterm>
463
 
<programlisting>const <link linkend="gchar"><returnvalue>gchar</returnvalue></link> *       e_poolv_get                         (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *poolv</parameter>,
464
 
                                                         <parameter><link linkend="gint"><type>gint</type></link> index</parameter>);</programlisting>
465
 
<para>
466
 
Retrieve a string by index.  This could possibly just be a macro.
467
 
</para>
468
 
<para>
469
 
Since the pool is never freed, this string does not need to be
470
 
duplicated, but should not be modified.</para>
471
 
<variablelist role="params">
472
 
<varlistentry><term><parameter>poolv</parameter>&#160;:</term>
473
 
<listitem><simpara>pooled string vector
474
 
</simpara></listitem></varlistentry>
475
 
<varlistentry><term><parameter>index</parameter>&#160;:</term>
476
 
<listitem><simpara>index in vector of string
477
 
</simpara></listitem></varlistentry>
478
 
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> string at that index.
479
 
</simpara></listitem></varlistentry>
480
 
</variablelist></refsect2>
481
 
<refsect2 id="e-poolv-destroy" role="function">
482
 
<title>e_poolv_destroy ()</title>
483
 
<indexterm zone="e-poolv-destroy"><primary>e_poolv_destroy</primary></indexterm>
484
 
<programlisting><link linkend="void"><returnvalue>void</returnvalue></link>                e_poolv_destroy                     (<parameter><link linkend="EPoolv"><type>EPoolv</type></link> *poolv</parameter>);</programlisting>
485
 
<para>
486
 
Free a pooled string vector.  This doesn't free the strings from
487
 
the vector, however.</para>
488
 
<variablelist role="params">
489
 
<varlistentry><term><parameter>poolv</parameter>&#160;:</term>
490
 
<listitem><simpara>pooled string vector to free
491
 
</simpara></listitem></varlistentry>
492
 
</variablelist></refsect2>
493
 
 
494
 
</refsect1>
495
 
 
496
 
</refentry>