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">
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>
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);
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); });
25
<div id="top"><!-- do not remove this div! -->
29
<table cellspacing="0" cellpadding="0">
31
<tr style="height: 56px;">
34
<td style="padding-left: 0.5em;">
35
<div id="projectname">tesseract
36
 <span id="projectnumber">3.03</span>
48
<!-- Generated by Doxygen 1.7.6.1 -->
49
<script type="text/javascript">
50
var searchBox = new SearchBox("searchBox", "search",false,'Search');
52
<div id="navrow1" class="tabs">
54
<li><a href="index.html"><span>Main Page</span></a></li>
55
<li><a href="pages.html"><span>Related 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>
61
<div id="MSearchBox" class="MSearchBoxInactive">
63
<img id="MSearchSelect" src="search/mag_sel.png"
64
onmouseover="return searchBox.OnSearchSelectShow()"
65
onmouseout="return searchBox.OnSearchSelectHide()"
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>
78
<div id="navrow2" class="tabs2">
80
<li><a href="annotated.html"><span>Class List</span></a></li>
81
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
82
<li><a href="functions.html"><span>Class Members</span></a></li>
86
<div id="side-nav" class="ui-resizable side-nav-resizable">
88
<div id="nav-tree-contents">
91
<div id="splitbar" style="-moz-user-select:none;"
92
class="ui-resizable-handle">
95
<script type="text/javascript">
96
initNavTree('a00557.html','');
98
<div id="doc-content">
100
<div class="summary">
101
<a href="#nested-classes">Classes</a> |
102
<a href="#pub-methods">Public Member Functions</a> </div>
103
<div class="headertitle">
104
<div class="title">STRING Class Reference</div> </div>
106
<div class="contents">
107
<!-- doxytag: class="STRING" -->
108
<p><code>#include <<a class="el" href="a00855_source.html">strngs.h</a>></code></p>
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  </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"> </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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a6a78dbb21ad4450d44e833a21ec6576c">STRING</a> (const <a class="el" href="a00557.html">STRING</a> &<a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">string</a>)</td></tr>
119
<tr><td class="memItemLeft" align="right" valign="top"> </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"> </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 </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 </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> </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> </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> </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 * </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 * </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 * </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 & </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 </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>< <a class="el" href="a00557.html">STRING</a> > *splited)</td></tr>
131
<tr><td class="memItemLeft" align="right" valign="top">void </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a69fa65451960a21d0555da5ae2cad9b2">operator==</a> (const <a class="el" href="a00557.html">STRING</a> &<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> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a7de200e4b367759b370e9b610de05490">operator!=</a> (const <a class="el" href="a00557.html">STRING</a> &<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> </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> & </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> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#afcf3d146103695be14189118b7ddc2c8">operator=</a> (const <a class="el" href="a00557.html">STRING</a> &<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> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#a7072304f2deae96e520b93b44a37424b">operator+</a> (const <a class="el" href="a00557.html">STRING</a> &<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> </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> & </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> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00557.html#ab10c5d733cd8dd0c6245873032579214">operator+=</a> (const <a class="el" href="a00557.html">STRING</a> &<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> & </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 </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 </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 </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 </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>
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 & 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">
156
<td class="memname"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING::STRING</a> </td>
158
<td class="paramname"></td><td>)</td>
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 "\0".</span>
168
memcpy(AllocData(1, <a class="code" href="a00854.html#a927f7d5b361de249344c06b29aa6ca27">kMinCapacity</a>), <span class="stringliteral">""</span>, 1);
173
<a class="anchor" id="a6a78dbb21ad4450d44e833a21ec6576c"></a><!-- doxytag: member="STRING::STRING" ref="a6a78dbb21ad4450d44e833a21ec6576c" args="(const STRING &string)" -->
174
<div class="memitem">
175
<div class="memproto">
176
<table class="memname">
178
<td class="memname"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING::STRING</a> </td>
180
<td class="paramtype">const <a class="el" href="a00557.html">STRING</a> & </td>
181
<td class="paramname"><em>string</em></td><td>)</td>
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"> {
191
<span class="keyword">const</span> STRING_HEADER* str_header = str.GetHeader();
192
<span class="keywordtype">int</span> str_used = str_header->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());
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">
205
<td class="memname"><a class="el" href="a00557.html#a1c63ec33ab6f6afeb82827be3d4e6ab0">STRING::STRING</a> </td>
207
<td class="paramtype">const char * </td>
208
<td class="paramname"><em>string</em></td><td>)</td>
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 "\0".</span>
219
memcpy(AllocData(1, <a class="code" href="a00854.html#a927f7d5b361de249344c06b29aa6ca27">kMinCapacity</a>), <span class="stringliteral">""</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);
225
assert(InvariantOk());
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">
235
<td class="memname"><a class="el" href="a00557.html#a21efec4fdaf6c7bc96be3c634b4f6b7f">STRING::~STRING</a> </td>
237
<td class="paramname"></td><td>)</td>
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"> {
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">
257
<td class="memname">void <a class="el" href="a00557.html#a8b89aab090bf94ed9e0b05625ec6a397">STRING::add_str_double</a> </td>
259
<td class="paramtype">const char * </td>
260
<td class="paramname"><em>str</em>, </td>
263
<td class="paramkey"></td>
265
<td class="paramtype">double </td>
266
<td class="paramname"><em>number</em> </td>
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">"%.8g"</span>, number);
284
num_buffer[<a class="code" href="a00854.html#af3b99544fb662fce123799a16b6050b5">kMaxDoubleSize</a> - 1] = <span class="charliteral">'\0'</span>;
285
*<span class="keyword">this</span> += num_buffer;
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">
295
<td class="memname">void <a class="el" href="a00557.html#a779cd637dd42d58d5500a3a657077e84">STRING::add_str_int</a> </td>
297
<td class="paramtype">const char * </td>
298
<td class="paramname"><em>str</em>, </td>
301
<td class="paramkey"></td>
303
<td class="paramtype">int </td>
304
<td class="paramname"><em>number</em> </td>
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">"%d"</span>, number);
322
num_buffer[<a class="code" href="a00854.html#a98ff26a02a0502569b1676ed30fb1b40">kMaxIntSize</a> - 1] = <span class="charliteral">'\0'</span>;
323
*<span class="keyword">this</span> += num_buffer;
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">
333
<td class="memname">void <a class="el" href="a00557.html#a8cfe836a7f55f4761936ea2231b6b9d2">STRING::assign</a> </td>
335
<td class="paramtype">const char * </td>
336
<td class="paramname"><em>cstr</em>, </td>
339
<td class="paramkey"></td>
341
<td class="paramtype">int </td>
342
<td class="paramname"><em>len</em> </td>
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->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 '\0'</span>
359
this_header = GetHeader(); <span class="comment">// for realloc</span>
360
memcpy(this_cstr, cstr, len);
361
this_cstr[len] = <span class="charliteral">'\0'</span>;
362
this_header->used_ = len + 1;
364
assert(InvariantOk());
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">
374
<td class="memname">const char * <a class="el" href="a00557.html#a9956356f463fc7c5c55833542c1f255d">STRING::c_str</a> </td>
376
<td class="paramname"></td><td>)</td>
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>();
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">
395
<td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> <a class="el" href="a00557.html#ad4c1a804168d9442f125944e7eb5159d">STRING::contains</a> </td>
397
<td class="paramtype">const char </td>
398
<td class="paramname"><em>c</em></td><td>)</td>
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">'\0'</span>) && (strchr (GetCStr(), c) != NULL);
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">
417
<td class="memname">bool <a class="el" href="a00557.html#addf44387285a0498e500b934eb7825f8">STRING::DeSerialize</a> </td>
419
<td class="paramtype">bool </td>
420
<td class="paramname"><em>swap</em>, </td>
423
<td class="paramkey"></td>
425
<td class="paramtype">FILE * </td>
426
<td class="paramname"><em>fp</em> </td>
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(&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>(&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<int>(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>;
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">
455
<td class="memname">void <a class="el" href="a00557.html#a776bc24b07f530e0310041e5b6677dc9">STRING::ensure</a> </td>
457
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
458
<td class="paramname"><em>min_capacity</em></td><td>)</td>
459
<td><code> [inline]</code></td>
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); }
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">
475
<td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00557.html#a168505a533eda60219c93e25adf4cdc5">STRING::length</a> </td>
477
<td class="paramname"></td><td>)</td>
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"> {
487
<span class="keywordflow">return</span> GetHeader()->used_ - 1;
492
<a class="anchor" id="a7de200e4b367759b370e9b610de05490"></a><!-- doxytag: member="STRING::operator!=" ref="a7de200e4b367759b370e9b610de05490" args="(const STRING &string) const " -->
493
<div class="memitem">
494
<div class="memproto">
495
<table class="memname">
497
<td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> <a class="el" href="a00751.html#aa7c6e3433850394bff1cde53f51b70f3">STRING::operator!</a>= </td>
499
<td class="paramtype">const <a class="el" href="a00557.html">STRING</a> & </td>
500
<td class="paramname"><em>string</em></td><td>)</td>
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"> {
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->used_;
514
<span class="keywordtype">int</span> str_used = str_header->used_;
516
<span class="keywordflow">return</span> (this_used != str_used)
517
|| (memcmp(GetCStr(), str.GetCStr(), this_used) != 0);
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">
527
<td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> <a class="el" href="a00751.html#aa7c6e3433850394bff1cde53f51b70f3">STRING::operator!</a>= </td>
529
<td class="paramtype">const char * </td>
530
<td class="paramname"><em>string</em></td><td>)</td>
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"> {
540
<span class="keyword">const</span> STRING_HEADER* this_header = GetHeader();
542
<span class="keywordflow">if</span> (cstr == NULL)
543
<span class="keywordflow">return</span> this_header->used_ > 1; <span class="comment">// either '\0' 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->used_ != length)
547
|| (memcmp(GetCStr(), cstr, length) != 0);
553
<a class="anchor" id="a7072304f2deae96e520b93b44a37424b"></a><!-- doxytag: member="STRING::operator+" ref="a7072304f2deae96e520b93b44a37424b" args="(const STRING &string) const " -->
554
<div class="memitem">
555
<div class="memproto">
556
<table class="memname">
558
<td class="memname"><a class="el" href="a00557.html">STRING</a> STRING::operator+ </td>
560
<td class="paramtype">const <a class="el" href="a00557.html">STRING</a> & </td>
561
<td class="paramname"><em>string</em></td><td>)</td>
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>);
573
assert(InvariantOk());
574
<span class="keywordflow">return</span> result;
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">
584
<td class="memname"><a class="el" href="a00557.html">STRING</a> STRING::operator+ </td>
586
<td class="paramtype">const char </td>
587
<td class="paramname"><em>ch</em></td><td>)</td>
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;
598
<span class="keyword">const</span> STRING_HEADER* this_header = GetHeader();
599
<span class="keywordtype">int</span> this_used = this_header->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->used_;
604
<span class="comment">// copies '\0' but we'll overwrite that</span>
605
memcpy(result_cstr, GetCStr(), this_used);
606
result_cstr[result_used] = ch; <span class="comment">// overwrite old '\0'</span>
607
result_cstr[result_used + 1] = <span class="charliteral">'\0'</span>; <span class="comment">// append on '\0'</span>
608
++result_header->used_;
610
assert(InvariantOk());
611
<span class="keywordflow">return</span> result;
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">
621
<td class="memname"><a class="el" href="a00557.html">STRING</a> & STRING::operator+= </td>
623
<td class="paramtype">const char * </td>
624
<td class="paramname"><em>string</em></td><td>)</td>
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>;
637
<span class="keywordtype">int</span> len = strlen(str) + 1;
638
<span class="keywordtype">int</span> this_used = GetHeader()->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>
642
<span class="comment">// if we had non-empty string then append overwriting old '\0'</span>
643
<span class="comment">// otherwise replace</span>
644
<span class="keywordflow">if</span> (this_used > 0) {
645
memcpy(this_cstr + this_used - 1, str, len);
646
this_header->used_ += len - 1;
647
} <span class="keywordflow">else</span> {
648
memcpy(this_cstr, str, len);
649
this_header->used_ = len;
652
assert(InvariantOk());
653
<span class="keywordflow">return</span> *<span class="keyword">this</span>;
658
<a class="anchor" id="ab10c5d733cd8dd0c6245873032579214"></a><!-- doxytag: member="STRING::operator+=" ref="ab10c5d733cd8dd0c6245873032579214" args="(const STRING &string)" -->
659
<div class="memitem">
660
<div class="memproto">
661
<table class="memname">
663
<td class="memname"><a class="el" href="a00557.html">STRING</a> & STRING::operator+= </td>
665
<td class="paramtype">const <a class="el" href="a00557.html">STRING</a> & </td>
666
<td class="paramname"><em>string</em></td><td>)</td>
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"> {
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->used_;
680
<span class="keywordtype">int</span> this_used = GetHeader()->used_;
681
<span class="keywordtype">char</span>* this_cstr = ensure_cstr(this_used + str_used);
683
STRING_HEADER* this_header = GetHeader(); <span class="comment">// after ensure for realloc</span>
685
<span class="keywordflow">if</span> (this_used > 1) {
686
memcpy(this_cstr + this_used - 1, str_cstr, str_used);
687
this_header->used_ += str_used - 1; <span class="comment">// overwrite '\0'</span>
688
} <span class="keywordflow">else</span> {
689
memcpy(this_cstr, str_cstr, str_used);
690
this_header->used_ = str_used;
693
assert(InvariantOk());
694
<span class="keywordflow">return</span> *<span class="keyword">this</span>;
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">
704
<td class="memname"><a class="el" href="a00557.html">STRING</a> & STRING::operator+= </td>
706
<td class="paramtype">const char </td>
707
<td class="paramname"><em>ch</em></td><td>)</td>
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">'\0'</span>)
717
<span class="keywordflow">return</span> *<span class="keyword">this</span>;
720
<span class="keywordtype">int</span> this_used = GetHeader()->used_;
721
<span class="keywordtype">char</span>* this_cstr = ensure_cstr(this_used + 1);
722
STRING_HEADER* this_header = GetHeader();
724
<span class="keywordflow">if</span> (this_used > 0)
725
--this_used; <span class="comment">// undo old empty null if there was one</span>
727
this_cstr[this_used++] = ch; <span class="comment">// append ch to end</span>
728
this_cstr[this_used++] = <span class="charliteral">'\0'</span>; <span class="comment">// append '\0' after ch</span>
729
this_header->used_ = this_used;
731
assert(InvariantOk());
732
<span class="keywordflow">return</span> *<span class="keyword">this</span>;
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">
742
<td class="memname"><a class="el" href="a00557.html">STRING</a> & STRING::operator= </td>
744
<td class="paramtype">const char * </td>
745
<td class="paramname"><em>string</em></td><td>)</td>
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;
758
this_header->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->used_ = len;
763
} <span class="keywordflow">else</span> {
764
<span class="comment">// Reallocate to same state as default constructor.</span>
766
<span class="comment">// Empty STRINGs contain just the "\0".</span>
767
memcpy(AllocData(1, <a class="code" href="a00854.html#a927f7d5b361de249344c06b29aa6ca27">kMinCapacity</a>), <span class="stringliteral">""</span>, 1);
770
assert(InvariantOk());
771
<span class="keywordflow">return</span> *<span class="keyword">this</span>;
776
<a class="anchor" id="afcf3d146103695be14189118b7ddc2c8"></a><!-- doxytag: member="STRING::operator=" ref="afcf3d146103695be14189118b7ddc2c8" args="(const STRING &string)" -->
777
<div class="memitem">
778
<div class="memproto">
779
<table class="memname">
781
<td class="memname"><a class="el" href="a00557.html">STRING</a> & STRING::operator= </td>
783
<td class="paramtype">const <a class="el" href="a00557.html">STRING</a> & </td>
784
<td class="paramname"><em>string</em></td><td>)</td>
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"> {
794
<span class="keyword">const</span> STRING_HEADER* str_header = str.GetHeader();
795
<span class="keywordtype">int</span> str_used = str_header->used_;
797
GetHeader()->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();
801
memcpy(this_cstr, str.GetCStr(), str_used);
802
this_header->used_ = str_used;
804
assert(InvariantOk());
805
<span class="keywordflow">return</span> *<span class="keyword">this</span>;
810
<a class="anchor" id="a69fa65451960a21d0555da5ae2cad9b2"></a><!-- doxytag: member="STRING::operator==" ref="a69fa65451960a21d0555da5ae2cad9b2" args="(const STRING &string) const " -->
811
<div class="memitem">
812
<div class="memproto">
813
<table class="memname">
815
<td class="memname"><a class="el" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> STRING::operator== </td>
817
<td class="paramtype">const <a class="el" href="a00557.html">STRING</a> & </td>
818
<td class="paramname"><em>string</em></td><td>)</td>
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"> {
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->used_;
832
<span class="keywordtype">int</span> str_used = str_header->used_;
834
<span class="keywordflow">return</span> (this_used == str_used)
835
&& (memcmp(GetCStr(), str.GetCStr(), this_used) == 0);
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">
845
<td class="memname">char & STRING::operator[] </td>
847
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
848
<td class="paramname"><em>index</em></td><td>)</td>
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()->used_ = -1;
860
<span class="keywordflow">return</span> ((<span class="keywordtype">char</span> *)GetCStr())[index];
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">
870
<td class="memname">bool <a class="el" href="a00557.html#ad2e7e107c5f78f7f716e7688b1cc2d4a">STRING::Serialize</a> </td>
872
<td class="paramtype">FILE * </td>
873
<td class="paramname"><em>fp</em></td><td>)</td>
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(&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<int>(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>;
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">
895
<td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00557.html#a0c93665497f997cdd426cc8bfb1955e6">STRING::size</a> </td>
897
<td class="paramname"></td><td>)</td>
898
<td> const<code> [inline]</code></td>
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>(); }
909
<a class="anchor" id="a70cb880f818d4af4a4f4036032c3e9dc"></a><!-- doxytag: member="STRING::split" ref="a70cb880f818d4af4a4f4036032c3e9dc" args="(const char c, GenericVector< STRING > *splited)" -->
910
<div class="memitem">
911
<div class="memproto">
912
<table class="memname">
914
<td class="memname">void <a class="el" href="a00557.html#a70cb880f818d4af4a4f4036032c3e9dc">STRING::split</a> </td>
916
<td class="paramtype">const char </td>
917
<td class="paramname"><em>c</em>, </td>
920
<td class="paramkey"></td>
922
<td class="paramtype"><a class="el" href="a00403.html">GenericVector</a>< <a class="el" href="a00557.html">STRING</a> > * </td>
923
<td class="paramname"><em>splited</em> </td>
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 < <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">'\0'</span>;
941
<a class="code" href="a00557.html">STRING</a> tmp = GetCStr() + start_index;
942
splited-><a class="code" href="a00403.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(tmp);
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-><a class="code" href="a00403.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(tmp);
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">
962
<td class="memname">char* <a class="el" href="a00557.html#a8bc37495184603e527daece60b4d265d">STRING::strdup</a> </td>
964
<td class="paramname"></td><td>)</td>
965
<td> const<code> [inline]</code></td>
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);
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">
984
<td class="memname">const char * <a class="el" href="a00557.html#a32beee43ecab1bed8bebc3466896ad6e">STRING::string</a> </td>
986
<td class="paramname"></td><td>)</td>
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->used_ == 0)
997
<span class="keywordflow">return</span> NULL;
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->used_ = -1;
1002
<span class="keywordflow">return</span> GetCStr();
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">
1012
<td class="memname">void <a class="el" href="a00557.html#a0d5a6c456f8e3ef4b4a5077031573df8">STRING::truncate_at</a> </td>
1014
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
1015
<td class="paramname"><em>index</em></td><td>)</td>
1020
<div class="memdoc">
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 >= 0);
1026
<span class="keywordtype">char</span>* this_cstr = ensure_cstr(index + 1);
1027
this_cstr[index] = <span class="charliteral">'\0'</span>;
1028
GetHeader()->used_ = index + 1;
1029
assert(InvariantOk());
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>
1038
</div><!-- contents -->
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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Defines</a></div>
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">
1054
<div id="nav-path" class="navpath">
1056
<li class="navelem"><a class="el" href="a00557.html">STRING</a> </li>
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>