<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>rpm: rpmdb/merge.c File Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.7 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul></div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div> <h1>rpmdb/merge.c File Reference</h1><code>#include "<a class="el" href="system_8h-source.html">system.h</a>"</code><br> <p> <a href="merge_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#008f768518a29d3ec0dd62981e3c5f4c">NATURAL</a></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#4679d8ea8690999a6c6c7c0cb245c879">THRESHOLD</a> 16</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#311b7c01b830d898020683c59ece61c4">ISIZE</a> sizeof(int)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#69beff7cd62d1ee993c21243761488ca">PSIZE</a> sizeof(unsigned char *)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#051a432779099bda80967c93826ae722">ICOPY_LIST</a>(src, dst, last)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#aca9f4885070ac1e9a163486c14fd8f9">ICOPY_ELT</a>(src, dst, i)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#eec7783cc7cadd1f0685befbeaed6417">CCOPY_LIST</a>(src, dst, last)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#fbfba72834d31331a1681825083e73d6">CCOPY_ELT</a>(src, dst, i)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#09f20f7fa7a47004956e714043a1ab91">EVAL</a>(p)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#3ca5ecd34b04d6a243c054ac3a57f68d">swap</a>(a, b)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#418487752a9b9a1497617db75cb34920">reverse</a>(bot, top)</td></tr> <tr><td colspan="2"><br><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#b7718abfd6a277cf9f7018f395f0d9b7">insertionsort</a> (unsigned char *a, size_t n, size_t size, int(*cmp)(const void *, const void *))</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#7751dc5dca053b7c9f76ac43f415de4a">setup</a> (unsigned char *list1, unsigned char *list2, size_t n, size_t size, int(*cmp)(const void *, const void *))</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="merge_8c.html#d5b80d228a80a7b24e0013b92005fd95">mergesort</a> (void *base, size_t nmemb, size_t size, int(*cmp)(const void *, const void *))</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Mergesort, same arguments as qsort(2). <a href="#d5b80d228a80a7b24e0013b92005fd95"></a><br></td></tr> </table> <hr><h2>Define Documentation</h2> <a class="anchor" name="fbfba72834d31331a1681825083e73d6"></a><!-- doxytag: member="merge.c::CCOPY_ELT" ref="fbfba72834d31331a1681825083e73d6" args="(src, dst, i)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CCOPY_ELT </td> <td>(</td> <td class="paramtype">src, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">dst, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">i </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> \ *dst++ = *src++; \ <span class="keywordflow">while</span> (i -= 1) </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00074">74</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <a class="anchor" name="eec7783cc7cadd1f0685befbeaed6417"></a><!-- doxytag: member="merge.c::CCOPY_LIST" ref="eec7783cc7cadd1f0685befbeaed6417" args="(src, dst, last)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CCOPY_LIST </td> <td>(</td> <td class="paramtype">src, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">dst, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">last </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> \ *dst++ = *src++; \ <span class="keywordflow">while</span> (src < last) </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00070">70</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <a class="anchor" name="09f20f7fa7a47004956e714043a1ab91"></a><!-- doxytag: member="merge.c::EVAL" ref="09f20f7fa7a47004956e714043a1ab91" args="(p)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define EVAL </td> <td>(</td> <td class="paramtype">p </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment">(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **) \ ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)0 + \ (((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)p + <a class="code" href="merge_8c.html#69beff7cd62d1ee993c21243761488ca">PSIZE</a> - 1 - (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) 0) & ~(<a class="code" href="merge_8c.html#69beff7cd62d1ee993c21243761488ca">PSIZE</a> - 1))) </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00085">85</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>, and <a class="el" href="merge_8c-source.html#l00136">setup()</a>. </div> </div><p> <a class="anchor" name="aca9f4885070ac1e9a163486c14fd8f9"></a><!-- doxytag: member="merge.c::ICOPY_ELT" ref="aca9f4885070ac1e9a163486c14fd8f9" args="(src, dst, i)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define ICOPY_ELT </td> <td>(</td> <td class="paramtype">src, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">dst, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">i </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> \ *(<span class="keywordtype">int</span>*) dst = *(<span class="keywordtype">int</span>*) src, src += <a class="code" href="merge_8c.html#311b7c01b830d898020683c59ece61c4">ISIZE</a>, dst += <a class="code" href="merge_8c.html#311b7c01b830d898020683c59ece61c4">ISIZE</a>; \ <span class="keywordflow">while</span> (i -= <a class="code" href="merge_8c.html#311b7c01b830d898020683c59ece61c4">ISIZE</a>) </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00065">65</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <a class="anchor" name="051a432779099bda80967c93826ae722"></a><!-- doxytag: member="merge.c::ICOPY_LIST" ref="051a432779099bda80967c93826ae722" args="(src, dst, last)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define ICOPY_LIST </td> <td>(</td> <td class="paramtype">src, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">dst, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">last </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> \ *(<span class="keywordtype">int</span>*)dst = *(<span class="keywordtype">int</span>*)src, src += <a class="code" href="merge_8c.html#311b7c01b830d898020683c59ece61c4">ISIZE</a>, dst += <a class="code" href="merge_8c.html#311b7c01b830d898020683c59ece61c4">ISIZE</a>; \ <span class="keywordflow">while</span>(src < last) </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00061">61</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <a class="anchor" name="311b7c01b830d898020683c59ece61c4"></a><!-- doxytag: member="merge.c::ISIZE" ref="311b7c01b830d898020683c59ece61c4" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define ISIZE sizeof(int) </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00059">59</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <a class="anchor" name="008f768518a29d3ec0dd62981e3c5f4c"></a><!-- doxytag: member="merge.c::NATURAL" ref="008f768518a29d3ec0dd62981e3c5f4c" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define NATURAL </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00050">50</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. </div> </div><p> <a class="anchor" name="69beff7cd62d1ee993c21243761488ca"></a><!-- doxytag: member="merge.c::PSIZE" ref="69beff7cd62d1ee993c21243761488ca" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define PSIZE sizeof(unsigned char *) </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00060">60</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <a class="anchor" name="418487752a9b9a1497617db75cb34920"></a><!-- doxytag: member="merge.c::reverse" ref="418487752a9b9a1497617db75cb34920" args="(bot, top)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="rpminstall_8c.html#e6ebe94aa9f2d314eb937d8a3042763f">reverse</a> </td> <td>(</td> <td class="paramtype">bot, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">top </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment">{ \ s = top; \ <span class="keywordflow">do</span> { \ i = size; \ <span class="keywordflow">do</span> { \ tmp = *bot; *bot++ = *s; *s++ = tmp; \ } <span class="keywordflow">while</span> (--i); \ s -= size2; \ } <span class="keywordflow">while</span>(bot < s); \ } </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00097">97</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00136">setup()</a>. </div> </div><p> <a class="anchor" name="3ca5ecd34b04d6a243c054ac3a57f68d"></a><!-- doxytag: member="merge.c::swap" ref="3ca5ecd34b04d6a243c054ac3a57f68d" args="(a, b)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define swap </td> <td>(</td> <td class="paramtype">a, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">b </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment">{ \ s = b; \ i = size; \ <span class="keywordflow">do</span> { \ tmp = *a; *a++ = *s; *s++ = tmp; \ } <span class="keywordflow">while</span> (--i); \ a -= size; \ } </pre></div> <p> Definition at line <a class="el" href="merge_8c-source.html#l00089">89</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00113">insertionsort()</a>, and <a class="el" href="merge_8c-source.html#l00136">setup()</a>. </div> </div><p> <a class="anchor" name="4679d8ea8690999a6c6c7c0cb245c879"></a><!-- doxytag: member="merge.c::THRESHOLD" ref="4679d8ea8690999a6c6c7c0cb245c879" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define THRESHOLD 16 </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00051">51</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00136">setup()</a>. </div> </div><p> <hr><h2>Function Documentation</h2> <a class="anchor" name="b7718abfd6a277cf9f7018f395f0d9b7"></a><!-- doxytag: member="merge.c::insertionsort" ref="b7718abfd6a277cf9f7018f395f0d9b7" args="(unsigned char *a, size_t n, size_t size, int(*cmp)(const void *, const void *))" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static void insertionsort </td> <td>(</td> <td class="paramtype">unsigned char * </td> <td class="paramname"> <em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>n</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int(*)(const void *, const void *) </td> <td class="paramname"> <em>cmp</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00113">113</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> References <a class="el" href="merge_8c-source.html#l00089">swap</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00136">setup()</a>. </div> </div><p> <a class="anchor" name="d5b80d228a80a7b24e0013b92005fd95"></a><!-- doxytag: member="merge.c::mergesort" ref="d5b80d228a80a7b24e0013b92005fd95" args="(void *base, size_t nmemb, size_t size, int(*cmp)(const void *, const void *))" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int mergesort </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"> <em>base</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>nmemb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int(*)(const void *, const void *) </td> <td class="paramname"> <em>cmp</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Mergesort, same arguments as qsort(2). <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00208">208</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> References <a class="el" href="merge_8c-source.html#l00074">CCOPY_ELT</a>, <a class="el" href="merge_8c-source.html#l00070">CCOPY_LIST</a>, <a class="el" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>, <a class="el" href="merge_8c-source.html#l00085">EVAL</a>, <a class="el" href="merge_8c-source.html#l00065">ICOPY_ELT</a>, <a class="el" href="merge_8c-source.html#l00061">ICOPY_LIST</a>, <a class="el" href="merge_8c-source.html#l00059">ISIZE</a>, <a class="el" href="merge_8c-source.html#l00060">PSIZE</a>, and <a class="el" href="merge_8c-source.html#l00136">setup()</a>. <p> Referenced by <a class="el" href="rpmdb_8c-source.html#l02388">rpmdbSortIterator()</a>. </div> </div><p> <a class="anchor" name="7751dc5dca053b7c9f76ac43f415de4a"></a><!-- doxytag: member="merge.c::setup" ref="7751dc5dca053b7c9f76ac43f415de4a" args="(unsigned char *list1, unsigned char *list2, size_t n, size_t size, int(*cmp)(const void *, const void *))" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static void setup </td> <td>(</td> <td class="paramtype">unsigned char * </td> <td class="paramname"> <em>list1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned char * </td> <td class="paramname"> <em>list2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>n</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int(*)(const void *, const void *) </td> <td class="paramname"> <em>cmp</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="merge_8c-source.html#l00136">136</a> of file <a class="el" href="merge_8c-source.html">merge.c</a>. <p> References <a class="el" href="merge_8c-source.html#l00085">EVAL</a>, <a class="el" href="merge_8c-source.html#l00113">insertionsort()</a>, <a class="el" href="merge_8c-source.html#l00097">reverse</a>, <a class="el" href="merge_8c-source.html#l00089">swap</a>, and <a class="el" href="merge_8c-source.html#l00051">THRESHOLD</a>. <p> Referenced by <a class="el" href="merge_8c-source.html#l00208">mergesort()</a>. </div> </div><p> <hr size="1"><address style="align: right;"><small>Generated on 1 Oct 2013 for rpm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address> </body> </html>