~ubuntu-branches/ubuntu/vivid/tesseract/vivid

« back to all changes in this revision

Viewing changes to doc/html/a00557.html

  • Committer: Package Import Robot
  • Author(s): Jeff Breidenbach
  • Date: 2014-02-03 11:10:20 UTC
  • mfrom: (1.3.1) (19.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20140203111020-igquodd7pjlp3uri
Tags: 3.03.01-1
* New upstream release, includes critical fix to PDF rendering
* Complete leptonlib transition (see bug #735509)
* Promote from experimental to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
2
<html xmlns="http://www.w3.org/1999/xhtml">
 
3
<head>
 
4
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 
5
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 
6
<title>tesseract: STRING Class Reference</title>
 
7
 
 
8
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 
9
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 
10
<link href="navtree.css" rel="stylesheet" type="text/css"/>
 
11
<script type="text/javascript" src="jquery.js"></script>
 
12
<script type="text/javascript" src="resize.js"></script>
 
13
<script type="text/javascript" src="navtree.js"></script>
 
14
<script type="text/javascript">
 
15
  $(document).ready(initResizable);
 
16
</script>
 
17
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 
18
<script type="text/javascript" src="search/search.js"></script>
 
19
<script type="text/javascript">
 
20
  $(document).ready(function() { searchBox.OnSelectItem(0); });
 
21
</script>
 
22
 
 
23
</head>
 
24
<body>
 
25
<div id="top"><!-- do not remove this div! -->
 
26
 
 
27
 
 
28
<div id="titlearea">
 
29
<table cellspacing="0" cellpadding="0">
 
30
 <tbody>
 
31
 <tr style="height: 56px;">
 
32
  
 
33
  
 
34
  <td style="padding-left: 0.5em;">
 
35
   <div id="projectname">tesseract
 
36
   &#160;<span id="projectnumber">3.03</span>
 
37
   </div>
 
38
   
 
39
  </td>
 
40
  
 
41
  
 
42
  
 
43
 </tr>
 
44
 </tbody>
 
45
</table>
 
46
</div>
 
47
 
 
48
<!-- Generated by Doxygen 1.7.6.1 -->
 
49
<script type="text/javascript">
 
50
var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
51
</script>
 
52
  <div id="navrow1" class="tabs">
 
53
    <ul class="tablist">
 
54
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
 
55
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
 
56
      <li><a href="modules.html"><span>Modules</span></a></li>
 
57
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
 
58
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
 
59
      <li><a href="files.html"><span>Files</span></a></li>
 
60
      <li>
 
61
        <div id="MSearchBox" class="MSearchBoxInactive">
 
62
        <span class="left">
 
63
          <img id="MSearchSelect" src="search/mag_sel.png"
 
64
               onmouseover="return searchBox.OnSearchSelectShow()"
 
65
               onmouseout="return searchBox.OnSearchSelectHide()"
 
66
               alt=""/>
 
67
          <input type="text" id="MSearchField" value="Search" accesskey="S"
 
68
               onfocus="searchBox.OnSearchFieldFocus(true)" 
 
69
               onblur="searchBox.OnSearchFieldFocus(false)" 
 
70
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
 
71
          </span><span class="right">
 
72
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
 
73
          </span>
 
74
        </div>
 
75
      </li>
 
76
    </ul>
 
77
  </div>
 
78
  <div id="navrow2" class="tabs2">
 
79
    <ul class="tablist">
 
80
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
 
81
      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
 
82
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
 
83
    </ul>
 
84
  </div>
 
85
</div>
 
86
<div id="side-nav" class="ui-resizable side-nav-resizable">
 
87
  <div id="nav-tree">
 
88
    <div id="nav-tree-contents">
 
89
    </div>
 
90
  </div>
 
91
  <div id="splitbar" style="-moz-user-select:none;" 
 
92
       class="ui-resizable-handle">
 
93
  </div>
 
94
</div>
 
95
<script type="text/javascript">
 
96
  initNavTree('a00557.html','');
 
97
</script>
 
98
<div id="doc-content">
 
99
<div class="header">
 
100
  <div class="summary">
 
101
<a href="#nested-classes">Classes</a> &#124;
 
102
<a href="#pub-methods">Public Member Functions</a>  </div>
 
103
  <div class="headertitle">
 
104
<div class="title">STRING Class Reference</div>  </div>
 
105
</div><!--header-->
 
106
<div class="contents">
 
107
<!-- doxytag: class="STRING" -->
 
108
<p><code>#include &lt;<a class="el" href="a00855_source.html">strngs.h</a>&gt;</code></p>
 
109
 
 
110
<p><a href="a01664.html">List of all members.</a></p>
 
111
<table class="memberdecls">
 
112
<tr><td colspan="2"><h2><a name="nested-classes"></a>
 
113
Classes</h2></td></tr>
 
114
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><b>STRING_HEADER</b></td></tr>
 
115
<tr><td colspan="2"><h2><a name="pub-methods"></a>
 
116
Public Member Functions</h2></td></tr>
 
117
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING</a> ()</td></tr>
 
118
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a6a78dbb21ad4450d44e833a21ec6576c">STRING</a> (const <a class="el" href="a00557.html">STRING</a> &amp;<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
 
119
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#aa23a4d1cacabbf5361a5ea641fb141e0">STRING</a> (const char *<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
 
120
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a21efec4fdaf6c7bc96be3c634b4f6b7f">~STRING</a> ()</td></tr>
 
121
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#ad2e7e107c5f78f7f716e7688b1cc2d4a">Serialize</a> (FILE *fp) const </td></tr>
 
122
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#addf44387285a0498e500b934eb7825f8">DeSerialize</a> (bool swap, FILE *fp)</td></tr>
 
123
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#ad4c1a804168d9442f125944e7eb5159d">contains</a> (const char c) const </td></tr>
 
124
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a> () const </td></tr>
 
125
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a0c93665497f997cdd426cc8bfb1955e6">size</a> () const </td></tr>
 
126
<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a> () const </td></tr>
 
127
<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a9956356f463fc7c5c55833542c1f255d">c_str</a> () const </td></tr>
 
128
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a8bc37495184603e527daece60b4d265d">strdup</a> () const </td></tr>
 
129
<tr><td class="memItemLeft" align="right" valign="top">char &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a936654344db4a72af300d466b88b7aa8">operator[]</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> index) const </td></tr>
 
130
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a70cb880f818d4af4a4f4036032c3e9dc">split</a> (const char c, <a class="el" href="a00403.html">GenericVector</a>&lt; <a class="el" href="a00557.html">STRING</a> &gt; *splited)</td></tr>
 
131
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a0d5a6c456f8e3ef4b4a5077031573df8">truncate_at</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> index)</td></tr>
 
132
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a69fa65451960a21d0555da5ae2cad9b2">operator==</a> (const <a class="el" href="a00557.html">STRING</a> &amp;<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>) const </td></tr>
 
133
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a7de200e4b367759b370e9b610de05490">operator!=</a> (const <a class="el" href="a00557.html">STRING</a> &amp;<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>) const </td></tr>
 
134
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#ac6ed1c0f65f7fa05e2fea9e9d21b87d4">operator!=</a> (const char *<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>) const </td></tr>
 
135
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a6db60c4e6e34865155a64e1b1fdca5cb">operator=</a> (const char *<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
 
136
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#afcf3d146103695be14189118b7ddc2c8">operator=</a> (const <a class="el" href="a00557.html">STRING</a> &amp;<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
 
137
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a7072304f2deae96e520b93b44a37424b">operator+</a> (const <a class="el" href="a00557.html">STRING</a> &amp;<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>) const </td></tr>
 
138
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a8313e59dfb842b027a228d4444ee2a55">operator+</a> (const char ch) const </td></tr>
 
139
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#af223fab2ff1f3ff775308cd615705b3f">operator+=</a> (const char *<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
 
140
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#ab10c5d733cd8dd0c6245873032579214">operator+=</a> (const <a class="el" href="a00557.html">STRING</a> &amp;<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
 
141
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00557.html">STRING</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a5f9408cef7ba8108ba67bd7086f07dde">operator+=</a> (const char ch)</td></tr>
 
142
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a8cfe836a7f55f4761936ea2231b6b9d2">assign</a> (const char *cstr, int len)</td></tr>
 
143
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a779cd637dd42d58d5500a3a657077e84">add_str_int</a> (const char *str, int number)</td></tr>
 
144
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a8b89aab090bf94ed9e0b05625ec6a397">add_str_double</a> (const char *str, double number)</td></tr>
 
145
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a776bc24b07f530e0310041e5b6677dc9">ensure</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min_capacity)</td></tr>
 
146
</table>
 
147
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 
148
<div class="textblock">
 
149
<p>Definition at line <a class="el" href="a00855_source.html#l00040">40</a> of file <a class="el" href="a00855_source.html">strngs.h</a>.</p>
 
150
</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
 
151
<a class="anchor" id="a1c63ec33ab6f6afeb82827be3d4e6ab0"></a><!-- doxytag: member="STRING::STRING" ref="a1c63ec33ab6f6afeb82827be3d4e6ab0" args="()" -->
 
152
<div class="memitem">
 
153
<div class="memproto">
 
154
      <table class="memname">
 
155
        <tr>
 
156
          <td class="memname"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING::STRING</a> </td>
 
157
          <td>(</td>
 
158
          <td class="paramname"></td><td>)</td>
 
159
          <td></td>
 
160
        </tr>
 
161
      </table>
 
162
</div>
 
163
<div class="memdoc">
 
164
 
 
165
<p>Definition at line <a class="el" href="a00854_source.html#l00100">100</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
166
<div class="fragment"><pre class="fragment">               {
 
167
  <span class="comment">// Empty STRINGs contain just the &quot;\0&quot;.</span>
 
168
  memcpy(AllocData(1, <a class="code" href="a00854.html#a927f7d5b361de249344c06b29aa6ca27">kMinCapacity</a>), <span class="stringliteral">&quot;&quot;</span>, 1);
 
169
}
 
170
</pre></div>
 
171
</div>
 
172
</div>
 
173
<a class="anchor" id="a6a78dbb21ad4450d44e833a21ec6576c"></a><!-- doxytag: member="STRING::STRING" ref="a6a78dbb21ad4450d44e833a21ec6576c" args="(const STRING &amp;string)" -->
 
174
<div class="memitem">
 
175
<div class="memproto">
 
176
      <table class="memname">
 
177
        <tr>
 
178
          <td class="memname"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING::STRING</a> </td>
 
179
          <td>(</td>
 
180
          <td class="paramtype">const <a class="el" href="a00557.html">STRING</a> &amp;&#160;</td>
 
181
          <td class="paramname"><em>string</em></td><td>)</td>
 
182
          <td></td>
 
183
        </tr>
 
184
      </table>
 
185
</div>
 
186
<div class="memdoc">
 
187
 
 
188
<p>Definition at line <a class="el" href="a00854_source.html#l00105">105</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
189
<div class="fragment"><pre class="fragment">                                {
 
190
  str.FixHeader();
 
191
  <span class="keyword">const</span> STRING_HEADER* str_header  = str.GetHeader();
 
192
  <span class="keywordtype">int</span>   str_used  = str_header-&gt;used_;
 
193
  <span class="keywordtype">char</span> *this_cstr = AllocData(str_used, str_used);
 
194
  memcpy(this_cstr, str.GetCStr(), str_used);
 
195
  assert(InvariantOk());
 
196
}
 
197
</pre></div>
 
198
</div>
 
199
</div>
 
200
<a class="anchor" id="aa23a4d1cacabbf5361a5ea641fb141e0"></a><!-- doxytag: member="STRING::STRING" ref="aa23a4d1cacabbf5361a5ea641fb141e0" args="(const char *string)" -->
 
201
<div class="memitem">
 
202
<div class="memproto">
 
203
      <table class="memname">
 
204
        <tr>
 
205
          <td class="memname"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING::STRING</a> </td>
 
206
          <td>(</td>
 
207
          <td class="paramtype">const char *&#160;</td>
 
208
          <td class="paramname"><em>string</em></td><td>)</td>
 
209
          <td></td>
 
210
        </tr>
 
211
      </table>
 
212
</div>
 
213
<div class="memdoc">
 
214
 
 
215
<p>Definition at line <a class="el" href="a00854_source.html#l00114">114</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
216
<div class="fragment"><pre class="fragment">                               {
 
217
  <span class="keywordflow">if</span> (cstr == NULL) {
 
218
    <span class="comment">// Empty STRINGs contain just the &quot;\0&quot;.</span>
 
219
    memcpy(AllocData(1, <a class="code" href="a00854.html#a927f7d5b361de249344c06b29aa6ca27">kMinCapacity</a>), <span class="stringliteral">&quot;&quot;</span>, 1);
 
220
  } <span class="keywordflow">else</span> {
 
221
    <span class="keywordtype">int</span> len = strlen(cstr) + 1;
 
222
    <span class="keywordtype">char</span>* this_cstr = AllocData(len, len);
 
223
    memcpy(this_cstr, cstr, len);
 
224
  }
 
225
  assert(InvariantOk());
 
226
}
 
227
</pre></div>
 
228
</div>
 
229
</div>
 
230
<a class="anchor" id="a21efec4fdaf6c7bc96be3c634b4f6b7f"></a><!-- doxytag: member="STRING::~STRING" ref="a21efec4fdaf6c7bc96be3c634b4f6b7f" args="()" -->
 
231
<div class="memitem">
 
232
<div class="memproto">
 
233
      <table class="memname">
 
234
        <tr>
 
235
          <td class="memname"><a class="el" href="a00557.html#a21efec4fdaf6c7bc96be3c634b4f6b7f">STRING::~STRING</a> </td>
 
236
          <td>(</td>
 
237
          <td class="paramname"></td><td>)</td>
 
238
          <td></td>
 
239
        </tr>
 
240
      </table>
 
241
</div>
 
242
<div class="memdoc">
 
243
 
 
244
<p>Definition at line <a class="el" href="a00854_source.html#l00126">126</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
245
<div class="fragment"><pre class="fragment">                {
 
246
  DiscardData();
 
247
}
 
248
</pre></div>
 
249
</div>
 
250
</div>
 
251
<hr/><h2>Member Function Documentation</h2>
 
252
<a class="anchor" id="a8b89aab090bf94ed9e0b05625ec6a397"></a><!-- doxytag: member="STRING::add_str_double" ref="a8b89aab090bf94ed9e0b05625ec6a397" args="(const char *str, double number)" -->
 
253
<div class="memitem">
 
254
<div class="memproto">
 
255
      <table class="memname">
 
256
        <tr>
 
257
          <td class="memname">void <a class="el" href="a00557.html#a8b89aab090bf94ed9e0b05625ec6a397">STRING::add_str_double</a> </td>
 
258
          <td>(</td>
 
259
          <td class="paramtype">const char *&#160;</td>
 
260
          <td class="paramname"><em>str</em>, </td>
 
261
        </tr>
 
262
        <tr>
 
263
          <td class="paramkey"></td>
 
264
          <td></td>
 
265
          <td class="paramtype">double&#160;</td>
 
266
          <td class="paramname"><em>number</em>&#160;</td>
 
267
        </tr>
 
268
        <tr>
 
269
          <td></td>
 
270
          <td>)</td>
 
271
          <td></td><td></td>
 
272
        </tr>
 
273
      </table>
 
274
</div>
 
275
<div class="memdoc">
 
276
 
 
277
<p>Definition at line <a class="el" href="a00854_source.html#l00352">352</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
278
<div class="fragment"><pre class="fragment">                                                          {
 
279
  <span class="keywordflow">if</span> (str != NULL)
 
280
    *<span class="keyword">this</span> += str;
 
281
  <span class="comment">// Allow space for the maximum possible length of %8g.</span>
 
282
  <span class="keywordtype">char</span> num_buffer[<a class="code" href="a00854.html#af3b99544fb662fce123799a16b6050b5">kMaxDoubleSize</a>];
 
283
  snprintf(num_buffer, <a class="code" href="a00854.html#af3b99544fb662fce123799a16b6050b5">kMaxDoubleSize</a> - 1, <span class="stringliteral">&quot;%.8g&quot;</span>, number);
 
284
  num_buffer[<a class="code" href="a00854.html#af3b99544fb662fce123799a16b6050b5">kMaxDoubleSize</a> - 1] = <span class="charliteral">&#39;\0&#39;</span>;
 
285
  *<span class="keyword">this</span> += num_buffer;
 
286
}
 
287
</pre></div>
 
288
</div>
 
289
</div>
 
290
<a class="anchor" id="a779cd637dd42d58d5500a3a657077e84"></a><!-- doxytag: member="STRING::add_str_int" ref="a779cd637dd42d58d5500a3a657077e84" args="(const char *str, int number)" -->
 
291
<div class="memitem">
 
292
<div class="memproto">
 
293
      <table class="memname">
 
294
        <tr>
 
295
          <td class="memname">void <a class="el" href="a00557.html#a779cd637dd42d58d5500a3a657077e84">STRING::add_str_int</a> </td>
 
296
          <td>(</td>
 
297
          <td class="paramtype">const char *&#160;</td>
 
298
          <td class="paramname"><em>str</em>, </td>
 
299
        </tr>
 
300
        <tr>
 
301
          <td class="paramkey"></td>
 
302
          <td></td>
 
303
          <td class="paramtype">int&#160;</td>
 
304
          <td class="paramname"><em>number</em>&#160;</td>
 
305
        </tr>
 
306
        <tr>
 
307
          <td></td>
 
308
          <td>)</td>
 
309
          <td></td><td></td>
 
310
        </tr>
 
311
      </table>
 
312
</div>
 
313
<div class="memdoc">
 
314
 
 
315
<p>Definition at line <a class="el" href="a00854_source.html#l00342">342</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
316
<div class="fragment"><pre class="fragment">                                                    {
 
317
  <span class="keywordflow">if</span> (str != NULL)
 
318
    *<span class="keyword">this</span> += str;
 
319
  <span class="comment">// Allow space for the maximum possible length of inT64.</span>
 
320
  <span class="keywordtype">char</span> num_buffer[<a class="code" href="a00854.html#a98ff26a02a0502569b1676ed30fb1b40">kMaxIntSize</a>];
 
321
  snprintf(num_buffer, <a class="code" href="a00854.html#a98ff26a02a0502569b1676ed30fb1b40">kMaxIntSize</a> - 1, <span class="stringliteral">&quot;%d&quot;</span>, number);
 
322
  num_buffer[<a class="code" href="a00854.html#a98ff26a02a0502569b1676ed30fb1b40">kMaxIntSize</a> - 1] = <span class="charliteral">&#39;\0&#39;</span>;
 
323
  *<span class="keyword">this</span> += num_buffer;
 
324
}
 
325
</pre></div>
 
326
</div>
 
327
</div>
 
328
<a class="anchor" id="a8cfe836a7f55f4761936ea2231b6b9d2"></a><!-- doxytag: member="STRING::assign" ref="a8cfe836a7f55f4761936ea2231b6b9d2" args="(const char *cstr, int len)" -->
 
329
<div class="memitem">
 
330
<div class="memproto">
 
331
      <table class="memname">
 
332
        <tr>
 
333
          <td class="memname">void <a class="el" href="a00557.html#a8cfe836a7f55f4761936ea2231b6b9d2">STRING::assign</a> </td>
 
334
          <td>(</td>
 
335
          <td class="paramtype">const char *&#160;</td>
 
336
          <td class="paramname"><em>cstr</em>, </td>
 
337
        </tr>
 
338
        <tr>
 
339
          <td class="paramkey"></td>
 
340
          <td></td>
 
341
          <td class="paramtype">int&#160;</td>
 
342
          <td class="paramname"><em>len</em>&#160;</td>
 
343
        </tr>
 
344
        <tr>
 
345
          <td></td>
 
346
          <td>)</td>
 
347
          <td></td><td></td>
 
348
        </tr>
 
349
      </table>
 
350
</div>
 
351
<div class="memdoc">
 
352
 
 
353
<p>Definition at line <a class="el" href="a00854_source.html#l00383">383</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
354
<div class="fragment"><pre class="fragment">                                             {
 
355
  STRING_HEADER* this_header = GetHeader();
 
356
  this_header-&gt;used_ = 0;  <span class="comment">// dont bother copying data if need to realloc</span>
 
357
  <span class="keywordtype">char</span>* this_cstr = ensure_cstr(len + 1);  <span class="comment">// +1 for &#39;\0&#39;</span>
 
358
 
 
359
  this_header = GetHeader();  <span class="comment">// for realloc</span>
 
360
  memcpy(this_cstr, cstr, len);
 
361
  this_cstr[len] = <span class="charliteral">&#39;\0&#39;</span>;
 
362
  this_header-&gt;used_ = len + 1;
 
363
 
 
364
  assert(InvariantOk());
 
365
}
 
366
</pre></div>
 
367
</div>
 
368
</div>
 
369
<a class="anchor" id="a9956356f463fc7c5c55833542c1f255d"></a><!-- doxytag: member="STRING::c_str" ref="a9956356f463fc7c5c55833542c1f255d" args="() const " -->
 
370
<div class="memitem">
 
371
<div class="memproto">
 
372
      <table class="memname">
 
373
        <tr>
 
374
          <td class="memname">const char * <a class="el" href="a00557.html#a9956356f463fc7c5c55833542c1f255d">STRING::c_str</a> </td>
 
375
          <td>(</td>
 
376
          <td class="paramname"></td><td>)</td>
 
377
          <td> const</td>
 
378
        </tr>
 
379
      </table>
 
380
</div>
 
381
<div class="memdoc">
 
382
 
 
383
<p>Definition at line <a class="el" href="a00854_source.html#l00169">169</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
384
<div class="fragment"><pre class="fragment">                                {
 
385
  <span class="keywordflow">return</span> <a class="code" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>();
 
386
}
 
387
</pre></div>
 
388
</div>
 
389
</div>
 
390
<a class="anchor" id="ad4c1a804168d9442f125944e7eb5159d"></a><!-- doxytag: member="STRING::contains" ref="ad4c1a804168d9442f125944e7eb5159d" args="(const char c) const " -->
 
391
<div class="memitem">
 
392
<div class="memproto">
 
393
      <table class="memname">
 
394
        <tr>
 
395
          <td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> <a class="el" href="a00557.html#ad4c1a804168d9442f125944e7eb5159d">STRING::contains</a> </td>
 
396
          <td>(</td>
 
397
          <td class="paramtype">const char&#160;</td>
 
398
          <td class="paramname"><em>c</em></td><td>)</td>
 
399
          <td> const</td>
 
400
        </tr>
 
401
      </table>
 
402
</div>
 
403
<div class="memdoc">
 
404
 
 
405
<p>Definition at line <a class="el" href="a00854_source.html#l00149">149</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
406
<div class="fragment"><pre class="fragment">                                         {
 
407
  <span class="keywordflow">return</span> (c != <span class="charliteral">&#39;\0&#39;</span>) &amp;&amp; (strchr (GetCStr(), c) != NULL);
 
408
}
 
409
</pre></div>
 
410
</div>
 
411
</div>
 
412
<a class="anchor" id="addf44387285a0498e500b934eb7825f8"></a><!-- doxytag: member="STRING::DeSerialize" ref="addf44387285a0498e500b934eb7825f8" args="(bool swap, FILE *fp)" -->
 
413
<div class="memitem">
 
414
<div class="memproto">
 
415
      <table class="memname">
 
416
        <tr>
 
417
          <td class="memname">bool <a class="el" href="a00557.html#addf44387285a0498e500b934eb7825f8">STRING::DeSerialize</a> </td>
 
418
          <td>(</td>
 
419
          <td class="paramtype">bool&#160;</td>
 
420
          <td class="paramname"><em>swap</em>, </td>
 
421
        </tr>
 
422
        <tr>
 
423
          <td class="paramkey"></td>
 
424
          <td></td>
 
425
          <td class="paramtype">FILE *&#160;</td>
 
426
          <td class="paramname"><em>fp</em>&#160;</td>
 
427
        </tr>
 
428
        <tr>
 
429
          <td></td>
 
430
          <td>)</td>
 
431
          <td></td><td></td>
 
432
        </tr>
 
433
      </table>
 
434
</div>
 
435
<div class="memdoc">
 
436
 
 
437
<p>Definition at line <a class="el" href="a00854_source.html#l00139">139</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
438
<div class="fragment"><pre class="fragment">                                            {
 
439
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> len;
 
440
  <span class="keywordflow">if</span> (fread(&amp;len, <span class="keyword">sizeof</span>(len), 1, fp) != 1) <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
441
  <span class="keywordflow">if</span> (swap)
 
442
    <a class="code" href="a00830.html#ae7eeeca49954d4b13d269729f2fecd5a">ReverseN</a>(&amp;len, <span class="keyword">sizeof</span>(len));
 
443
  <a class="code" href="a00557.html#a0d5a6c456f8e3ef4b4a5077031573df8">truncate_at</a>(len);
 
444
  <span class="keywordflow">if</span> (static_cast&lt;int&gt;(fread(GetCStr(), 1, len, fp)) != len) <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
445
  <span class="keywordflow">return</span> <span class="keyword">true</span>;
 
446
}
 
447
</pre></div>
 
448
</div>
 
449
</div>
 
450
<a class="anchor" id="a776bc24b07f530e0310041e5b6677dc9"></a><!-- doxytag: member="STRING::ensure" ref="a776bc24b07f530e0310041e5b6677dc9" args="(inT32 min_capacity)" -->
 
451
<div class="memitem">
 
452
<div class="memproto">
 
453
      <table class="memname">
 
454
        <tr>
 
455
          <td class="memname">void <a class="el" href="a00557.html#a776bc24b07f530e0310041e5b6677dc9">STRING::ensure</a> </td>
 
456
          <td>(</td>
 
457
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
458
          <td class="paramname"><em>min_capacity</em></td><td>)</td>
 
459
          <td><code> [inline]</code></td>
 
460
        </tr>
 
461
      </table>
 
462
</div>
 
463
<div class="memdoc">
 
464
 
 
465
<p>Definition at line <a class="el" href="a00855_source.html#l00102">102</a> of file <a class="el" href="a00855_source.html">strngs.h</a>.</p>
 
466
<div class="fragment"><pre class="fragment">{ ensure_cstr(min_capacity); }
 
467
</pre></div>
 
468
</div>
 
469
</div>
 
470
<a class="anchor" id="a168505a533eda60219c93e25adf4cdc5"></a><!-- doxytag: member="STRING::length" ref="a168505a533eda60219c93e25adf4cdc5" args="() const " -->
 
471
<div class="memitem">
 
472
<div class="memproto">
 
473
      <table class="memname">
 
474
        <tr>
 
475
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">STRING::length</a> </td>
 
476
          <td>(</td>
 
477
          <td class="paramname"></td><td>)</td>
 
478
          <td> const</td>
 
479
        </tr>
 
480
      </table>
 
481
</div>
 
482
<div class="memdoc">
 
483
 
 
484
<p>Definition at line <a class="el" href="a00854_source.html#l00153">153</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
485
<div class="fragment"><pre class="fragment">                           {
 
486
  FixHeader();
 
487
  <span class="keywordflow">return</span> GetHeader()-&gt;used_ - 1;
 
488
}
 
489
</pre></div>
 
490
</div>
 
491
</div>
 
492
<a class="anchor" id="a7de200e4b367759b370e9b610de05490"></a><!-- doxytag: member="STRING::operator!=" ref="a7de200e4b367759b370e9b610de05490" args="(const STRING &amp;string) const " -->
 
493
<div class="memitem">
 
494
<div class="memproto">
 
495
      <table class="memname">
 
496
        <tr>
 
497
          <td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> <a class="el" href="a00751.html#aa7c6e3433850394bff1cde53f51b70f3">STRING::operator!</a>= </td>
 
498
          <td>(</td>
 
499
          <td class="paramtype">const <a class="el" href="a00557.html">STRING</a> &amp;&#160;</td>
 
500
          <td class="paramname"><em>string</em></td><td>)</td>
 
501
          <td> const</td>
 
502
        </tr>
 
503
      </table>
 
504
</div>
 
505
<div class="memdoc">
 
506
 
 
507
<p>Definition at line <a class="el" href="a00854_source.html#l00278">278</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
508
<div class="fragment"><pre class="fragment">                                                {
 
509
  FixHeader();
 
510
  str.FixHeader();
 
511
  <span class="keyword">const</span> STRING_HEADER* str_header = str.GetHeader();
 
512
  <span class="keyword">const</span> STRING_HEADER* this_header = GetHeader();
 
513
  <span class="keywordtype">int</span> this_used = this_header-&gt;used_;
 
514
  <span class="keywordtype">int</span> str_used  = str_header-&gt;used_;
 
515
 
 
516
  <span class="keywordflow">return</span> (this_used != str_used)
 
517
         || (memcmp(GetCStr(), str.GetCStr(), this_used) != 0);
 
518
}
 
519
</pre></div>
 
520
</div>
 
521
</div>
 
522
<a class="anchor" id="ac6ed1c0f65f7fa05e2fea9e9d21b87d4"></a><!-- doxytag: member="STRING::operator!=" ref="ac6ed1c0f65f7fa05e2fea9e9d21b87d4" args="(const char *string) const " -->
 
523
<div class="memitem">
 
524
<div class="memproto">
 
525
      <table class="memname">
 
526
        <tr>
 
527
          <td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> <a class="el" href="a00751.html#aa7c6e3433850394bff1cde53f51b70f3">STRING::operator!</a>= </td>
 
528
          <td>(</td>
 
529
          <td class="paramtype">const char *&#160;</td>
 
530
          <td class="paramname"><em>string</em></td><td>)</td>
 
531
          <td> const</td>
 
532
        </tr>
 
533
      </table>
 
534
</div>
 
535
<div class="memdoc">
 
536
 
 
537
<p>Definition at line <a class="el" href="a00854_source.html#l00290">290</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
538
<div class="fragment"><pre class="fragment">                                               {
 
539
  FixHeader();
 
540
  <span class="keyword">const</span> STRING_HEADER* this_header = GetHeader();
 
541
 
 
542
  <span class="keywordflow">if</span> (cstr == NULL)
 
543
    <span class="keywordflow">return</span> this_header-&gt;used_ &gt; 1;  <span class="comment">// either &#39;\0&#39; or NULL</span>
 
544
  <span class="keywordflow">else</span> {
 
545
    <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="code" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a> = strlen(cstr) + 1;
 
546
    <span class="keywordflow">return</span> (this_header-&gt;used_ != length)
 
547
            || (memcmp(GetCStr(), cstr, length) != 0);
 
548
  }
 
549
}
 
550
</pre></div>
 
551
</div>
 
552
</div>
 
553
<a class="anchor" id="a7072304f2deae96e520b93b44a37424b"></a><!-- doxytag: member="STRING::operator+" ref="a7072304f2deae96e520b93b44a37424b" args="(const STRING &amp;string) const " -->
 
554
<div class="memitem">
 
555
<div class="memproto">
 
556
      <table class="memname">
 
557
        <tr>
 
558
          <td class="memname"><a class="el" href="a00557.html">STRING</a> STRING::operator+ </td>
 
559
          <td>(</td>
 
560
          <td class="paramtype">const <a class="el" href="a00557.html">STRING</a> &amp;&#160;</td>
 
561
          <td class="paramname"><em>string</em></td><td>)</td>
 
562
          <td> const</td>
 
563
        </tr>
 
564
      </table>
 
565
</div>
 
566
<div class="memdoc">
 
567
 
 
568
<p>Definition at line <a class="el" href="a00854_source.html#l00396">396</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
569
<div class="fragment"><pre class="fragment">                                                {
 
570
  <a class="code" href="a00557.html">STRING</a> result(*<span class="keyword">this</span>);
 
571
  result += str;
 
572
 
 
573
  assert(InvariantOk());
 
574
  <span class="keywordflow">return</span> result;
 
575
}
 
576
</pre></div>
 
577
</div>
 
578
</div>
 
579
<a class="anchor" id="a8313e59dfb842b027a228d4444ee2a55"></a><!-- doxytag: member="STRING::operator+" ref="a8313e59dfb842b027a228d4444ee2a55" args="(const char ch) const " -->
 
580
<div class="memitem">
 
581
<div class="memproto">
 
582
      <table class="memname">
 
583
        <tr>
 
584
          <td class="memname"><a class="el" href="a00557.html">STRING</a> STRING::operator+ </td>
 
585
          <td>(</td>
 
586
          <td class="paramtype">const char&#160;</td>
 
587
          <td class="paramname"><em>ch</em></td><td>)</td>
 
588
          <td> const</td>
 
589
        </tr>
 
590
      </table>
 
591
</div>
 
592
<div class="memdoc">
 
593
 
 
594
<p>Definition at line <a class="el" href="a00854_source.html#l00405">405</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
595
<div class="fragment"><pre class="fragment">                                            {
 
596
  <a class="code" href="a00557.html">STRING</a> result;
 
597
  FixHeader();
 
598
  <span class="keyword">const</span> STRING_HEADER* this_header = GetHeader();
 
599
  <span class="keywordtype">int</span> this_used = this_header-&gt;used_;
 
600
  <span class="keywordtype">char</span>* result_cstr = result.ensure_cstr(this_used + 1);
 
601
  STRING_HEADER* result_header = result.GetHeader();
 
602
  <span class="keywordtype">int</span> result_used = result_header-&gt;used_;
 
603
 
 
604
  <span class="comment">// copies &#39;\0&#39; but we&#39;ll overwrite that</span>
 
605
  memcpy(result_cstr, GetCStr(), this_used);
 
606
  result_cstr[result_used] = ch;      <span class="comment">// overwrite old &#39;\0&#39;</span>
 
607
  result_cstr[result_used + 1] = <span class="charliteral">&#39;\0&#39;</span>;  <span class="comment">// append on &#39;\0&#39;</span>
 
608
  ++result_header-&gt;used_;
 
609
 
 
610
  assert(InvariantOk());
 
611
  <span class="keywordflow">return</span> result;
 
612
}
 
613
</pre></div>
 
614
</div>
 
615
</div>
 
616
<a class="anchor" id="af223fab2ff1f3ff775308cd615705b3f"></a><!-- doxytag: member="STRING::operator+=" ref="af223fab2ff1f3ff775308cd615705b3f" args="(const char *string)" -->
 
617
<div class="memitem">
 
618
<div class="memproto">
 
619
      <table class="memname">
 
620
        <tr>
 
621
          <td class="memname"><a class="el" href="a00557.html">STRING</a> &amp; STRING::operator+= </td>
 
622
          <td>(</td>
 
623
          <td class="paramtype">const char *&#160;</td>
 
624
          <td class="paramname"><em>string</em></td><td>)</td>
 
625
          <td></td>
 
626
        </tr>
 
627
      </table>
 
628
</div>
 
629
<div class="memdoc">
 
630
 
 
631
<p>Definition at line <a class="el" href="a00854_source.html#l00425">425</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
632
<div class="fragment"><pre class="fragment">                                           {
 
633
  <span class="keywordflow">if</span> (!str || !*str)  <span class="comment">// empty string has no effect</span>
 
634
    <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
635
 
 
636
  FixHeader();
 
637
  <span class="keywordtype">int</span> len = strlen(str) + 1;
 
638
  <span class="keywordtype">int</span> this_used = GetHeader()-&gt;used_;
 
639
  <span class="keywordtype">char</span>* this_cstr = ensure_cstr(this_used + len);
 
640
  STRING_HEADER* this_header = GetHeader();  <span class="comment">// after ensure for realloc</span>
 
641
 
 
642
  <span class="comment">// if we had non-empty string then append overwriting old &#39;\0&#39;</span>
 
643
  <span class="comment">// otherwise replace</span>
 
644
  <span class="keywordflow">if</span> (this_used &gt; 0) {
 
645
    memcpy(this_cstr + this_used - 1, str, len);
 
646
    this_header-&gt;used_ += len - 1;
 
647
  } <span class="keywordflow">else</span> {
 
648
    memcpy(this_cstr, str, len);
 
649
    this_header-&gt;used_ = len;
 
650
  }
 
651
 
 
652
  assert(InvariantOk());
 
653
  <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
654
}
 
655
</pre></div>
 
656
</div>
 
657
</div>
 
658
<a class="anchor" id="ab10c5d733cd8dd0c6245873032579214"></a><!-- doxytag: member="STRING::operator+=" ref="ab10c5d733cd8dd0c6245873032579214" args="(const STRING &amp;string)" -->
 
659
<div class="memitem">
 
660
<div class="memproto">
 
661
      <table class="memname">
 
662
        <tr>
 
663
          <td class="memname"><a class="el" href="a00557.html">STRING</a> &amp; STRING::operator+= </td>
 
664
          <td>(</td>
 
665
          <td class="paramtype">const <a class="el" href="a00557.html">STRING</a> &amp;&#160;</td>
 
666
          <td class="paramname"><em>string</em></td><td>)</td>
 
667
          <td></td>
 
668
        </tr>
 
669
      </table>
 
670
</div>
 
671
<div class="memdoc">
 
672
 
 
673
<p>Definition at line <a class="el" href="a00854_source.html#l00319">319</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
674
<div class="fragment"><pre class="fragment">                                             {
 
675
  FixHeader();
 
676
  str.FixHeader();
 
677
  <span class="keyword">const</span> STRING_HEADER* str_header = str.GetHeader();
 
678
  <span class="keyword">const</span> <span class="keywordtype">char</span>* str_cstr = str.GetCStr();
 
679
  <span class="keywordtype">int</span>  str_used  = str_header-&gt;used_;
 
680
  <span class="keywordtype">int</span>  this_used = GetHeader()-&gt;used_;
 
681
  <span class="keywordtype">char</span>* this_cstr = ensure_cstr(this_used + str_used);
 
682
 
 
683
  STRING_HEADER* this_header = GetHeader();  <span class="comment">// after ensure for realloc</span>
 
684
 
 
685
  <span class="keywordflow">if</span> (this_used &gt; 1) {
 
686
    memcpy(this_cstr + this_used - 1, str_cstr, str_used);
 
687
    this_header-&gt;used_ += str_used - 1;  <span class="comment">// overwrite &#39;\0&#39;</span>
 
688
  } <span class="keywordflow">else</span> {
 
689
    memcpy(this_cstr, str_cstr, str_used);
 
690
    this_header-&gt;used_ = str_used;
 
691
  }
 
692
 
 
693
  assert(InvariantOk());
 
694
  <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
695
}
 
696
</pre></div>
 
697
</div>
 
698
</div>
 
699
<a class="anchor" id="a5f9408cef7ba8108ba67bd7086f07dde"></a><!-- doxytag: member="STRING::operator+=" ref="a5f9408cef7ba8108ba67bd7086f07dde" args="(const char ch)" -->
 
700
<div class="memitem">
 
701
<div class="memproto">
 
702
      <table class="memname">
 
703
        <tr>
 
704
          <td class="memname"><a class="el" href="a00557.html">STRING</a> &amp; STRING::operator+= </td>
 
705
          <td>(</td>
 
706
          <td class="paramtype">const char&#160;</td>
 
707
          <td class="paramname"><em>ch</em></td><td>)</td>
 
708
          <td></td>
 
709
        </tr>
 
710
      </table>
 
711
</div>
 
712
<div class="memdoc">
 
713
 
 
714
<p>Definition at line <a class="el" href="a00854_source.html#l00450">450</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
715
<div class="fragment"><pre class="fragment">                                        {
 
716
  <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\0&#39;</span>)
 
717
    <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
718
 
 
719
  FixHeader();
 
720
  <span class="keywordtype">int</span>   this_used = GetHeader()-&gt;used_;
 
721
  <span class="keywordtype">char</span>* this_cstr = ensure_cstr(this_used + 1);
 
722
  STRING_HEADER* this_header = GetHeader();
 
723
 
 
724
  <span class="keywordflow">if</span> (this_used &gt; 0)
 
725
    --this_used; <span class="comment">// undo old empty null if there was one</span>
 
726
 
 
727
  this_cstr[this_used++] = ch;   <span class="comment">// append ch to end</span>
 
728
  this_cstr[this_used++] = <span class="charliteral">&#39;\0&#39;</span>; <span class="comment">// append &#39;\0&#39; after ch</span>
 
729
  this_header-&gt;used_ = this_used;
 
730
 
 
731
  assert(InvariantOk());
 
732
  <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
733
}
 
734
</pre></div>
 
735
</div>
 
736
</div>
 
737
<a class="anchor" id="a6db60c4e6e34865155a64e1b1fdca5cb"></a><!-- doxytag: member="STRING::operator=" ref="a6db60c4e6e34865155a64e1b1fdca5cb" args="(const char *string)" -->
 
738
<div class="memitem">
 
739
<div class="memproto">
 
740
      <table class="memname">
 
741
        <tr>
 
742
          <td class="memname"><a class="el" href="a00557.html">STRING</a> &amp; STRING::operator= </td>
 
743
          <td>(</td>
 
744
          <td class="paramtype">const char *&#160;</td>
 
745
          <td class="paramname"><em>string</em></td><td>)</td>
 
746
          <td></td>
 
747
        </tr>
 
748
      </table>
 
749
</div>
 
750
<div class="memdoc">
 
751
 
 
752
<p>Definition at line <a class="el" href="a00854_source.html#l00362">362</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
753
<div class="fragment"><pre class="fragment">                                           {
 
754
  STRING_HEADER* this_header = GetHeader();
 
755
  <span class="keywordflow">if</span> (cstr) {
 
756
    <span class="keywordtype">int</span> len = strlen(cstr) + 1;
 
757
 
 
758
    this_header-&gt;used_ = 0;  <span class="comment">// dont bother copying data if need to realloc</span>
 
759
    <span class="keywordtype">char</span>* this_cstr = ensure_cstr(len);
 
760
    this_header = GetHeader();  <span class="comment">// for realloc</span>
 
761
    memcpy(this_cstr, cstr, len);
 
762
    this_header-&gt;used_ = len;
 
763
  } <span class="keywordflow">else</span> {
 
764
    <span class="comment">// Reallocate to same state as default constructor.</span>
 
765
    DiscardData();
 
766
    <span class="comment">// Empty STRINGs contain just the &quot;\0&quot;.</span>
 
767
    memcpy(AllocData(1, <a class="code" href="a00854.html#a927f7d5b361de249344c06b29aa6ca27">kMinCapacity</a>), <span class="stringliteral">&quot;&quot;</span>, 1);
 
768
  }
 
769
 
 
770
  assert(InvariantOk());
 
771
  <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
772
}
 
773
</pre></div>
 
774
</div>
 
775
</div>
 
776
<a class="anchor" id="afcf3d146103695be14189118b7ddc2c8"></a><!-- doxytag: member="STRING::operator=" ref="afcf3d146103695be14189118b7ddc2c8" args="(const STRING &amp;string)" -->
 
777
<div class="memitem">
 
778
<div class="memproto">
 
779
      <table class="memname">
 
780
        <tr>
 
781
          <td class="memname"><a class="el" href="a00557.html">STRING</a> &amp; STRING::operator= </td>
 
782
          <td>(</td>
 
783
          <td class="paramtype">const <a class="el" href="a00557.html">STRING</a> &amp;&#160;</td>
 
784
          <td class="paramname"><em>string</em></td><td>)</td>
 
785
          <td></td>
 
786
        </tr>
 
787
      </table>
 
788
</div>
 
789
<div class="memdoc">
 
790
 
 
791
<p>Definition at line <a class="el" href="a00854_source.html#l00303">303</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
792
<div class="fragment"><pre class="fragment">                                           {
 
793
  str.FixHeader();
 
794
  <span class="keyword">const</span> STRING_HEADER* str_header = str.GetHeader();
 
795
  <span class="keywordtype">int</span>   str_used = str_header-&gt;used_;
 
796
 
 
797
  GetHeader()-&gt;used_ = 0;  <span class="comment">// clear since ensure doesnt need to copy data</span>
 
798
  <span class="keywordtype">char</span>* this_cstr = ensure_cstr(str_used);
 
799
  STRING_HEADER* this_header = GetHeader();
 
800
 
 
801
  memcpy(this_cstr, str.GetCStr(), str_used);
 
802
  this_header-&gt;used_ = str_used;
 
803
 
 
804
  assert(InvariantOk());
 
805
  <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 
806
}
 
807
</pre></div>
 
808
</div>
 
809
</div>
 
810
<a class="anchor" id="a69fa65451960a21d0555da5ae2cad9b2"></a><!-- doxytag: member="STRING::operator==" ref="a69fa65451960a21d0555da5ae2cad9b2" args="(const STRING &amp;string) const " -->
 
811
<div class="memitem">
 
812
<div class="memproto">
 
813
      <table class="memname">
 
814
        <tr>
 
815
          <td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> STRING::operator== </td>
 
816
          <td>(</td>
 
817
          <td class="paramtype">const <a class="el" href="a00557.html">STRING</a> &amp;&#160;</td>
 
818
          <td class="paramname"><em>string</em></td><td>)</td>
 
819
          <td> const</td>
 
820
        </tr>
 
821
      </table>
 
822
</div>
 
823
<div class="memdoc">
 
824
 
 
825
<p>Definition at line <a class="el" href="a00854_source.html#l00266">266</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
826
<div class="fragment"><pre class="fragment">                                                {
 
827
  FixHeader();
 
828
  str.FixHeader();
 
829
  <span class="keyword">const</span> STRING_HEADER* str_header = str.GetHeader();
 
830
  <span class="keyword">const</span> STRING_HEADER* this_header = GetHeader();
 
831
  <span class="keywordtype">int</span> this_used = this_header-&gt;used_;
 
832
  <span class="keywordtype">int</span> str_used  = str_header-&gt;used_;
 
833
 
 
834
  <span class="keywordflow">return</span> (this_used == str_used)
 
835
          &amp;&amp; (memcmp(GetCStr(), str.GetCStr(), this_used) == 0);
 
836
}
 
837
</pre></div>
 
838
</div>
 
839
</div>
 
840
<a class="anchor" id="a936654344db4a72af300d466b88b7aa8"></a><!-- doxytag: member="STRING::operator[]" ref="a936654344db4a72af300d466b88b7aa8" args="(inT32 index) const " -->
 
841
<div class="memitem">
 
842
<div class="memproto">
 
843
      <table class="memname">
 
844
        <tr>
 
845
          <td class="memname">char &amp; STRING::operator[] </td>
 
846
          <td>(</td>
 
847
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
848
          <td class="paramname"><em>index</em></td><td>)</td>
 
849
          <td> const</td>
 
850
        </tr>
 
851
      </table>
 
852
</div>
 
853
<div class="memdoc">
 
854
 
 
855
<p>Definition at line <a class="el" href="a00854_source.html#l00238">238</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
856
<div class="fragment"><pre class="fragment">                                          {
 
857
  <span class="comment">// Code is casting away this const and mutating the string,</span>
 
858
  <span class="comment">// so mark used_ as -1 to flag it unreliable.</span>
 
859
  GetHeader()-&gt;used_ = -1;
 
860
  <span class="keywordflow">return</span> ((<span class="keywordtype">char</span> *)GetCStr())[index];
 
861
}
 
862
</pre></div>
 
863
</div>
 
864
</div>
 
865
<a class="anchor" id="ad2e7e107c5f78f7f716e7688b1cc2d4a"></a><!-- doxytag: member="STRING::Serialize" ref="ad2e7e107c5f78f7f716e7688b1cc2d4a" args="(FILE *fp) const " -->
 
866
<div class="memitem">
 
867
<div class="memproto">
 
868
      <table class="memname">
 
869
        <tr>
 
870
          <td class="memname">bool <a class="el" href="a00557.html#ad2e7e107c5f78f7f716e7688b1cc2d4a">STRING::Serialize</a> </td>
 
871
          <td>(</td>
 
872
          <td class="paramtype">FILE *&#160;</td>
 
873
          <td class="paramname"><em>fp</em></td><td>)</td>
 
874
          <td> const</td>
 
875
        </tr>
 
876
      </table>
 
877
</div>
 
878
<div class="memdoc">
 
879
 
 
880
<p>Definition at line <a class="el" href="a00854_source.html#l00131">131</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
881
<div class="fragment"><pre class="fragment">                                     {
 
882
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> len = <a class="code" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a>();
 
883
  <span class="keywordflow">if</span> (fwrite(&amp;len, <span class="keyword">sizeof</span>(len), 1, fp) != 1) <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
884
  <span class="keywordflow">if</span> (static_cast&lt;int&gt;(fwrite(GetCStr(), 1, len, fp)) != len) <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
885
  <span class="keywordflow">return</span> <span class="keyword">true</span>;
 
886
}
 
887
</pre></div>
 
888
</div>
 
889
</div>
 
890
<a class="anchor" id="a0c93665497f997cdd426cc8bfb1955e6"></a><!-- doxytag: member="STRING::size" ref="a0c93665497f997cdd426cc8bfb1955e6" args="() const " -->
 
891
<div class="memitem">
 
892
<div class="memproto">
 
893
      <table class="memname">
 
894
        <tr>
 
895
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00557.html#a0c93665497f997cdd426cc8bfb1955e6">STRING::size</a> </td>
 
896
          <td>(</td>
 
897
          <td class="paramname"></td><td>)</td>
 
898
          <td> const<code> [inline]</code></td>
 
899
        </tr>
 
900
      </table>
 
901
</div>
 
902
<div class="memdoc">
 
903
 
 
904
<p>Definition at line <a class="el" href="a00855_source.html#l00056">56</a> of file <a class="el" href="a00855_source.html">strngs.h</a>.</p>
 
905
<div class="fragment"><pre class="fragment">{ <span class="keywordflow">return</span> <a class="code" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a>(); }
 
906
</pre></div>
 
907
</div>
 
908
</div>
 
909
<a class="anchor" id="a70cb880f818d4af4a4f4036032c3e9dc"></a><!-- doxytag: member="STRING::split" ref="a70cb880f818d4af4a4f4036032c3e9dc" args="(const char c, GenericVector&lt; STRING &gt; *splited)" -->
 
910
<div class="memitem">
 
911
<div class="memproto">
 
912
      <table class="memname">
 
913
        <tr>
 
914
          <td class="memname">void <a class="el" href="a00557.html#a70cb880f818d4af4a4f4036032c3e9dc">STRING::split</a> </td>
 
915
          <td>(</td>
 
916
          <td class="paramtype">const char&#160;</td>
 
917
          <td class="paramname"><em>c</em>, </td>
 
918
        </tr>
 
919
        <tr>
 
920
          <td class="paramkey"></td>
 
921
          <td></td>
 
922
          <td class="paramtype"><a class="el" href="a00403.html">GenericVector</a>&lt; <a class="el" href="a00557.html">STRING</a> &gt; *&#160;</td>
 
923
          <td class="paramname"><em>splited</em>&#160;</td>
 
924
        </tr>
 
925
        <tr>
 
926
          <td></td>
 
927
          <td>)</td>
 
928
          <td></td><td></td>
 
929
        </tr>
 
930
      </table>
 
931
</div>
 
932
<div class="memdoc">
 
933
 
 
934
<p>Definition at line <a class="el" href="a00854_source.html#l00246">246</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
935
<div class="fragment"><pre class="fragment">                                                               {
 
936
  <span class="keywordtype">int</span> start_index = 0;
 
937
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a>(); i++) {
 
938
    <span class="keywordflow">if</span> ((*<span class="keyword">this</span>)[i] == c) {
 
939
      <span class="keywordflow">if</span> (i != start_index) {
 
940
        (*this)[i] = <span class="charliteral">&#39;\0&#39;</span>;
 
941
        <a class="code" href="a00557.html">STRING</a> tmp = GetCStr() + start_index;
 
942
        splited-&gt;<a class="code" href="a00403.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(tmp);
 
943
        (*this)[i] = c;
 
944
      }
 
945
      start_index = i + 1;
 
946
    }
 
947
  }
 
948
 
 
949
  <span class="keywordflow">if</span> (<a class="code" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a>() != start_index) {
 
950
    <a class="code" href="a00557.html">STRING</a> tmp = GetCStr() + start_index;
 
951
    splited-&gt;<a class="code" href="a00403.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(tmp);
 
952
  }
 
953
}
 
954
</pre></div>
 
955
</div>
 
956
</div>
 
957
<a class="anchor" id="a8bc37495184603e527daece60b4d265d"></a><!-- doxytag: member="STRING::strdup" ref="a8bc37495184603e527daece60b4d265d" args="() const " -->
 
958
<div class="memitem">
 
959
<div class="memproto">
 
960
      <table class="memname">
 
961
        <tr>
 
962
          <td class="memname">char* <a class="el" href="a00557.html#a8bc37495184603e527daece60b4d265d">STRING::strdup</a> </td>
 
963
          <td>(</td>
 
964
          <td class="paramname"></td><td>)</td>
 
965
          <td> const<code> [inline]</code></td>
 
966
        </tr>
 
967
      </table>
 
968
</div>
 
969
<div class="memdoc">
 
970
 
 
971
<p>Definition at line <a class="el" href="a00855_source.html#l00060">60</a> of file <a class="el" href="a00855_source.html">strngs.h</a>.</p>
 
972
<div class="fragment"><pre class="fragment">                                {
 
973
     <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> len = <a class="code" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">length</a>() + 1;
 
974
     <span class="keywordflow">return</span> strncpy(<span class="keyword">new</span> <span class="keywordtype">char</span>[len], GetCStr(), len);
 
975
    }
 
976
</pre></div>
 
977
</div>
 
978
</div>
 
979
<a class="anchor" id="a32beee43ecab1bed8bebc3466896ad6e"></a><!-- doxytag: member="STRING::string" ref="a32beee43ecab1bed8bebc3466896ad6e" args="() const " -->
 
980
<div class="memitem">
 
981
<div class="memproto">
 
982
      <table class="memname">
 
983
        <tr>
 
984
          <td class="memname">const char * <a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">STRING::string</a> </td>
 
985
          <td>(</td>
 
986
          <td class="paramname"></td><td>)</td>
 
987
          <td> const</td>
 
988
        </tr>
 
989
      </table>
 
990
</div>
 
991
<div class="memdoc">
 
992
 
 
993
<p>Definition at line <a class="el" href="a00854_source.html#l00158">158</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
994
<div class="fragment"><pre class="fragment">                                 {
 
995
  <span class="keyword">const</span> STRING_HEADER* header = GetHeader();
 
996
  <span class="keywordflow">if</span> (header-&gt;used_ == 0)
 
997
    <span class="keywordflow">return</span> NULL;
 
998
 
 
999
  <span class="comment">// mark header length unreliable because tesseract might</span>
 
1000
  <span class="comment">// cast away the const and mutate the string directly.</span>
 
1001
  header-&gt;used_ = -1;
 
1002
  <span class="keywordflow">return</span> GetCStr();
 
1003
}
 
1004
</pre></div>
 
1005
</div>
 
1006
</div>
 
1007
<a class="anchor" id="a0d5a6c456f8e3ef4b4a5077031573df8"></a><!-- doxytag: member="STRING::truncate_at" ref="a0d5a6c456f8e3ef4b4a5077031573df8" args="(inT32 index)" -->
 
1008
<div class="memitem">
 
1009
<div class="memproto">
 
1010
      <table class="memname">
 
1011
        <tr>
 
1012
          <td class="memname">void <a class="el" href="a00557.html#a0d5a6c456f8e3ef4b4a5077031573df8">STRING::truncate_at</a> </td>
 
1013
          <td>(</td>
 
1014
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
1015
          <td class="paramname"><em>index</em></td><td>)</td>
 
1016
          <td></td>
 
1017
        </tr>
 
1018
      </table>
 
1019
</div>
 
1020
<div class="memdoc">
 
1021
 
 
1022
<p>Definition at line <a class="el" href="a00854_source.html#l00229">229</a> of file <a class="el" href="a00854_source.html">strngs.cpp</a>.</p>
 
1023
<div class="fragment"><pre class="fragment">                                    {
 
1024
  <a class="code" href="a00823.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(index &gt;= 0);
 
1025
  FixHeader();
 
1026
  <span class="keywordtype">char</span>* this_cstr = ensure_cstr(index + 1);
 
1027
  this_cstr[index] = <span class="charliteral">&#39;\0&#39;</span>;
 
1028
  GetHeader()-&gt;used_ = index + 1;
 
1029
  assert(InvariantOk());
 
1030
}
 
1031
</pre></div>
 
1032
</div>
 
1033
</div>
 
1034
<hr/>The documentation for this class was generated from the following files:<ul>
 
1035
<li>/usr/local/google/home/jbreiden/tesseract-ocr-read-only/ccutil/<a class="el" href="a00855_source.html">strngs.h</a></li>
 
1036
<li>/usr/local/google/home/jbreiden/tesseract-ocr-read-only/ccutil/<a class="el" href="a00854_source.html">strngs.cpp</a></li>
 
1037
</ul>
 
1038
</div><!-- contents -->
 
1039
</div>
 
1040
<!-- window showing the filter options -->
 
1041
<div id="MSearchSelectWindow"
 
1042
     onmouseover="return searchBox.OnSearchSelectShow()"
 
1043
     onmouseout="return searchBox.OnSearchSelectHide()"
 
1044
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 
1045
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Defines</a></div>
 
1046
 
 
1047
<!-- iframe showing the search results (closed by default) -->
 
1048
<div id="MSearchResultsWindow">
 
1049
<iframe src="javascript:void(0)" frameborder="0" 
 
1050
        name="MSearchResults" id="MSearchResults">
 
1051
</iframe>
 
1052
</div>
 
1053
 
 
1054
  <div id="nav-path" class="navpath">
 
1055
    <ul>
 
1056
      <li class="navelem"><a class="el" href="a00557.html">STRING</a>      </li>
 
1057
 
 
1058
    <li class="footer">Generated on Mon Feb 3 2014 10:59:17 for tesseract by
 
1059
    <a href="http://www.doxygen.org/index.html">
 
1060
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
 
1061
   </ul>
 
1062
 </div>
 
1063
 
 
1064
 
 
1065
</body>
 
1066
</html>