This file is indexed.

/usr/share/doc/libjsoncpp-dev/jsoncpp-api-html/json__batchallocator_8h_source.html is in libjsoncpp-dev 0.6.0~rc2-3ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<html>
<head>
<title>
JsonCpp - JSON data format manipulation library
</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff"> 
<table width="100%">
  <tr>
    <td width="40%" align="left" valign="center">
      <a href="http://sourceforge.net/projects/jsoncpp/">
      JsonCpp project page
      </a>
    </td>
    <td width="40%" align="right" valign="center">
      <a href="http://jsoncpp.sourceforge.net">JsonCpp home page</a>
    </td>
  </tr>
</table>
<hr>
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_558a3a6fe8f26971847c96e209994c71.html">lib_json</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">json_batchallocator.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="json__batchallocator_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Copyright 2007-2010 Baptiste Lepilleur</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Distributed under MIT license, or public domain if desired and</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// recognized in your jurisdiction.</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#ifndef JSONCPP_BATCHALLOCATOR_H_INCLUDED</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor"></span><span class="preprocessor"># define JSONCPP_BATCHALLOCATOR_H_INCLUDED</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor"># include &lt;stdlib.h&gt;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor"># include &lt;assert.h&gt;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor"># ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">namespace </span>Json {</div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;</div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">/* Fast memory allocator.</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * This memory allocator allocates memory for a batch of object (specified by</span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * the page size, the number of object in each page).</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * It does not allow the destruction of a single object. All the allocated objects</span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * can be destroyed at once. The memory can be either released or reused for future</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * allocation.</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * The in-place new operator must be used to construct the object using the pointer</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * returned by allocate.</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> AllocatedType</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;        ,<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> objectPerAllocation&gt;</div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">class </span>BatchAllocator</div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;   <span class="keyword">typedef</span> AllocatedType Type;</div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;   BatchAllocator( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> objectsPerPage = 255 )</div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;      : freeHead_( 0 )</div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;      , objectsPerPage_( objectsPerPage )</div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;   {</div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">//      printf( &quot;Size: %d =&gt; %s\n&quot;, sizeof(AllocatedType), typeid(AllocatedType).name() );</span></div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;      assert( <span class="keyword">sizeof</span>(AllocatedType) * objectPerAllocation &gt;= <span class="keyword">sizeof</span>(AllocatedType *) ); <span class="comment">// We must be able to store a slist in the object free space.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;      assert( objectsPerPage &gt;= 16 );</div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;      batches_ = allocateBatch( 0 );   <span class="comment">// allocated a dummy page</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;      currentBatch_ = batches_;</div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;   }</div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;   ~BatchAllocator()</div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;   {</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;      <span class="keywordflow">for</span> ( BatchInfo *batch = batches_; batch;  )</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;      {</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;         BatchInfo *nextBatch = batch-&gt;next_;</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;         free( batch );</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;         batch = nextBatch;</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;      }</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;   }</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;   AllocatedType *allocate()</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;   {</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;      <span class="keywordflow">if</span> ( freeHead_ ) <span class="comment">// returns node from free list.</span></div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;      {</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;         AllocatedType *<span class="keywordtype">object</span> = freeHead_;</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;         freeHead_ = *(AllocatedType **)<span class="keywordtype">object</span>;</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;         <span class="keywordflow">return</span> object;</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;      }</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <span class="keywordflow">if</span> ( currentBatch_-&gt;used_ == currentBatch_-&gt;end_ )</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      {</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;         currentBatch_ = currentBatch_-&gt;next_;</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;         <span class="keywordflow">while</span> ( currentBatch_  &amp;&amp;  currentBatch_-&gt;used_ == currentBatch_-&gt;end_ )</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;            currentBatch_ = currentBatch_-&gt;next_;</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;         <span class="keywordflow">if</span> ( !currentBatch_  ) <span class="comment">// no free batch found, allocate a new one</span></div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;         { </div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;            currentBatch_ = allocateBatch( objectsPerPage_ );</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;            currentBatch_-&gt;next_ = batches_; <span class="comment">// insert at the head of the list</span></div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;            batches_ = currentBatch_;</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;         }</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;      }</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      AllocatedType *allocated = currentBatch_-&gt;used_;</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;      currentBatch_-&gt;used_ += objectPerAllocation;</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      <span class="keywordflow">return</span> allocated;</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;   }</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;   <span class="keywordtype">void</span> release( AllocatedType *<span class="keywordtype">object</span> )</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;   {</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;      assert( <span class="keywordtype">object</span> != 0 );</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;      *(AllocatedType **)<span class="keywordtype">object</span> = freeHead_;</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;      freeHead_ = object;</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;   }</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;   <span class="keyword">struct </span>BatchInfo</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;   {</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;      BatchInfo *next_;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;      AllocatedType *used_;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;      AllocatedType *end_;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;      AllocatedType buffer_[objectPerAllocation];</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;   };</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;   <span class="comment">// disabled copy constructor and assignement operator.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;   BatchAllocator( <span class="keyword">const</span> BatchAllocator &amp; );</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;   <span class="keywordtype">void</span> operator =( <span class="keyword">const</span> BatchAllocator &amp;);</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;   <span class="keyword">static</span> BatchInfo *allocateBatch( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> objectsPerPage )</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;   {</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mallocSize = <span class="keyword">sizeof</span>(BatchInfo) - <span class="keyword">sizeof</span>(AllocatedType)* objectPerAllocation</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;                                + <span class="keyword">sizeof</span>(AllocatedType) * objectPerAllocation * objectsPerPage;</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;      BatchInfo *batch = <span class="keyword">static_cast&lt;</span>BatchInfo*<span class="keyword">&gt;</span>( malloc( mallocSize ) );</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;      batch-&gt;next_ = 0;</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;      batch-&gt;used_ = batch-&gt;buffer_;</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;      batch-&gt;end_ = batch-&gt;buffer_ + objectsPerPage;</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;      <span class="keywordflow">return</span> batch;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;   }</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;   BatchInfo *batches_;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;   BatchInfo *currentBatch_;</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;   AllocatedType *freeHead_;</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> objectsPerPage_;</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;};</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;} <span class="comment">// namespace Json</span></div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="preprocessor"># endif // ifndef JSONCPP_DOC_INCLUDE_IMPLEMENTATION</span></div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="preprocessor">#endif // JSONCPP_BATCHALLOCATOR_H_INCLUDED</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<hr>
<table width="100%">
  <tr>
    <td width="10%" align="left" valign="center">
      <a href="http://sourceforge.net"> 
      <img
      src="http://sourceforge.net/sflogo.php?group_id=144446"
      width="88" height="31" border="0" alt="SourceForge Logo"></a>
    </td>
    <td width="20%" align="left" valign="center">
      hosts this site.
    </td>
    <td>
    </td>
    <td align="right" valign="center">
      Send comments to:<br>
      <a href="mailto:jsoncpp-devel@lists.sourceforge.net">Json-cpp Developers</a>
    </td>
  </tr>
</table>
</body> 
</html>