<HTML ><HEAD ><TITLE >recycler</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ "><LINK REL="HOME" TITLE="Prelude API Reference Manual" HREF="book1.html"><LINK REL="UP" TITLE="Prelude Core functions" HREF="prelude-core.html"><LINK REL="PREVIOUS" TITLE="pconfig" HREF="prelude-pconfig.html"><LINK REL="NEXT" TITLE="rsave" HREF="prelude-rsave.html"></HEAD ><BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" BGCOLOR="#000000" CELLPADDING="1" CELLSPACING="0" ><TR ><TH COLSPAN="4" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="5" >Prelude API Reference Manual</FONT ></TH ></TR ><TR ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="left" ><A HREF="prelude-pconfig.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><<< Previous Page</B ></FONT ></A ></TD ><TD WIDTH="25%" BGCOLOR="#0000C0" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="book1.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Home</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#00C000" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="prelude-core.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Up</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="right" ><A HREF="prelude-rsave.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Next Page >>></B ></FONT ></A ></TD ></TR ></TABLE ></DIV ><H1 ><A NAME="PRELUDE-RECYCLER">recycler</H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN1572" ></A ><H2 >Name</H2 >recycler -- </DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN1575"><H2 >Synopsis</H2 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="SYNOPSIS" > recycler_t* <A HREF="prelude-recycler.html#RECYCLERCREATE" >RecyclerCreate</A > (size_t ChunkSize, unsigned int ChunksMax); int <A HREF="prelude-recycler.html#RECYCLERDESTROY" >RecyclerDestroy</A > (recycler_t *Recycler, int Force); int <A HREF="prelude-recycler.html#RECYCLERGROW" >RecyclerGrow</A > (recycler_t *Recycler, unsigned int ChunksCount); int <A HREF="prelude-recycler.html#RECYCLERSHRINK" >RecyclerShrink</A > (recycler_t *Recycler, unsigned int ChunksCount); void* <A HREF="prelude-recycler.html#RECYCLERGETCHUNK" >RecyclerGetChunk</A > (recycler_t *Recycler); void <A HREF="prelude-recycler.html#RECYCLERLOCKCHUNK" >RecyclerLockChunk</A > (const void *Data); void <A HREF="prelude-recycler.html#RECYCLERRELEASECHUNK" >RecyclerReleaseChunk</A > (const void *Data); int <A HREF="prelude-recycler.html#RECYCLERISLOCKED" >RecyclerIsLocked</A > (const void *data); #define <A HREF="prelude-recycler.html#RECYCLERGETCHUNKSMAX" >RecyclerGetChunksMax</A > (recycler) #define <A HREF="prelude-recycler.html#RECYCLERGETCHUNKSCOUNT" >RecyclerGetChunksCount</A > (recycler) #define <A HREF="prelude-recycler.html#RECYCLERHASFREECHUNKS" >RecyclerHasFreeChunks</A > (recycler)</PRE ></TD ></TR ></TABLE ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN1595" ></A ><H2 >Description</H2 ><P ></P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN1598" ></A ><H2 >Details</H2 ><DIV CLASS="REFSECT2" ><A NAME="AEN1600" ></A ><H3 ><A NAME="RECYCLERCREATE" ></A >RecyclerCreate ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >recycler_t* RecyclerCreate (size_t ChunkSize, unsigned int ChunksMax);</PRE ></TD ></TR ></TABLE ><P >Create a recycler. It will be capable to handle ChunksMax elements of size ChunkSize bytes.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1608"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >ChunkSize</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > The size of one element</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >ChunksMax</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > The number of element to be created</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > An handle or NULL for error (see errno in this case).</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1625" ></A ><H3 ><A NAME="RECYCLERDESTROY" ></A >RecyclerDestroy ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >int RecyclerDestroy (recycler_t *Recycler, int Force);</PRE ></TD ></TR ></TABLE ><P >Liberate the memory used by a recycler. After this function return, the passed handle is invalid. Force tell <A HREF="prelude-recycler.html#RECYCLERDESTROY" >RecyclerDestroy</A >() to free the recycler even if it is not empty.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1633"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > A recycler</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Force</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > A boolean</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > 0 for success, -1 for error, with errno == EINVAL(bad handle), ENOTEMPTY(some chunk were not released).</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1650" ></A ><H3 ><A NAME="RECYCLERGROW" ></A >RecyclerGrow ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >int RecyclerGrow (recycler_t *Recycler, unsigned int ChunksCount);</PRE ></TD ></TR ></TABLE ><P >Add ChunksCount new free elements to a recycler.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1657"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > A recycler to grow</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >ChunksCount</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > Number of new element</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > 0 on succes, or -1 on error (see errno).</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1674" ></A ><H3 ><A NAME="RECYCLERSHRINK" ></A >RecyclerShrink ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >int RecyclerShrink (recycler_t *Recycler, unsigned int ChunksCount);</PRE ></TD ></TR ></TABLE ><P >Remove ChunksCount new free elements to a recycler. Be carefull: the element returned by the last <A HREF="prelude-recycler.html#RECYCLERGETCHUNK" >RecyclerGetChunk</A >() call will be free if it wasn't locked.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1682"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > A recycler to shrink</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >ChunksCount</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > Number of elements to remove.</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > 0 for success, -1 for error (see errno).</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1699" ></A ><H3 ><A NAME="RECYCLERGETCHUNK" ></A >RecyclerGetChunk ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >void* RecyclerGetChunk (recycler_t *Recycler);</PRE ></TD ></TR ></TABLE ><P >The returned element isn't locked: a second call to <A HREF="prelude-recycler.html#RECYCLERGETCHUNK" >RecyclerGetChunk</A >() without a call to <A HREF="prelude-recycler.html#RECYCLERLOCKCHUNK" >RecyclerLockChunk</A >() will return the same element.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1708"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > A recycler to get a chunk from</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1717" ></A ><H3 ><A NAME="RECYCLERLOCKCHUNK" ></A >RecyclerLockChunk ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >void RecyclerLockChunk (const void *Data);</PRE ></TD ></TR ></TABLE ><P >Lock a recycler element to avoid it to be reused.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1723"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Data</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > The data to be locked.</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1732" ></A ><H3 ><A NAME="RECYCLERRELEASECHUNK" ></A >RecyclerReleaseChunk ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >void RecyclerReleaseChunk (const void *Data);</PRE ></TD ></TR ></TABLE ><P >Liberate an element from recycler for it to be reused.</P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1738"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >Data</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > An element to be released</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1747" ></A ><H3 ><A NAME="RECYCLERISLOCKED" ></A >RecyclerIsLocked ()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >int RecyclerIsLocked (const void *data);</PRE ></TD ></TR ></TABLE ><P ></P ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1753"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >data</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > Data from a recycler</TD ></TR ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > How many reference to this chunk exist.</TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1766" ></A ><H3 ><A NAME="RECYCLERGETCHUNKSMAX" ></A >RecyclerGetChunksMax()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >#define RecyclerGetChunksMax(recycler) recycler->max</PRE ></TD ></TR ></TABLE ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1771"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > </TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1780" ></A ><H3 ><A NAME="RECYCLERGETCHUNKSCOUNT" ></A >RecyclerGetChunksCount()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >#define RecyclerGetChunksCount(recycler) recycler->count</PRE ></TD ></TR ></TABLE ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1785"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > </TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN1794" ></A ><H3 ><A NAME="RECYCLERHASFREECHUNKS" ></A >RecyclerHasFreeChunks()</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >#define RecyclerHasFreeChunks(recycler) (Recycler->freelist != NULL)</PRE ></TD ></TR ></TABLE ><P ></P ><DIV CLASS="INFORMALTABLE" ><A NAME="AEN1799"><P ></P ><TABLE BORDER="0" WIDTH="100%" BGCOLOR="#FFD0D0" CELLSPACING="0" CELLPADDING="4" CLASS="CALSTABLE" ><TBODY ><TR ><TD WIDTH="20%" ALIGN="RIGHT" VALIGN="TOP" ><TT CLASS="PARAMETER" ><I >recycler</I ></TT > :</TD ><TD WIDTH="80%" ALIGN="LEFT" VALIGN="TOP" > </TD ></TR ></TBODY ></TABLE ><P ></P ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><BR CLEAR="all"><BR><TABLE WIDTH="100%" BORDER="0" BGCOLOR="#000000" CELLPADDING="1" CELLSPACING="0" ><TR ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="left" ><A HREF="prelude-pconfig.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><<< Previous Page</B ></FONT ></A ></TD ><TD WIDTH="25%" BGCOLOR="#0000C0" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="book1.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Home</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#00C000" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="prelude-core.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Up</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="right" ><A HREF="prelude-rsave.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Next Page >>></B ></FONT ></A ></TD ></TR ><TR ><TD COLSPAN="2" ALIGN="left" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >pconfig</B ></FONT ></TD ><TD COLSPAN="2" ALIGN="right" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >rsave</B ></FONT ></TD ></TR ></TABLE ></DIV ></BODY ></HTML >