Imported Upstream version 1.51.0
[platform/upstream/boost.git] / libs / spirit / doc / html / spirit / qi / reference / char / char.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Character Parser (char_, lit)</title>
5 <link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="../../../../index.html" title="Spirit 2.5.2">
8 <link rel="up" href="../char.html" title="Character Parsers">
9 <link rel="prev" href="../char.html" title="Character Parsers">
10 <link rel="next" href="char_class.html" title="Character Classification Parsers (alnum, digit, etc.)">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../char.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="char_class.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h5 class="title">
27 <a name="spirit.qi.reference.char.char"></a><a class="link" href="char.html" title="Character Parser (char_, lit)">Character Parser (<code class="computeroutput"><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">lit</span></code>)</a>
28 </h5></div></div></div>
29 <h6>
30 <a name="spirit.qi.reference.char.char.h0"></a>
31             <span><a name="spirit.qi.reference.char.char.description"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.description">Description</a>
32           </h6>
33 <p>
34             The <code class="computeroutput"><span class="identifier">char_</span></code> parser matches
35             single characters. The <code class="computeroutput"><span class="identifier">char_</span></code>
36             parser has an associated <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
37             Encoding Namespace</a>. This is needed when doing basic operations
38             such as inhibiting case sensitivity and dealing with character ranges.
39           </p>
40 <p>
41             There are various forms of <code class="computeroutput"><span class="identifier">char_</span></code>.
42           </p>
43 <h6>
44 <a name="spirit.qi.reference.char.char.h1"></a>
45             <span><a name="spirit.qi.reference.char.char.char_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char_">char_</a>
46           </h6>
47 <p>
48             The no argument form of <code class="computeroutput"><span class="identifier">char_</span></code>
49             matches any character in the associated <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
50             Encoding Namespace</a>.
51           </p>
52 <pre class="programlisting"><span class="identifier">char_</span>               <span class="comment">// matches any character</span>
53 </pre>
54 <h6>
55 <a name="spirit.qi.reference.char.char.h2"></a>
56             <span><a name="spirit.qi.reference.char.char.char__ch_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char__ch_">char_(ch)</a>
57           </h6>
58 <p>
59             The single argument form of <code class="computeroutput"><span class="identifier">char_</span></code>
60             (with a character argument) matches the supplied character.
61           </p>
62 <pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="char">'x'</span><span class="special">)</span>          <span class="comment">// matches 'x'</span>
63 <span class="identifier">char_</span><span class="special">(</span><span class="identifier">L</span><span class="char">'x'</span><span class="special">)</span>         <span class="comment">// matches L'x'</span>
64 <span class="identifier">char_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span>            <span class="comment">// matches x (a char)</span>
65 </pre>
66 <h6>
67 <a name="spirit.qi.reference.char.char.h3"></a>
68             <span><a name="spirit.qi.reference.char.char.char__first__last_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char__first__last_">char_(first,
69             last)</a>
70           </h6>
71 <p>
72             <code class="computeroutput"><span class="identifier">char_</span></code> with two arguments,
73             matches a range of characters.
74           </p>
75 <pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">,</span><span class="char">'z'</span><span class="special">)</span>      <span class="comment">// alphabetic characters</span>
76 <span class="identifier">char_</span><span class="special">(</span><span class="identifier">L</span><span class="char">'0'</span><span class="special">,</span><span class="identifier">L</span><span class="char">'9'</span><span class="special">)</span>    <span class="comment">// digits</span>
77 </pre>
78 <p>
79             A range of characters is created from a low-high character pair. Such
80             a parser matches a single character that is in the range, including both
81             endpoints. Note, the first character must be <span class="emphasis"><em>before</em></span>
82             the second, according to the underlying <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
83             Encoding Namespace</a>.
84           </p>
85 <p>
86             Character mapping is inherently platform dependent. It is not guaranteed
87             in the standard for example that <code class="computeroutput"><span class="char">'A'</span>
88             <span class="special">&lt;</span> <span class="char">'Z'</span></code>,
89             that is why in Spirit2, we purposely attach a specific <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
90             Encoding Namespace</a> (such as ASCII, ISO-8859-1) to the <code class="computeroutput"><span class="identifier">char_</span></code> parser to eliminate such ambiguities.
91           </p>
92 <div class="note"><table border="0" summary="Note">
93 <tr>
94 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
95 <th align="left">Note</th>
96 </tr>
97 <tr><td align="left" valign="top">
98 <p>
99               <span class="bold"><strong>Sparse bit vectors</strong></span>
100             </p>
101 <p>
102               To accommodate 16/32 and 64 bit characters, the char-set statically
103               switches from a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bitset</span></code>
104               implementation when the character type is not greater than 8 bits,
105               to a sparse bit/boolean set which uses a sorted vector of disjoint
106               ranges (<code class="computeroutput"><span class="identifier">range_run</span></code>).
107               The set is constructed from ranges such that adjacent or overlapping
108               ranges are coalesced.
109             </p>
110 <p>
111               <code class="computeroutput"><span class="identifier">range_runs</span></code> are very
112               space-economical in situations where there are lots of ranges and a
113               few individual disjoint values. Searching is O(log n) where n is the
114               number of ranges.
115             </p>
116 </td></tr>
117 </table></div>
118 <h6>
119 <a name="spirit.qi.reference.char.char.h4"></a>
120             <span><a name="spirit.qi.reference.char.char.char__def_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char__def_">char_(def)</a>
121           </h6>
122 <p>
123             Lastly, when given a string (a plain C string, a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>,
124             etc.), the string is regarded as a char-set definition string following
125             a syntax that resembles posix style regular expression character sets
126             (except that double quotes delimit the set elements instead of square
127             brackets and there is no special negation ^ character). Examples:
128           </p>
129 <pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="string">"a-zA-Z"</span><span class="special">)</span>     <span class="comment">// alphabetic characters</span>
130 <span class="identifier">char_</span><span class="special">(</span><span class="string">"0-9a-fA-F"</span><span class="special">)</span>  <span class="comment">// hexadecimal characters</span>
131 <span class="identifier">char_</span><span class="special">(</span><span class="string">"actgACTG"</span><span class="special">)</span>   <span class="comment">// DNA identifiers</span>
132 <span class="identifier">char_</span><span class="special">(</span><span class="string">"\x7f\x7e"</span><span class="special">)</span>   <span class="comment">// Hexadecimal 0x7F and 0x7E</span>
133 </pre>
134 <h6>
135 <a name="spirit.qi.reference.char.char.h5"></a>
136             <span><a name="spirit.qi.reference.char.char.lit_ch_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.lit_ch_">lit(ch)</a>
137           </h6>
138 <p>
139             <code class="computeroutput"><span class="identifier">lit</span></code>, when passed a single
140             character, behaves like the single argument <code class="computeroutput"><span class="identifier">char_</span></code>
141             except that <code class="computeroutput"><span class="identifier">lit</span></code> does
142             not synthesize an attribute. A plain <code class="computeroutput"><span class="keyword">char</span></code>
143             or <code class="computeroutput"><span class="keyword">wchar_t</span></code> is equivalent
144             to a <code class="computeroutput"><span class="identifier">lit</span></code>.
145           </p>
146 <div class="note"><table border="0" summary="Note">
147 <tr>
148 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
149 <th align="left">Note</th>
150 </tr>
151 <tr><td align="left" valign="top"><p>
152               <code class="computeroutput"><span class="identifier">lit</span></code> is reused by both
153               the <a class="link" href="../string/string.html" title="String Parsers (string, lit)">string parsers</a>
154               and the char parsers. In general, a char parser is created when you
155               pass in a character and a string parser is created when you pass in
156               a string. The exception is when you pass a single element literal string,
157               e.g. <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="string">"x"</span><span class="special">)</span></code>.
158               In this case, we optimize this to create a char parser instead of a
159               string parser.
160             </p></td></tr>
161 </table></div>
162 <p>
163             Examples:
164           </p>
165 <pre class="programlisting"><span class="char">'x'</span>
166 <span class="identifier">lit</span><span class="special">(</span><span class="char">'x'</span><span class="special">)</span>
167 <span class="identifier">lit</span><span class="special">(</span><span class="identifier">L</span><span class="char">'x'</span><span class="special">)</span>
168 <span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span> <span class="comment">// c is a char</span>
169 </pre>
170 <h6>
171 <a name="spirit.qi.reference.char.char.h6"></a>
172             <span><a name="spirit.qi.reference.char.char.header"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.header">Header</a>
173           </h6>
174 <pre class="programlisting"><span class="comment">// forwards to &lt;boost/spirit/home/qi/char/char.hpp&gt;</span>
175 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">qi_char_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
176 </pre>
177 <p>
178             Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>.
179           </p>
180 <h6>
181 <a name="spirit.qi.reference.char.char.h7"></a>
182             <span><a name="spirit.qi.reference.char.char.namespace"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.namespace">Namespace</a>
183           </h6>
184 <div class="informaltable"><table class="table">
185 <colgroup><col></colgroup>
186 <thead><tr><th>
187                     <p>
188                       Name
189                     </p>
190                   </th></tr></thead>
191 <tbody>
192 <tr><td>
193                     <p>
194                       <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias:
195                       boost::spirit::qi::lit</span></code>
196                     </p>
197                   </td></tr>
198 <tr><td>
199                     <p>
200                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>
201                     </p>
202                   </td></tr>
203 </tbody>
204 </table></div>
205 <p>
206             In the table above, <code class="computeroutput"><span class="identifier">ns</span></code>
207             represents a <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
208             Encoding Namespace</a>.
209           </p>
210 <h6>
211 <a name="spirit.qi.reference.char.char.h8"></a>
212             <span><a name="spirit.qi.reference.char.char.model_of"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.model_of">Model
213             of</a>
214           </h6>
215 <div class="blockquote"><blockquote class="blockquote"><p>
216               <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>
217             </p></blockquote></div>
218 <div class="variablelist">
219 <p class="title"><b>Notation</b></p>
220 <dl>
221 <dt><span class="term"><code class="computeroutput"><span class="identifier">c</span></code>, <code class="computeroutput"><span class="identifier">f</span></code>, <code class="computeroutput"><span class="identifier">l</span></code></span></dt>
222 <dd><p>
223                   A literal char, e.g. <code class="computeroutput"><span class="char">'x'</span></code>,
224                   <code class="computeroutput"><span class="identifier">L</span><span class="char">'x'</span></code>
225                   or anything that can be converted to a <code class="computeroutput"><span class="keyword">char</span></code>
226                   or <code class="computeroutput"><span class="keyword">wchar_t</span></code>, or a
227                   <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy Argument</a>
228                   that evaluates to anything that can be converted to a <code class="computeroutput"><span class="keyword">char</span></code> or <code class="computeroutput"><span class="keyword">wchar_t</span></code>.
229                 </p></dd>
230 <dt><span class="term"><code class="computeroutput"><span class="identifier">ns</span></code></span></dt>
231 <dd><p>
232                   A <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
233                   Encoding Namespace</a>.
234                 </p></dd>
235 <dt><span class="term"><code class="computeroutput"><span class="identifier">cs</span></code></span></dt>
236 <dd><p>
237                   A <a class="link" href="../basics.html#spirit.qi.reference.basics.string">String</a>
238                   or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy
239                   Argument</a> that evaluates to a <a class="link" href="../basics.html#spirit.qi.reference.basics.string">String</a>
240                   that specifies a char-set definition string following a syntax
241                   that resembles posix style regular expression character sets (except
242                   the square brackets and the negation <code class="computeroutput"><span class="special">^</span></code>
243                   character).
244                 </p></dd>
245 <dt><span class="term"><code class="computeroutput"><span class="identifier">cp</span></code></span></dt>
246 <dd><p>
247                   A char parser, a char range parser or a char set parser.
248                 </p></dd>
249 </dl>
250 </div>
251 <h6>
252 <a name="spirit.qi.reference.char.char.h9"></a>
253             <span><a name="spirit.qi.reference.char.char.expression_semantics"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.expression_semantics">Expression
254             Semantics</a>
255           </h6>
256 <p>
257             Semantics of an expression is defined only where it differs from, or
258             is not defined in <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>.
259           </p>
260 <div class="informaltable"><table class="table">
261 <colgroup>
262 <col>
263 <col>
264 </colgroup>
265 <thead><tr>
266 <th>
267                     <p>
268                       Expression
269                     </p>
270                   </th>
271 <th>
272                     <p>
273                       Semantics
274                     </p>
275                   </th>
276 </tr></thead>
277 <tbody>
278 <tr>
279 <td>
280                     <p>
281                       <code class="computeroutput"><span class="identifier">c</span></code>
282                     </p>
283                   </td>
284 <td>
285                     <p>
286                       Create char parser from a char, <code class="computeroutput"><span class="identifier">c</span></code>.
287                     </p>
288                   </td>
289 </tr>
290 <tr>
291 <td>
292                     <p>
293                       <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
294                     </p>
295                   </td>
296 <td>
297                     <p>
298                       Create a char parser from a char, <code class="computeroutput"><span class="identifier">c</span></code>.
299                     </p>
300                   </td>
301 </tr>
302 <tr>
303 <td>
304                     <p>
305                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>
306                     </p>
307                   </td>
308 <td>
309                     <p>
310                       Create a char parser that matches any character in the <code class="computeroutput"><span class="identifier">ns</span></code> encoding.
311                     </p>
312                   </td>
313 </tr>
314 <tr>
315 <td>
316                     <p>
317                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
318                     </p>
319                   </td>
320 <td>
321                     <p>
322                       Create a char parser with <code class="computeroutput"><span class="identifier">ns</span></code>
323                       encoding from a char, <code class="computeroutput"><span class="identifier">c</span></code>.
324                     </p>
325                   </td>
326 </tr>
327 <tr>
328 <td>
329                     <p>
330                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span>
331                       <span class="identifier">l</span><span class="special">)</span></code>
332                     </p>
333                   </td>
334 <td>
335                     <p>
336                       Create a char-range parser that matches characters from range
337                       (<code class="computeroutput"><span class="identifier">f</span></code> to <code class="computeroutput"><span class="identifier">l</span></code>, inclusive) with <code class="computeroutput"><span class="identifier">ns</span></code> encoding.
338                     </p>
339                   </td>
340 </tr>
341 <tr>
342 <td>
343                     <p>
344                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code>
345                     </p>
346                   </td>
347 <td>
348                     <p>
349                       Create a char-set parser with <code class="computeroutput"><span class="identifier">ns</span></code>
350                       encoding from a char-set definition string, <code class="computeroutput"><span class="identifier">cs</span></code>.
351                     </p>
352                   </td>
353 </tr>
354 <tr>
355 <td>
356                     <p>
357                       <code class="computeroutput"><span class="special">~</span><span class="identifier">cp</span></code>
358                     </p>
359                   </td>
360 <td>
361                     <p>
362                       Negate <code class="computeroutput"><span class="identifier">cp</span></code>.
363                       The result is a negated char parser that matches any character
364                       in the <code class="computeroutput"><span class="identifier">ns</span></code> encoding
365                       except the characters matched by <code class="computeroutput"><span class="identifier">cp</span></code>.
366                     </p>
367                   </td>
368 </tr>
369 </tbody>
370 </table></div>
371 <h6>
372 <a name="spirit.qi.reference.char.char.h10"></a>
373             <span><a name="spirit.qi.reference.char.char.attributes"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.attributes">Attributes</a>
374           </h6>
375 <div class="informaltable"><table class="table">
376 <colgroup>
377 <col>
378 <col>
379 </colgroup>
380 <thead><tr>
381 <th>
382                     <p>
383                       Expression
384                     </p>
385                   </th>
386 <th>
387                     <p>
388                       Attribute
389                     </p>
390                   </th>
391 </tr></thead>
392 <tbody>
393 <tr>
394 <td>
395                     <p>
396                       <code class="computeroutput"><span class="identifier">c</span></code>
397                     </p>
398                   </td>
399 <td>
400                     <p>
401                       <code class="computeroutput"><span class="identifier">unused</span></code> or if
402                       <code class="computeroutput"><span class="identifier">c</span></code> is a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy Argument</a>,
403                       the character type returned by invoking it.
404                     </p>
405                   </td>
406 </tr>
407 <tr>
408 <td>
409                     <p>
410                       <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
411                     </p>
412                   </td>
413 <td>
414                     <p>
415                       <code class="computeroutput"><span class="identifier">unused</span></code> or if
416                       <code class="computeroutput"><span class="identifier">c</span></code> is a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy Argument</a>,
417                       the character type returned by invoking it.
418                     </p>
419                   </td>
420 </tr>
421 <tr>
422 <td>
423                     <p>
424                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>
425                     </p>
426                   </td>
427 <td>
428                     <p>
429                       The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
430                       Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
431                     </p>
432                   </td>
433 </tr>
434 <tr>
435 <td>
436                     <p>
437                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
438                     </p>
439                   </td>
440 <td>
441                     <p>
442                       The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
443                       Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
444                     </p>
445                   </td>
446 </tr>
447 <tr>
448 <td>
449                     <p>
450                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span>
451                       <span class="identifier">l</span><span class="special">)</span></code>
452                     </p>
453                   </td>
454 <td>
455                     <p>
456                       The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
457                       Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
458                     </p>
459                   </td>
460 </tr>
461 <tr>
462 <td>
463                     <p>
464                       <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code>
465                     </p>
466                   </td>
467 <td>
468                     <p>
469                       The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
470                       Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
471                     </p>
472                   </td>
473 </tr>
474 <tr>
475 <td>
476                     <p>
477                       <code class="computeroutput"><span class="special">~</span><span class="identifier">cp</span></code>
478                     </p>
479                   </td>
480 <td>
481                     <p>
482                       The attribute of <code class="computeroutput"><span class="identifier">cp</span></code>.
483                     </p>
484                   </td>
485 </tr>
486 </tbody>
487 </table></div>
488 <h6>
489 <a name="spirit.qi.reference.char.char.h11"></a>
490             <span><a name="spirit.qi.reference.char.char.complexity"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.complexity">Complexity</a>
491           </h6>
492 <div class="blockquote"><blockquote class="blockquote"><p>
493               <span class="bold"><strong>O(N)</strong></span>, except for char-sets with 16-bit
494               (or more) characters (e.g. <code class="computeroutput"><span class="keyword">wchar_t</span></code>).
495               These have <span class="bold"><strong>O(log N)</strong></span> complexity, where
496               N is the number of distinct character ranges in the set.
497             </p></blockquote></div>
498 <h6>
499 <a name="spirit.qi.reference.char.char.h12"></a>
500             <span><a name="spirit.qi.reference.char.char.example"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.example">Example</a>
501           </h6>
502 <div class="note"><table border="0" summary="Note">
503 <tr>
504 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
505 <th align="left">Note</th>
506 </tr>
507 <tr><td align="left" valign="top"><p>
508               The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.qi.reference.basics.examples">Basics Examples</a>
509               section.
510             </p></td></tr>
511 </table></div>
512 <p>
513             Some using declarations:
514           </p>
515 <p>
516 </p>
517 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span>
518 <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">char_</span><span class="special">;</span>
519 </pre>
520 <p>
521           </p>
522 <p>
523             Basic literals:
524           </p>
525 <p>
526 </p>
527 <pre class="programlisting"><span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="char">'x'</span><span class="special">);</span>                      <span class="comment">// plain literal</span>
528 <span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="char">'x'</span><span class="special">));</span>                 <span class="comment">// explicit literal</span>
529 <span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'x'</span><span class="special">));</span>               <span class="comment">// ascii::char_</span>
530 </pre>
531 <p>
532           </p>
533 <p>
534             Range:
535           </p>
536 <p>
537 </p>
538 <pre class="programlisting"><span class="keyword">char</span> <span class="identifier">ch</span><span class="special">;</span>
539 <span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"5"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'0'</span><span class="special">,</span><span class="char">'9'</span><span class="special">),</span> <span class="identifier">ch</span><span class="special">);</span>  <span class="comment">// ascii::char_ range</span>
540 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ch</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>               <span class="comment">// prints '5'</span>
541 </pre>
542 <p>
543           </p>
544 <p>
545             Character set:
546           </p>
547 <p>
548 </p>
549 <pre class="programlisting"><span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"5"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="string">"0-9"</span><span class="special">),</span> <span class="identifier">ch</span><span class="special">);</span>    <span class="comment">// ascii::char_ set</span>
550 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ch</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>               <span class="comment">// prints '5'</span>
551 </pre>
552 <p>
553           </p>
554 <p>
555             Lazy char_ using <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a>
556           </p>
557 <p>
558 </p>
559 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">phx</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">;</span>
560 <span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="identifier">phx</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="char">'x'</span><span class="special">));</span>            <span class="comment">// direct</span>
561 <span class="identifier">test_parser</span><span class="special">(</span><span class="string">"5"</span><span class="special">,</span>
562     <span class="identifier">char_</span><span class="special">(</span><span class="identifier">phx</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="char">'0'</span><span class="special">),</span><span class="identifier">phx</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="char">'9'</span><span class="special">)));</span>    <span class="comment">// ascii::char_ range</span>
563 </pre>
564 <p>
565           </p>
566 </div>
567 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
568 <td align="left"></td>
569 <td align="right"><div class="copyright-footer">Copyright &#169; 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
570         Distributed under the Boost Software License, Version 1.0. (See accompanying
571         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
572       </p>
573 </div></td>
574 </tr></table>
575 <hr>
576 <div class="spirit-nav">
577 <a accesskey="p" href="../char.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="char_class.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
578 </div>
579 </body>
580 </html>