/*
 * Copyright (C) 2001, Ximian Inc.
 *
 * Authors: Michael Zucchi <notzed@ximian.com>
 *	    Jacob Berkman <jacob@ximian.com>
 *
 * This program is free software; you can redistribute it and/or 
 * modify it under the terms of version 2 of the GNU General Public 
 * License as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA
 */

#ifndef _E_MEMORY_H
#define _E_MEMORY_H

/* memchunks - allocate/free fixed-size blocks of memory */
/* this is like gmemchunk, only faster and less overhead (only 4 bytes for every atomcount allocations) */
typedef struct _EMemChunk EMemChunk;

EMemChunk *e_memchunk_new(int atomcount, int atomsize);
void *e_memchunk_alloc(EMemChunk *m);
void *e_memchunk_alloc0(EMemChunk *m);
void e_memchunk_free(EMemChunk *m, void *mem);
void e_memchunk_empty(EMemChunk *m);
void e_memchunk_clean(EMemChunk *m);
void e_memchunk_destroy(EMemChunk *m);

/* mempools - allocate variable sized blocks of memory, and free as one */
/* allocation is very fast, but cannot be freed individually */
typedef struct _EMemPool EMemPool;
typedef enum {
	E_MEMPOOL_ALIGN_STRUCT = 0,	/* allocate to native structure alignment */
	E_MEMPOOL_ALIGN_WORD = 1,	/* allocate to words - 16 bit alignment */
	E_MEMPOOL_ALIGN_BYTE = 2,	/* allocate to bytes - 8 bit alignment */
	E_MEMPOOL_ALIGN_MASK = 3, /* which bits determine the alignment information */
} EMemPoolFlags;

EMemPool *e_mempool_new(int blocksize, int threshold, EMemPoolFlags flags);
void *e_mempool_alloc(EMemPool *pool, int size);
char *e_mempool_strdup(EMemPool *pool, const char *str);
void e_mempool_flush(EMemPool *pool, int freeall);
void e_mempool_destroy(EMemPool *pool);

/* strv's string arrays that can be efficiently modified and then compressed mainly for retrival */
/* building is relatively fast, once compressed it takes the minimum amount of memory possible to store */
typedef struct _EStrv EStrv;

EStrv *e_strv_new(int size);
EStrv *e_strv_set_ref(EStrv *strv, int index, char *str);
EStrv *e_strv_set_ref_free(EStrv *strv, int index, char *str);
EStrv *e_strv_set(EStrv *strv, int index, const char *str);
EStrv *e_strv_pack(EStrv *strv);
char *e_strv_get(EStrv *strv, int index);
void e_strv_destroy(EStrv *strv);

/* poolv's are similar to strv's, but they store common strings */
typedef struct _EPoolv EPoolv;

EPoolv *e_poolv_new(unsigned int size);
EPoolv *e_poolv_cpy(EPoolv *dest, const EPoolv *src);
EPoolv *e_poolv_set(EPoolv *poolv, int index, char *str, int freeit);
const char *e_poolv_get(EPoolv *poolv, int index);
void e_poolv_destroy(EPoolv *poolv);

#endif /* ! _E_MEMORY_H */
l/electron4/files/y18n-3.2.2</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.3'>dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.3</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.4'>dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.4</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8'>dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/lodash-4.17.19'>dependabot/npm_and_yarn/devel/electron6/files/lodash-4.17.19</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/lodash.merge-4.6.2'>dependabot/npm_and_yarn/devel/electron6/files/lodash.merge-4.6.2</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/node-fetch-2.6.1'>dependabot/npm_and_yarn/devel/electron6/files/node-fetch-2.6.1</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/serve-10.1.2'>dependabot/npm_and_yarn/devel/electron6/files/serve-10.1.2</option>
<option value='gnome-3.22'>gnome-3.22</option>
<option value='gnome-3.24'>gnome-3.24</option>
<option value='gnome-3.26'>gnome-3.26</option>
<option value='gnome-3.28' selected='selected'>gnome-3.28</option>
<option value='gnome-3.32'>gnome-3.32</option>
<option value='gnome-3.36'>gnome-3.36</option>
<option value='gstreamer'>gstreamer</option>
<option value='gstreamer-1.16'>gstreamer-1.16</option>
<option value='gstreamer0.10-removal'>gstreamer0.10-removal</option>
<option value='main'>main</option>
<option value='master'>master</option>
<option value='mate-1.16'>mate-1.16</option>
<option value='mate-1.18'>mate-1.18</option>
<option value='mate-1.20'>mate-1.20</option>
<option value='mate-1.22'>mate-1.22</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>FreeBSD GNOME current development ports (https://github.com/freebsd/freebsd-ports-gnome)</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/about/?h=gnome-3.28'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/?h=gnome-3.28'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/refs/?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/py-jonpy?h=gnome-3.28'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/tree/www/py-jonpy?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/www/py-jonpy?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/diff/www/py-jonpy?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/stats/www/py-jonpy?h=gnome-3.28'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/py-jonpy'>
<input type='hidden' name='h' value='gnome-3.28'/><input type='hidden' name='id' value='d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>www</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/py-jonpy?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0'>py-jonpy</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/www/py-jonpy?h=gnome-3.28&amp;id=d5b1741a41bcbbfffbbf5ec34e870f8b52b37de0&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>