-
Notifications
You must be signed in to change notification settings - Fork 0
/
Attribute_8h_source.html
366 lines (366 loc) · 66.5 KB
/
Attribute_8h_source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ROSE: Attribute.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<link rel="search" href="search_opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="ROSE"/>
<link href="roseDoxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ROSE<span id="projectnumber"> 0.11.145.141</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() {
initMenu('',true,true,'search.html','Search');
$(document).ready(function() {
if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }
});
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_859fdbd7312fa6fbda59c78acaef4f65.html">Sawyer</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">Attribute.h</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// WARNING: Changes to this file must be contributed back to Sawyer or else they will</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// be clobbered by the next update from Sawyer. The Sawyer repository is at</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// https://gitlab.com/charger7534/sawyer.git.</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// This header file originally came from the ROSE project, which is released under a BSD license that requires the following</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// notification. All subsequent modifications are licensed as described in Sawyer's top-level "LICENSE" file.</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">//</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// License for original version: Revised BSD License (non-advertising clause)</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">// License for original version: </span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">// License for original version: This software is distributed under the revised Berkeley Software Distribution </span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">// License for original version: (BSD) license by Lawrence Livermore National Laboratory LLNL (managed by the </span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">// License for original version: University of California). The revised BSD license is the same as the original</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">// License for original version: BSD license, but without the famous advertising clause that was a problem </span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">// License for original version: historically (see www.gnu.org/philosophy/bsd.html for details). Our goal</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">// License for original version: has been to select as liberal a license as possible for the ROSE project.</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">// License for original version: </span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// License for original version: Copyright (c) 2005, 2006, 2007, Regents of the University of California</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// License for original version: All rights reserved.</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// License for original version: </span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// License for original version: Revised BSD License:</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// License for original version: </span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// License for original version: Redistribution and use in source and binary forms, with or without modification, </span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// License for original version: are permitted provided that the following conditions are met:</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">// License for original version: </span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">// License for original version: * Redistributions of source code must retain the above copyright notice, </span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">// License for original version: this list of conditions and the following disclaimer.</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">// License for original version: * Redistributions in binary form must reproduce the above copyright notice, </span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// License for original version: this list of conditions and the following disclaimer in the documentation </span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// License for original version: and/or other materials provided with the distribution.</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// License for original version: * Neither the name of the University of California nor the names of its </span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">// License for original version: contributors may be used to endorse or promote products derived from </span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// License for original version: this software without specific prior written permission.</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">// License for original version: </span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">// License for original version: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND </span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">// License for original version: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED </span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// License for original version: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. </span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">// License for original version: IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, </span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">// License for original version: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, </span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// License for original version: BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, </span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">// License for original version: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY </span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">// License for original version: OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE </span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// License for original version: OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED </span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// License for original version: OF THE POSSIBILITY OF SUCH DAMAGE.</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#ifndef Sawyer_Attribute_H</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#define Sawyer_Attribute_H</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#include <boost/any.hpp></span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#include <boost/foreach.hpp></span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#include <boost/lexical_cast.hpp></span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#include <Sawyer/Exception.h></span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#include <Sawyer/Map.h></span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#include <Sawyer/Optional.h></span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include <Sawyer/Sawyer.h></span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#include <Sawyer/Synchronization.h></span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#include <string></span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#include <vector></span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceSawyer.html">Sawyer</a> {</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="foldopen" id="foldopen00135" data-start="{" data-end="}">
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html"> 135</a></span><span class="keyword">namespace </span>Attribute {</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68"> 140</a></span><span class="keyword">typedef</span> <span class="keywordtype">size_t</span> <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a>;</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>SAWYER_EXPORT <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <a class="code hl_variable" href="namespaceSawyer_1_1Attribute.html#a996e628a61155318818e26714b87c8a0">INVALID_ID</a>;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html#aeece48cf6f8b5028066b0f8d2374e2e5"> 154</a></span>SAWYER_EXPORT <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <a class="code hl_function" href="namespaceSawyer_1_1Attribute.html#aeece48cf6f8b5028066b0f8d2374e2e5">declare</a>(<span class="keyword">const</span> std::string &name);</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html#a9d151aab4b6b553e7f567e528f08b06d"> 161</a></span>SAWYER_EXPORT <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <a class="code hl_function" href="namespaceSawyer_1_1Attribute.html#a9d151aab4b6b553e7f567e528f08b06d">declareMaybe</a>(<span class="keyword">const</span> std::string &name);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html#ae6f1b14d5e7a643013abc21d656b2e02"> 169</a></span>SAWYER_EXPORT <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <a class="code hl_function" href="namespaceSawyer_1_1Attribute.html#ae6f1b14d5e7a643013abc21d656b2e02">id</a>(<span class="keyword">const</span> std::string &name);</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html#aae888f7e272916196cb47287a02de225"> 177</a></span>SAWYER_EXPORT <span class="keyword">const</span> std::string& name(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a>);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="foldopen" id="foldopen00182" data-start="{" data-end="};">
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1DoesNotExist.html"> 182</a></span><span class="keyword">class </span>SAWYER_EXPORT <a class="code hl_class" href="classSawyer_1_1Attribute_1_1DoesNotExist.html">DoesNotExist</a>: <span class="keyword">public</span> <a class="code hl_class" href="classSawyer_1_1Exception_1_1NotFound.html">Exception::NotFound</a> {</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1DoesNotExist.html">~DoesNotExist</a>() <span class="keywordflow">throw</span> () {}</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="foldopen" id="foldopen00187" data-start="{" data-end="}">
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1DoesNotExist.html#ac64c06df3e7fd3667196c4fcce77bb68"> 187</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1DoesNotExist.html#ac64c06df3e7fd3667196c4fcce77bb68">DoesNotExist</a>(<span class="keyword">const</span> std::string &attrName)</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> : Exception::NotFound(attrName + <span class="stringliteral">" does not exist in object"</span>) {}</div>
</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span>};</div>
</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
<div class="foldopen" id="foldopen00192" data-start="{" data-end="};">
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1AlreadyExists.html"> 192</a></span><span class="keyword">class </span>SAWYER_EXPORT <a class="code hl_class" href="classSawyer_1_1Attribute_1_1AlreadyExists.html">AlreadyExists</a>: <span class="keyword">public</span> <a class="code hl_class" href="classSawyer_1_1Exception_1_1AlreadyExists.html">Exception::AlreadyExists</a> {</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1AlreadyExists.html">~AlreadyExists</a>() <span class="keywordflow">throw</span> () {}</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
<div class="foldopen" id="foldopen00197" data-start="{" data-end="}">
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1AlreadyExists.html#a9b6f88ee569d0ef4e1d3e8fffa1b114c"> 197</a></span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1AlreadyExists.html#a9b6f88ee569d0ef4e1d3e8fffa1b114c">AlreadyExists</a>(<span class="keyword">const</span> std::string &attrName, <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> : Exception::<a class="code hl_class" href="classSawyer_1_1Attribute_1_1AlreadyExists.html">AlreadyExists</a>(attrName + <span class="stringliteral">" is already a declared attribute (id="</span> +</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> boost::lexical_cast<std::string>(<a class="code hl_function" href="namespaceSawyer_1_1Attribute.html#ae6f1b14d5e7a643013abc21d656b2e02">id</a>) + <span class="stringliteral">")"</span>) {}</div>
</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>};</div>
</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="namespaceSawyer_1_1Attribute.html#a9baa2cf18cfb7f6c63f16e343b47dbba"> 203</a></span><span class="keyword">typedef</span> boost::bad_any_cast <a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#a9baa2cf18cfb7f6c63f16e343b47dbba">WrongQueryType</a>;</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="keyword">template</span><<span class="keyword">class</span> SyncTag = SAWYER_THREAD_TAG></div>
<div class="foldopen" id="foldopen00215" data-start="{" data-end="};">
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html"> 215</a></span><span class="keyword">class </span><a class="code hl_class" href="classSawyer_1_1Attribute_1_1Storage.html">Storage</a> {</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">typedef</span> <a class="code hl_struct" href="structSawyer_1_1SynchronizationTraits.html">SynchronizationTraits<SyncTag></a> <a class="code hl_struct" href="structSawyer_1_1SynchronizationTraits.html">Sync</a>;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> </div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">typedef</span> <a class="code hl_class" href="classSawyer_1_1Container_1_1Map.html">Sawyer::Container::Map<Id, boost::any></a> <a class="code hl_class" href="classSawyer_1_1Container_1_1Map.html">AttrMap</a>;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <a class="code hl_class" href="classSawyer_1_1Container_1_1Map.html">AttrMap</a> values_;</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">mutable</span> <span class="keyword">typename</span> Sync::Mutex mutex_;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#ae15492e36a2af8002023cab5afeaf671"> 228</a></span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#ae15492e36a2af8002023cab5afeaf671">Storage</a>() {}</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1Storage.html">~Storage</a>() {} <span class="comment">// possibly required for MSVC linking</span></div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div>
<div class="foldopen" id="foldopen00234" data-start="{" data-end="}">
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a9f66f01b292f92cdc70a18de1a7085ef"> 234</a></span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a9f66f01b292f92cdc70a18de1a7085ef">Storage</a>(<span class="keyword">const</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1Storage.html">Storage</a> &other) {</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">typename</span> Sync::LockGuard lock(other.mutex_);</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> values_ = other.values_;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
<div class="foldopen" id="foldopen00242" data-start="{" data-end="}">
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#ae0dda357eaeee6b1974c3feae00c40dd"> 242</a></span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1Storage.html">Storage</a>& <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#ae0dda357eaeee6b1974c3feae00c40dd">operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1Storage.html">Storage</a> &other) {</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">typename</span> Sync::LockGuard2 lock(mutex_, other.mutex_);</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> values_ = other.values_;</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div>
</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
<div class="foldopen" id="foldopen00253" data-start="{" data-end="}">
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#abf3618e6d7c3a3f4bcc38ad23da3b8e9"> 253</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#abf3618e6d7c3a3f4bcc38ad23da3b8e9">attributeExists</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">return</span> values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a4e0130d82c5890b18ba8f70497c53c72">exists</a>(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> }</div>
</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="foldopen" id="foldopen00264" data-start="{" data-end="}">
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a5a79e661eb48d0b9548bd0dacc63daba"> 264</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a5a79e661eb48d0b9548bd0dacc63daba">eraseAttribute</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>) {</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a8c1af11399c1d51d35c2f06934a1afd1">erase</a>(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> }</div>
</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> </div>
<div class="foldopen" id="foldopen00272" data-start="{" data-end="}">
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#ab9276a22e706c4e76d65d45e715051e0"> 272</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#ab9276a22e706c4e76d65d45e715051e0">clearAttributes</a>() {</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#acf2693e499cfc44874e7e2ca79e1db23">clear</a>();</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> }</div>
</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="foldopen" id="foldopen00285" data-start="{" data-end="}">
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a9900916e61e6c0ce53e87803221962c0"> 285</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a9900916e61e6c0ce53e87803221962c0">setAttribute</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> T &value) {</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#acadeb695d9d4e831e3b21f890d0ac39c">insert</a>(<span class="keywordtype">id</span>, boost::any(value));</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> }</div>
</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="foldopen" id="foldopen00298" data-start="{" data-end="}">
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a2143837f634be78ae5143e962d272fb8"> 298</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a2143837f634be78ae5143e962d272fb8">setAttributeMaybe</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> T &value) {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span> (!values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a4e0130d82c5890b18ba8f70497c53c72">exists</a>(<span class="keywordtype">id</span>)) {</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#acadeb695d9d4e831e3b21f890d0ac39c">insert</a>(<span class="keywordtype">id</span>, boost::any(value));</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> }</div>
</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="foldopen" id="foldopen00315" data-start="{" data-end="}">
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#ae39391002b59fc46db71a536cbe3e075"> 315</a></span> T <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#ae39391002b59fc46db71a536cbe3e075">getAttribute</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> AttrMap::ConstNodeIterator found = values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a22e8858d4e808c2922aa1181bf98cbb2">find</a>(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span> (found == values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#aa1de460308fa9fc917217acf9a723b44">nodes</a>().end()) {</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> std::string name = <a class="code hl_function" href="namespaceSawyer_1_1Attribute.html#aae888f7e272916196cb47287a02de225">Attribute::name</a>(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span> (name.empty()) {</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">throw</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1DoesNotExist.html">DoesNotExist</a>(<span class="stringliteral">"attribute id "</span> + boost::lexical_cast<std::string>(<span class="keywordtype">id</span>) + <span class="stringliteral">" [not declared]"</span>);</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">throw</span> <a class="code hl_class" href="classSawyer_1_1Attribute_1_1DoesNotExist.html">DoesNotExist</a>(name);</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> }</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> }</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <a class="code hl_function" href="namespaceSawyer.html#ae9d882eb287c9dc0a842c4e6ea0c02cc">checkBoost</a>();</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">return</span> boost::any_cast<T>(values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a8950d31ac38d401ef0ff99e179a9db06">getOptional</a>(<span class="keywordtype">id</span>).<a class="code hl_function" href="classSawyer_1_1Optional.html#a26011a9b60b4dd8a535c351dc6b51e55">orDefault</a>());</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> }</div>
</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> </div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="foldopen" id="foldopen00338" data-start="{" data-end="}">
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a921b9ff8dc5cd78f751517bc22127496"> 338</a></span> T <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a921b9ff8dc5cd78f751517bc22127496">attributeOrElse</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> T &dflt)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <a class="code hl_function" href="namespaceSawyer.html#ae9d882eb287c9dc0a842c4e6ea0c02cc">checkBoost</a>();</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> boost::any_cast<T>(values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a8950d31ac38d401ef0ff99e179a9db06">getOptional</a>(<span class="keywordtype">id</span>).<a class="code hl_function" href="classSawyer_1_1Optional.html#a9b0c8cd79bb473ac70e34f4117ae87eb">orElse</a>(dflt));</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> }</div>
</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="foldopen" id="foldopen00352" data-start="{" data-end="}">
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a80072b861bfe95e1146934a3a53506ed"> 352</a></span> T <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a80072b861bfe95e1146934a3a53506ed">attributeOrDefault</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> AttrMap::ConstNodeIterator found = values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a22e8858d4e808c2922aa1181bf98cbb2">find</a>(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">if</span> (found == values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#aa1de460308fa9fc917217acf9a723b44">nodes</a>().end())</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">return</span> T();</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">return</span> boost::any_cast<T>(found->value());</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> }</div>
</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="foldopen" id="foldopen00366" data-start="{" data-end="}">
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a4277013fbe140a78e10182ca9053935c"> 366</a></span> <a class="code hl_class" href="classSawyer_1_1Optional.html">Sawyer::Optional<T></a> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a4277013fbe140a78e10182ca9053935c">optionalAttribute</a>(<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> AttrMap::ConstNodeIterator found = values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a22e8858d4e808c2922aa1181bf98cbb2">find</a>(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">if</span> (found == values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#aa1de460308fa9fc917217acf9a723b44">nodes</a>().end())</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classSawyer_1_1Nothing.html">Sawyer::Nothing</a>();</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">return</span> boost::any_cast<T>(found->value());</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> }</div>
</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> </div>
<div class="foldopen" id="foldopen00377" data-start="{" data-end="}">
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a4b9e838c10d8c99838518457b35783ac"> 377</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a4b9e838c10d8c99838518457b35783ac">nAttributes</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">return</span> values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a7976fcd86256ca6543e2ebff0b145898">size</a>();</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> }</div>
</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div>
<div class="foldopen" id="foldopen00385" data-start="{" data-end="}">
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"><a class="line" href="classSawyer_1_1Attribute_1_1Storage.html#a1739a58e26f1dd40590fd9ee78936781"> 385</a></span> std::vector<Id> <a class="code hl_function" href="classSawyer_1_1Attribute_1_1Storage.html#a1739a58e26f1dd40590fd9ee78936781">attributeIds</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keyword">typename</span> Sync::LockGuard lock(mutex_);</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> std::vector<Id> retval;</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> retval.reserve(values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#a7976fcd86256ca6543e2ebff0b145898">size</a>());</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> BOOST_FOREACH (<a class="code hl_typedef" href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Id</a> <span class="keywordtype">id</span>, values_.<a class="code hl_function" href="classSawyer_1_1Container_1_1Map.html#acab7d4e7dcf1779528526b413febf1ac">keys</a>())</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> retval.push_back(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">return</span> retval;</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> }</div>
</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span>};</div>
</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> </div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>} <span class="comment">// namespace</span></div>
</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1AlreadyExists_html"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1AlreadyExists.html">Sawyer::Attribute::AlreadyExists</a></div><div class="ttdoc">Exception thrown when redeclaring an existing attribute.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00192">Attribute.h:192</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1AlreadyExists_html_a9b6f88ee569d0ef4e1d3e8fffa1b114c"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1AlreadyExists.html#a9b6f88ee569d0ef4e1d3e8fffa1b114c">Sawyer::Attribute::AlreadyExists::AlreadyExists</a></div><div class="ttdeci">AlreadyExists(const std::string &attrName, Id id)</div><div class="ttdoc">Constructor taking an attribute name or description.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00197">Attribute.h:197</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1DoesNotExist_html"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1DoesNotExist.html">Sawyer::Attribute::DoesNotExist</a></div><div class="ttdoc">Exception for non-existing values.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00182">Attribute.h:182</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1DoesNotExist_html_ac64c06df3e7fd3667196c4fcce77bb68"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1DoesNotExist.html#ac64c06df3e7fd3667196c4fcce77bb68">Sawyer::Attribute::DoesNotExist::DoesNotExist</a></div><div class="ttdeci">DoesNotExist(const std::string &attrName)</div><div class="ttdoc">Constructor taking an attribute name or description.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00187">Attribute.h:187</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html">Sawyer::Attribute::Storage</a></div><div class="ttdoc">API and storage for attributes.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00215">Attribute.h:215</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a1739a58e26f1dd40590fd9ee78936781"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a1739a58e26f1dd40590fd9ee78936781">Sawyer::Attribute::Storage::attributeIds</a></div><div class="ttdeci">std::vector< Id > attributeIds() const</div><div class="ttdoc">Returns ID numbers for all IDs stored in this container.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00385">Attribute.h:385</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a2143837f634be78ae5143e962d272fb8"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a2143837f634be78ae5143e962d272fb8">Sawyer::Attribute::Storage::setAttributeMaybe</a></div><div class="ttdeci">bool setAttributeMaybe(Id id, const T &value)</div><div class="ttdoc">Store an attribute if not already present.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00298">Attribute.h:298</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a4277013fbe140a78e10182ca9053935c"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a4277013fbe140a78e10182ca9053935c">Sawyer::Attribute::Storage::optionalAttribute</a></div><div class="ttdeci">Sawyer::Optional< T > optionalAttribute(Id id) const</div><div class="ttdoc">Return the attribute as an optional value.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00366">Attribute.h:366</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a4b9e838c10d8c99838518457b35783ac"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a4b9e838c10d8c99838518457b35783ac">Sawyer::Attribute::Storage::nAttributes</a></div><div class="ttdeci">size_t nAttributes() const</div><div class="ttdoc">Number of attributes stored.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00377">Attribute.h:377</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a5a79e661eb48d0b9548bd0dacc63daba"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a5a79e661eb48d0b9548bd0dacc63daba">Sawyer::Attribute::Storage::eraseAttribute</a></div><div class="ttdeci">void eraseAttribute(Id id)</div><div class="ttdoc">Erase an attribute.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00264">Attribute.h:264</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a80072b861bfe95e1146934a3a53506ed"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a80072b861bfe95e1146934a3a53506ed">Sawyer::Attribute::Storage::attributeOrDefault</a></div><div class="ttdeci">T attributeOrDefault(Id id) const</div><div class="ttdoc">Return an attribute or a default-constructed value.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00352">Attribute.h:352</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a921b9ff8dc5cd78f751517bc22127496"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a921b9ff8dc5cd78f751517bc22127496">Sawyer::Attribute::Storage::attributeOrElse</a></div><div class="ttdeci">T attributeOrElse(Id id, const T &dflt) const</div><div class="ttdoc">Return an attribute or a specified value.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00338">Attribute.h:338</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a9900916e61e6c0ce53e87803221962c0"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a9900916e61e6c0ce53e87803221962c0">Sawyer::Attribute::Storage::setAttribute</a></div><div class="ttdeci">void setAttribute(Id id, const T &value)</div><div class="ttdoc">Store an attribute.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00285">Attribute.h:285</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_a9f66f01b292f92cdc70a18de1a7085ef"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#a9f66f01b292f92cdc70a18de1a7085ef">Sawyer::Attribute::Storage::Storage</a></div><div class="ttdeci">Storage(const Storage &other)</div><div class="ttdoc">Copy constructor.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00234">Attribute.h:234</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_ab9276a22e706c4e76d65d45e715051e0"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#ab9276a22e706c4e76d65d45e715051e0">Sawyer::Attribute::Storage::clearAttributes</a></div><div class="ttdeci">void clearAttributes()</div><div class="ttdoc">Erase all attributes.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00272">Attribute.h:272</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_abf3618e6d7c3a3f4bcc38ad23da3b8e9"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#abf3618e6d7c3a3f4bcc38ad23da3b8e9">Sawyer::Attribute::Storage::attributeExists</a></div><div class="ttdeci">bool attributeExists(Id id) const</div><div class="ttdoc">Check attribute existence.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00253">Attribute.h:253</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_ae0dda357eaeee6b1974c3feae00c40dd"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#ae0dda357eaeee6b1974c3feae00c40dd">Sawyer::Attribute::Storage::operator=</a></div><div class="ttdeci">Storage & operator=(const Storage &other)</div><div class="ttdoc">Assignment operator.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00242">Attribute.h:242</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_ae15492e36a2af8002023cab5afeaf671"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#ae15492e36a2af8002023cab5afeaf671">Sawyer::Attribute::Storage::Storage</a></div><div class="ttdeci">Storage()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00228">Attribute.h:228</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Attribute_1_1Storage_html_ae39391002b59fc46db71a536cbe3e075"><div class="ttname"><a href="classSawyer_1_1Attribute_1_1Storage.html#ae39391002b59fc46db71a536cbe3e075">Sawyer::Attribute::Storage::getAttribute</a></div><div class="ttdeci">T getAttribute(Id id) const</div><div class="ttdoc">Get an attribute that is known to exist.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00315">Attribute.h:315</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html">Sawyer::Container::Map</a></div><div class="ttdoc">Container associating values with keys.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00072">Sawyer/Map.h:72</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_a22e8858d4e808c2922aa1181bf98cbb2"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#a22e8858d4e808c2922aa1181bf98cbb2">Sawyer::Container::Map::find</a></div><div class="ttdeci">NodeIterator find(const Key &key)</div><div class="ttdoc">Find a node by key.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00480">Sawyer/Map.h:480</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_a4e0130d82c5890b18ba8f70497c53c72"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#a4e0130d82c5890b18ba8f70497c53c72">Sawyer::Container::Map::exists</a></div><div class="ttdeci">bool exists(const Key &key) const</div><div class="ttdoc">Determine if a key exists.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00493">Sawyer/Map.h:493</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_a7976fcd86256ca6543e2ebff0b145898"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#a7976fcd86256ca6543e2ebff0b145898">Sawyer::Container::Map::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdoc">Number of nodes, keys, or values in this container.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00438">Sawyer/Map.h:438</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_a8950d31ac38d401ef0ff99e179a9db06"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#a8950d31ac38d401ef0ff99e179a9db06">Sawyer::Container::Map::getOptional</a></div><div class="ttdeci">Optional< Value > getOptional(const Key &key) const</div><div class="ttdoc">Lookup and return a value or nothing.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00602">Sawyer/Map.h:602</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_a8c1af11399c1d51d35c2f06934a1afd1"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#a8c1af11399c1d51d35c2f06934a1afd1">Sawyer::Container::Map::erase</a></div><div class="ttdeci">Map & erase(const Key &key)</div><div class="ttdoc">Remove a node with specified key.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00744">Sawyer/Map.h:744</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_aa1de460308fa9fc917217acf9a723b44"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#aa1de460308fa9fc917217acf9a723b44">Sawyer::Container::Map::nodes</a></div><div class="ttdeci">boost::iterator_range< NodeIterator > nodes()</div><div class="ttdoc">Iterators for container nodes.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00387">Sawyer/Map.h:387</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_acab7d4e7dcf1779528526b413febf1ac"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#acab7d4e7dcf1779528526b413febf1ac">Sawyer::Container::Map::keys</a></div><div class="ttdeci">boost::iterator_range< ConstKeyIterator > keys()</div><div class="ttdoc">Iterators for container keys.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00400">Sawyer/Map.h:400</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_acadeb695d9d4e831e3b21f890d0ac39c"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#acadeb695d9d4e831e3b21f890d0ac39c">Sawyer::Container::Map::insert</a></div><div class="ttdeci">Map & insert(const Key &key, const Value &value)</div><div class="ttdoc">Insert or update a key/value pair.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00646">Sawyer/Map.h:646</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Container_1_1Map_html_acf2693e499cfc44874e7e2ca79e1db23"><div class="ttname"><a href="classSawyer_1_1Container_1_1Map.html#acf2693e499cfc44874e7e2ca79e1db23">Sawyer::Container::Map::clear</a></div><div class="ttdeci">Map & clear()</div><div class="ttdoc">Remove all nodes.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Map_8h_source.html#l00732">Sawyer/Map.h:732</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Exception_1_1AlreadyExists_html"><div class="ttname"><a href="classSawyer_1_1Exception_1_1AlreadyExists.html">Sawyer::Exception::AlreadyExists</a></div><div class="ttdoc">Error for existing values.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Exception_8h_source.html#l00051">Sawyer/Exception.h:51</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Exception_1_1NotFound_html"><div class="ttname"><a href="classSawyer_1_1Exception_1_1NotFound.html">Sawyer::Exception::NotFound</a></div><div class="ttdoc">Error for non-existing values.</div><div class="ttdef"><b>Definition</b> <a href="Sawyer_2Exception_8h_source.html#l00039">Sawyer/Exception.h:39</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Nothing_html"><div class="ttname"><a href="classSawyer_1_1Nothing.html">Sawyer::Nothing</a></div><div class="ttdoc">Represents no value.</div><div class="ttdef"><b>Definition</b> <a href="Optional_8h_source.html#l00036">Optional.h:36</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Optional_html"><div class="ttname"><a href="classSawyer_1_1Optional.html">Sawyer::Optional</a></div><div class="ttdoc">Holds a value or nothing.</div><div class="ttdef"><b>Definition</b> <a href="Optional_8h_source.html#l00056">Optional.h:56</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Optional_html_a26011a9b60b4dd8a535c351dc6b51e55"><div class="ttname"><a href="classSawyer_1_1Optional.html#a26011a9b60b4dd8a535c351dc6b51e55">Sawyer::Optional::orDefault</a></div><div class="ttdeci">Value orDefault() const</div><div class="ttdoc">Obtain a value or a default.</div><div class="ttdef"><b>Definition</b> <a href="Optional_8h_source.html#l00305">Optional.h:305</a></div></div>
<div class="ttc" id="aclassSawyer_1_1Optional_html_a9b0c8cd79bb473ac70e34f4117ae87eb"><div class="ttname"><a href="classSawyer_1_1Optional.html#a9b0c8cd79bb473ac70e34f4117ae87eb">Sawyer::Optional::orElse</a></div><div class="ttdeci">const Value & orElse(const Value &dflt) const</div><div class="ttdoc">Obtain value or something else.</div><div class="ttdef"><b>Definition</b> <a href="Optional_8h_source.html#l00267">Optional.h:267</a></div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_a996e628a61155318818e26714b87c8a0"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#a996e628a61155318818e26714b87c8a0">Sawyer::Attribute::INVALID_ID</a></div><div class="ttdeci">const Id INVALID_ID</div><div class="ttdoc">Invalid attribute ID.</div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_a9baa2cf18cfb7f6c63f16e343b47dbba"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#a9baa2cf18cfb7f6c63f16e343b47dbba">Sawyer::Attribute::WrongQueryType</a></div><div class="ttdeci">boost::bad_any_cast WrongQueryType</div><div class="ttdoc">Exception thrown when wrong data type is queried.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00203">Attribute.h:203</a></div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_a9d151aab4b6b553e7f567e528f08b06d"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#a9d151aab4b6b553e7f567e528f08b06d">Sawyer::Attribute::declareMaybe</a></div><div class="ttdeci">Id declareMaybe(const std::string &name)</div><div class="ttdoc">Register a new attribute key if not already registered.</div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_aae888f7e272916196cb47287a02de225"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#aae888f7e272916196cb47287a02de225">Sawyer::Attribute::name</a></div><div class="ttdeci">const std::string & name(Id)</div><div class="ttdoc">Returns the name for an attribute ID.</div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_ac2390b0d8b09f1b75e5d452e2dc90e68"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#ac2390b0d8b09f1b75e5d452e2dc90e68">Sawyer::Attribute::Id</a></div><div class="ttdeci">size_t Id</div><div class="ttdoc">Attribute identification.</div><div class="ttdef"><b>Definition</b> <a href="Attribute_8h_source.html#l00140">Attribute.h:140</a></div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_ae6f1b14d5e7a643013abc21d656b2e02"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#ae6f1b14d5e7a643013abc21d656b2e02">Sawyer::Attribute::id</a></div><div class="ttdeci">Id id(const std::string &name)</div><div class="ttdoc">Returns the ID for an attribute name.</div></div>
<div class="ttc" id="anamespaceSawyer_1_1Attribute_html_aeece48cf6f8b5028066b0f8d2374e2e5"><div class="ttname"><a href="namespaceSawyer_1_1Attribute.html#aeece48cf6f8b5028066b0f8d2374e2e5">Sawyer::Attribute::declare</a></div><div class="ttdeci">Id declare(const std::string &name)</div><div class="ttdoc">Register a new attribute key.</div></div>
<div class="ttc" id="anamespaceSawyer_html"><div class="ttname"><a href="namespaceSawyer.html">Sawyer</a></div><div class="ttdoc">Sawyer support library.</div><div class="ttdef"><b>Definition</b> <a href="FeasiblePath_8h_source.html#l00767">FeasiblePath.h:767</a></div></div>
<div class="ttc" id="anamespaceSawyer_html_ae9d882eb287c9dc0a842c4e6ea0c02cc"><div class="ttname"><a href="namespaceSawyer.html#ae9d882eb287c9dc0a842c4e6ea0c02cc">Sawyer::checkBoost</a></div><div class="ttdeci">void checkBoost()</div><div class="ttdoc">Check for valid boost version or abort.</div></div>
<div class="ttc" id="astructSawyer_1_1SynchronizationTraits_html"><div class="ttname"><a href="structSawyer_1_1SynchronizationTraits.html">Sawyer::SynchronizationTraits</a></div><div class="ttdoc">Traits for thread synchronization.</div><div class="ttdef"><b>Definition</b> <a href="Synchronization_8h_source.html#l00117">Synchronization.h:117</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Oct 2 2024 00:08:26 for ROSE by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>