1 | <HTML>
|
---|
2 | <!-- The API of this class and the documentation -- but not the
|
---|
3 | implementation! -- are based on that for SGI's hash_set class:
|
---|
4 | -->
|
---|
5 | <!--
|
---|
6 | -- Copyright (c) 1996-1999
|
---|
7 | -- Silicon Graphics Computer Systems, Inc.
|
---|
8 | --
|
---|
9 | -- Permission to use, copy, modify, distribute and sell this software
|
---|
10 | -- and its documentation for any purpose is hereby granted without fee,
|
---|
11 | -- provided that the above copyright notice appears in all copies and
|
---|
12 | -- that both that copyright notice and this permission notice appear
|
---|
13 | -- in supporting documentation. Silicon Graphics makes no
|
---|
14 | -- representations about the suitability of this software for any
|
---|
15 | -- purpose. It is provided "as is" without express or implied warranty.
|
---|
16 | --
|
---|
17 | -- Copyright (c) 1994
|
---|
18 | -- Hewlett-Packard Company
|
---|
19 | --
|
---|
20 | -- Permission to use, copy, modify, distribute and sell this software
|
---|
21 | -- and its documentation for any purpose is hereby granted without fee,
|
---|
22 | -- provided that the above copyright notice appears in all copies and
|
---|
23 | -- that both that copyright notice and this permission notice appear
|
---|
24 | -- in supporting documentation. Hewlett-Packard Company makes no
|
---|
25 | -- representations about the suitability of this software for any
|
---|
26 | -- purpose. It is provided "as is" without express or implied warranty.
|
---|
27 | --
|
---|
28 | -->
|
---|
29 |
|
---|
30 | <HEAD>
|
---|
31 | <Title>sparsetable<T, GROUP_SIZE></Title>
|
---|
32 | </HEAD>
|
---|
33 |
|
---|
34 | <BODY>
|
---|
35 |
|
---|
36 | <p><i>[Note: this document is formatted similarly to the SGI STL
|
---|
37 | implementation documentation pages, and refers to concepts and classes
|
---|
38 | defined there. However, neither this document nor the code it
|
---|
39 | describes is associated with SGI, nor is it necessary to have SGI's
|
---|
40 | STL implementation installed in order to use this class.]</i></p>
|
---|
41 |
|
---|
42 | <H1>sparsetable<T, GROUP_SIZE></H1>
|
---|
43 |
|
---|
44 | <p>A <tt>sparsetable</tt> is a <A
|
---|
45 | href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random
|
---|
46 | Access Container</A> that supports constant time random access to
|
---|
47 | elements, and constant time insertion and removal of elements. It
|
---|
48 | implements the "array" or "table" abstract data type. The number of
|
---|
49 | elements in a <tt>sparsetable</tt> is set at constructor time, though
|
---|
50 | you can change it at any time by calling <tt>resize()</tt>.</p>
|
---|
51 |
|
---|
52 | <p><tt>sparsetable</tt> is distinguished from other array
|
---|
53 | implementations, including the default C implementation, in its stingy
|
---|
54 | use of memory -- in particular, unused array elements require only 1 bit
|
---|
55 | of disk space to store, rather than <tt>sizeof(T)</tt> bytes -- and by
|
---|
56 | the ability to save and restore contents to disk. On the other hand,
|
---|
57 | this array implementation, while still efficient, is slower than other
|
---|
58 | array implementations.</p>
|
---|
59 |
|
---|
60 | <A NAME="assigned">
|
---|
61 | <p>A <tt>sparsetable</tt> distinguishes between table elements that
|
---|
62 | have been <i>assigned</i> and those that are <i>unassigned</i>.
|
---|
63 | Assigned table elements are those that have had a value set via
|
---|
64 | <tt>set()</tt>, <tt>operator()</tt>, assignment via an iterator, and
|
---|
65 | so forth. Unassigned table elements are those that have not had a
|
---|
66 | value set in one of these ways, or that have been explicitly
|
---|
67 | unassigned via a call to <tt>erase()</tt> or <tt>clear()</tt>. Lookup
|
---|
68 | is valid on both assigned and unassigned table elements; for
|
---|
69 | unassigned elements, lookup returns the default value
|
---|
70 | <tt>T()</tt>.</p>
|
---|
71 | </A>
|
---|
72 |
|
---|
73 | <p>This class is appropriate for applications that need to store large
|
---|
74 | arrays in memory, and for applications that need these arrays to be
|
---|
75 | persistent.</p>
|
---|
76 |
|
---|
77 |
|
---|
78 | <h3>Example</h3>
|
---|
79 |
|
---|
80 | <pre>
|
---|
81 | #include <google/sparsetable>
|
---|
82 |
|
---|
83 | sparsetable<int> t(100);
|
---|
84 | t[5] = 6;
|
---|
85 | cout << "t[5] = " << t[5];
|
---|
86 | cout << "Default value = " << t[99];
|
---|
87 | </pre>
|
---|
88 |
|
---|
89 |
|
---|
90 | <h3>Definition</h3>
|
---|
91 |
|
---|
92 | Defined in the header <A
|
---|
93 | href="sparsetable.h">sparsetable.h</A>. This class is not
|
---|
94 | part of the C++ standard.
|
---|
95 |
|
---|
96 |
|
---|
97 | <h3>Template parameters</h3>
|
---|
98 |
|
---|
99 | <table border>
|
---|
100 | <TR><TH>Parameter</TH><TH>Description</TH><TH>Default</TH></TR>
|
---|
101 |
|
---|
102 | <TR>
|
---|
103 | <TD VAlign=top>
|
---|
104 | <tt>T</tt>
|
---|
105 | </TD>
|
---|
106 | <TD VAlign=top>
|
---|
107 | The sparsetable's value type: the type of object that is stored in
|
---|
108 | the table.
|
---|
109 | </TD>
|
---|
110 | <TD VAlign=top>
|
---|
111 |
|
---|
112 | </TD>
|
---|
113 | </TR>
|
---|
114 |
|
---|
115 | <TR>
|
---|
116 | <TD VAlign=top>
|
---|
117 | <tt>GROUP_SIZE</tt>
|
---|
118 | </TD>
|
---|
119 | <TD VAlign=top>
|
---|
120 | The number of elements in each sparsetable group (see <A
|
---|
121 | HREF="implementation.html">the implementation doc</A> for more details
|
---|
122 | on this value). This almost never need be specified; the default
|
---|
123 | template parameter value works well in all situations.
|
---|
124 | </TD>
|
---|
125 | <TD VAlign=top>
|
---|
126 |
|
---|
127 | </TD>
|
---|
128 | </TR>
|
---|
129 |
|
---|
130 | </table>
|
---|
131 |
|
---|
132 |
|
---|
133 | <h3>Model of</h3>
|
---|
134 |
|
---|
135 | <A href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random Access Container</A>
|
---|
136 |
|
---|
137 |
|
---|
138 | <h3>Type requirements</h3>
|
---|
139 |
|
---|
140 | None, except for those imposed by the requirements of
|
---|
141 | <A
|
---|
142 | href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random
|
---|
143 | Access Container</A>
|
---|
144 |
|
---|
145 |
|
---|
146 | <h3>Public base classes</h3>
|
---|
147 |
|
---|
148 | None.
|
---|
149 |
|
---|
150 |
|
---|
151 | <h3>Members</h3>
|
---|
152 |
|
---|
153 | <table border>
|
---|
154 | <TR><TH>Member</TH><TH>Where defined</TH><TH>Description</TH></TR>
|
---|
155 |
|
---|
156 | <TR>
|
---|
157 | <TD VAlign=top>
|
---|
158 | <tt>value_type</tt> <A href="#1">[1]</A>
|
---|
159 | </TD>
|
---|
160 | <TD VAlign=top>
|
---|
161 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
162 | </TD>
|
---|
163 | <TD VAlign=top>
|
---|
164 | The type of object, <tt>T</tt>, stored in the table.
|
---|
165 | </TD>
|
---|
166 | </TR>
|
---|
167 |
|
---|
168 | <TR>
|
---|
169 | <TD VAlign=top>
|
---|
170 | <tt>pointer</tt>
|
---|
171 | </TD>
|
---|
172 | <TD VAlign=top>
|
---|
173 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
174 | </TD>
|
---|
175 | <TD VAlign=top>
|
---|
176 | Pointer to <tt>T</tt>.
|
---|
177 | </TD>
|
---|
178 | </TR>
|
---|
179 |
|
---|
180 | <TR>
|
---|
181 | <TD VAlign=top>
|
---|
182 | <tt>reference</tt>
|
---|
183 | </TD>
|
---|
184 | <TD VAlign=top>
|
---|
185 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
186 | </TD>
|
---|
187 | <TD VAlign=top>
|
---|
188 | Reference to <tt>T</tt>.
|
---|
189 | </TD>
|
---|
190 | </TR>
|
---|
191 |
|
---|
192 | <TR>
|
---|
193 | <TD VAlign=top>
|
---|
194 | <tt>const_reference</tt>
|
---|
195 | </TD>
|
---|
196 | <TD VAlign=top>
|
---|
197 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
198 | </TD>
|
---|
199 | <TD VAlign=top>
|
---|
200 | Const reference to <tt>T</tt>.
|
---|
201 | </TD>
|
---|
202 | </TR>
|
---|
203 |
|
---|
204 | <TR>
|
---|
205 | <TD VAlign=top>
|
---|
206 | <tt>size_type</tt>
|
---|
207 | </TD>
|
---|
208 | <TD VAlign=top>
|
---|
209 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
210 | </TD>
|
---|
211 | <TD VAlign=top>
|
---|
212 | An unsigned integral type.
|
---|
213 | </TD>
|
---|
214 | </TR>
|
---|
215 |
|
---|
216 | <TR>
|
---|
217 | <TD VAlign=top>
|
---|
218 | <tt>difference_type</tt>
|
---|
219 | </TD>
|
---|
220 | <TD VAlign=top>
|
---|
221 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
222 | </TD>
|
---|
223 | <TD VAlign=top>
|
---|
224 | A signed integral type.
|
---|
225 | </TD>
|
---|
226 | </TR>
|
---|
227 |
|
---|
228 | <TR>
|
---|
229 | <TD VAlign=top>
|
---|
230 | <tt>iterator</tt>
|
---|
231 | </TD>
|
---|
232 | <TD VAlign=top>
|
---|
233 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
234 | </TD>
|
---|
235 | <TD VAlign=top>
|
---|
236 | Iterator used to iterate through a <tt>sparsetable</tt>.
|
---|
237 | </TD>
|
---|
238 | </TR>
|
---|
239 |
|
---|
240 | <TR>
|
---|
241 | <TD VAlign=top>
|
---|
242 | <tt>const_iterator</tt>
|
---|
243 | </TD>
|
---|
244 | <TD VAlign=top>
|
---|
245 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
246 | </TD>
|
---|
247 | <TD VAlign=top>
|
---|
248 | Const iterator used to iterate through a <tt>sparsetable</tt>.
|
---|
249 | </TD>
|
---|
250 | </TR>
|
---|
251 |
|
---|
252 | <TR>
|
---|
253 | <TD VAlign=top>
|
---|
254 | <tt>reverse_iterator</tt>
|
---|
255 | </TD>
|
---|
256 | <TD VAlign=top>
|
---|
257 | <A
|
---|
258 | href="http://www.sgi.com/tech/stl/ReversibleContainer.html">Reversible
|
---|
259 | Container</A>
|
---|
260 | </TD>
|
---|
261 | <TD VAlign=top>
|
---|
262 | Iterator used to iterate backwards through a <tt>sparsetable</tt>.
|
---|
263 | </TD>
|
---|
264 | </TR>
|
---|
265 |
|
---|
266 | <TR>
|
---|
267 | <TD VAlign=top>
|
---|
268 | <tt>const_reverse_iterator</tt>
|
---|
269 | </TD>
|
---|
270 | <TD VAlign=top>
|
---|
271 | <A
|
---|
272 | href="http://www.sgi.com/tech/stl/ReversibleContainer.html">Reversible
|
---|
273 | Container</A>
|
---|
274 | </TD>
|
---|
275 | <TD VAlign=top>
|
---|
276 | Const iterator used to iterate backwards through a
|
---|
277 | <tt>sparsetable</tt>.
|
---|
278 | </TD>
|
---|
279 | </TR>
|
---|
280 |
|
---|
281 | <TR>
|
---|
282 | <TD VAlign=top>
|
---|
283 | <tt>nonempty_iterator</tt>
|
---|
284 | </TD>
|
---|
285 | <TD VAlign=top>
|
---|
286 | <tt>sparsetable</tt>
|
---|
287 | </TD>
|
---|
288 | <TD VAlign=top>
|
---|
289 | Iterator used to iterate through the
|
---|
290 | <A HREF="#assigned">assigned</A> elements of the
|
---|
291 | <tt>sparsetable</tt>.
|
---|
292 | </TD>
|
---|
293 | </TR>
|
---|
294 |
|
---|
295 | <TR>
|
---|
296 | <TD VAlign=top>
|
---|
297 | <tt>const_nonempty_iterator</tt>
|
---|
298 | </TD>
|
---|
299 | <TD VAlign=top>
|
---|
300 | <tt>sparsetable</tt>
|
---|
301 | </TD>
|
---|
302 | <TD VAlign=top>
|
---|
303 | Const iterator used to iterate through the
|
---|
304 | <A HREF="#assigned">assigned</A> elements of the
|
---|
305 | <tt>sparsetable</tt>.
|
---|
306 | </TD>
|
---|
307 | </TR>
|
---|
308 |
|
---|
309 | <TR>
|
---|
310 | <TD VAlign=top>
|
---|
311 | <tt>reverse_nonempty_iterator</tt>
|
---|
312 | </TD>
|
---|
313 | <TD VAlign=top>
|
---|
314 | <tt>sparsetable</tt>
|
---|
315 | </TD>
|
---|
316 | <TD VAlign=top>
|
---|
317 | Iterator used to iterate backwards through the
|
---|
318 | <A HREF="#assigned">assigned</A> elements of the
|
---|
319 | <tt>sparsetable</tt>.
|
---|
320 | </TD>
|
---|
321 | </TR>
|
---|
322 |
|
---|
323 | <TR>
|
---|
324 | <TD VAlign=top>
|
---|
325 | <tt>const_reverse_nonempty_iterator</tt>
|
---|
326 | </TD>
|
---|
327 | <TD VAlign=top>
|
---|
328 | <tt>sparsetable</tt>
|
---|
329 | </TD>
|
---|
330 | <TD VAlign=top>
|
---|
331 | Const iterator used to iterate backwards through the
|
---|
332 | <A HREF="#assigned">assigned</A> elements of the
|
---|
333 | <tt>sparsetable</tt>.
|
---|
334 | </TD>
|
---|
335 | </TR>
|
---|
336 |
|
---|
337 | <TR>
|
---|
338 | <TD VAlign=top>
|
---|
339 | <tt>destructive_iterator</tt>
|
---|
340 | </TD>
|
---|
341 | <TD VAlign=top>
|
---|
342 | <tt>sparsetable</tt>
|
---|
343 | </TD>
|
---|
344 | <TD VAlign=top>
|
---|
345 | Iterator used to iterate through the
|
---|
346 | <A HREF="#assigned">assigned</A> elements of the
|
---|
347 | <tt>sparsetable</tt>, erasing elements as it iterates.
|
---|
348 | <A href="#2">[2]</A>
|
---|
349 | </TD>
|
---|
350 | </TR>
|
---|
351 |
|
---|
352 | <TR>
|
---|
353 | <TD VAlign=top>
|
---|
354 | <tt>iterator begin()</tt>
|
---|
355 | </TD>
|
---|
356 | <TD VAlign=top>
|
---|
357 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
358 | </TD>
|
---|
359 | <TD VAlign=top>
|
---|
360 | Returns an <tt>iterator</tt> pointing to the beginning of the
|
---|
361 | <tt>sparsetable</tt>.
|
---|
362 | </TD>
|
---|
363 | </TR>
|
---|
364 |
|
---|
365 | <TR>
|
---|
366 | <TD VAlign=top>
|
---|
367 | <tt>iterator end()</tt>
|
---|
368 | </TD>
|
---|
369 | <TD VAlign=top>
|
---|
370 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
371 | </TD>
|
---|
372 | <TD VAlign=top>
|
---|
373 | Returns an <tt>iterator</tt> pointing to the end of the
|
---|
374 | <tt>sparsetable</tt>.
|
---|
375 | </TD>
|
---|
376 | </TR>
|
---|
377 |
|
---|
378 | <TR>
|
---|
379 | <TD VAlign=top>
|
---|
380 | <tt>const_iterator begin() const</tt>
|
---|
381 | </TD>
|
---|
382 | <TD VAlign=top>
|
---|
383 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
384 | </TD>
|
---|
385 | <TD VAlign=top>
|
---|
386 | Returns an <tt>const_iterator</tt> pointing to the beginning of the
|
---|
387 | <tt>sparsetable</tt>.
|
---|
388 | </TD>
|
---|
389 | </TR>
|
---|
390 |
|
---|
391 | <TR>
|
---|
392 | <TD VAlign=top>
|
---|
393 | <tt>const_iterator end() const</tt>
|
---|
394 | </TD>
|
---|
395 | <TD VAlign=top>
|
---|
396 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
397 | </TD>
|
---|
398 | <TD VAlign=top>
|
---|
399 | Returns an <tt>const_iterator</tt> pointing to the end of the
|
---|
400 | <tt>sparsetable</tt>.
|
---|
401 | </TD>
|
---|
402 | </TR>
|
---|
403 |
|
---|
404 | <TR>
|
---|
405 | <TD VAlign=top>
|
---|
406 | <tt>reverse_iterator rbegin()</tt>
|
---|
407 | </TD>
|
---|
408 | <TD VAlign=top>
|
---|
409 | <A
|
---|
410 | href="http://www.sgi.com/tech/stl/ReversibleContainer.html">Reversible
|
---|
411 | Container</A>
|
---|
412 | </TD>
|
---|
413 | <TD VAlign=top>
|
---|
414 | Returns a <tt>reverse_iterator</tt> pointing to the beginning of the
|
---|
415 | reversed <tt>sparsetable</tt>.
|
---|
416 | </TD>
|
---|
417 | </TR>
|
---|
418 |
|
---|
419 | <TR>
|
---|
420 | <TD VAlign=top>
|
---|
421 | <tt>reverse_iterator rend()</tt>
|
---|
422 | </TD>
|
---|
423 | <TD VAlign=top>
|
---|
424 | <A
|
---|
425 | href="http://www.sgi.com/tech/stl/ReversibleContainer.html">Reversible
|
---|
426 | Container</A>
|
---|
427 | </TD>
|
---|
428 | <TD VAlign=top>
|
---|
429 | Returns a <tt>reverse_iterator</tt> pointing to the end of the
|
---|
430 | reversed <tt>sparsetable</tt>.
|
---|
431 | </TD>
|
---|
432 | </TR>
|
---|
433 |
|
---|
434 | <TR>
|
---|
435 | <TD VAlign=top>
|
---|
436 | <tt>const_reverse_iterator rbegin() const</tt>
|
---|
437 | </TD>
|
---|
438 | <TD VAlign=top>
|
---|
439 | <A
|
---|
440 | href="http://www.sgi.com/tech/stl/ReversibleContainer.html">Reversible
|
---|
441 | Container</A>
|
---|
442 | </TD>
|
---|
443 | <TD VAlign=top>
|
---|
444 | Returns a <tt>const_reverse_iterator</tt> pointing to the beginning
|
---|
445 | of the reversed <tt>sparsetable</tt>.
|
---|
446 | </TD>
|
---|
447 | </TR>
|
---|
448 |
|
---|
449 | <TR>
|
---|
450 | <TD VAlign=top>
|
---|
451 | <tt>const_reverse_iterator rend() const</tt>
|
---|
452 | </TD>
|
---|
453 | <TD VAlign=top>
|
---|
454 | <A
|
---|
455 | href="http://www.sgi.com/tech/stl/ReversibleContainer.html">Reversible
|
---|
456 | Container</A>
|
---|
457 | </TD>
|
---|
458 | <TD VAlign=top>
|
---|
459 | Returns a <tt>const_reverse_iterator</tt> pointing to the end of
|
---|
460 | the reversed <tt>sparsetable</tt>.
|
---|
461 | </TD>
|
---|
462 | </TR>
|
---|
463 |
|
---|
464 | <TR>
|
---|
465 | <TD VAlign=top>
|
---|
466 | <tt>nonempty_iterator nonempty_begin()</tt>
|
---|
467 | </TD>
|
---|
468 | <TD VAlign=top>
|
---|
469 | <tt>sparsetable</tt>
|
---|
470 | </TD>
|
---|
471 | <TD VAlign=top>
|
---|
472 | Returns a <tt>nonempty_iterator</tt> pointing to the first
|
---|
473 | <A HREF="#assigned">assigned</A> element of the
|
---|
474 | <tt>sparsetable</tt>.
|
---|
475 | </TD>
|
---|
476 | </TR>
|
---|
477 |
|
---|
478 | <TR>
|
---|
479 | <TD VAlign=top>
|
---|
480 | <tt>nonempty_iterator nonempty_end()</tt>
|
---|
481 | </TD>
|
---|
482 | <TD VAlign=top>
|
---|
483 | <tt>sparsetable</tt>
|
---|
484 | </TD>
|
---|
485 | <TD VAlign=top>
|
---|
486 | Returns a <tt>nonempty_iterator</tt> pointing to the end of the
|
---|
487 | <tt>sparsetable</tt>.
|
---|
488 | </TD>
|
---|
489 | </TR>
|
---|
490 |
|
---|
491 | <TR>
|
---|
492 | <TD VAlign=top>
|
---|
493 | <tt>const_nonempty_iterator nonempty_begin() const</tt>
|
---|
494 | </TD>
|
---|
495 | <TD VAlign=top>
|
---|
496 | <tt>sparsetable</tt>
|
---|
497 | </TD>
|
---|
498 | <TD VAlign=top>
|
---|
499 | Returns a <tt>const_nonempty_iterator</tt> pointing to the first
|
---|
500 | <A HREF="#assigned">assigned</A> element of the
|
---|
501 | <tt>sparsetable</tt>.
|
---|
502 | </TD>
|
---|
503 | </TR>
|
---|
504 |
|
---|
505 | <TR>
|
---|
506 | <TD VAlign=top>
|
---|
507 | <tt>const_nonempty_iterator nonempty_end() const</tt>
|
---|
508 | </TD>
|
---|
509 | <TD VAlign=top>
|
---|
510 | <tt>sparsetable</tt>
|
---|
511 | </TD>
|
---|
512 | <TD VAlign=top>
|
---|
513 | Returns a <tt>const_nonempty_iterator</tt> pointing to the end of
|
---|
514 | the <tt>sparsetable</tt>.
|
---|
515 | </TD>
|
---|
516 | </TR>
|
---|
517 |
|
---|
518 | <TR>
|
---|
519 | <TD VAlign=top>
|
---|
520 | <tt>reverse_nonempty_iterator nonempty_rbegin()</tt>
|
---|
521 | </TD>
|
---|
522 | <TD VAlign=top>
|
---|
523 | <tt>sparsetable</tt>
|
---|
524 | </TD>
|
---|
525 | <TD VAlign=top>
|
---|
526 | Returns a <tt>reverse_nonempty_iterator</tt> pointing to the first
|
---|
527 | <A HREF="#assigned">assigned</A> element of the reversed
|
---|
528 | <tt>sparsetable</tt>.
|
---|
529 | </TD>
|
---|
530 | </TR>
|
---|
531 |
|
---|
532 | <TR>
|
---|
533 | <TD VAlign=top>
|
---|
534 | <tt>reverse_nonempty_iterator nonempty_rend()</tt>
|
---|
535 | </TD>
|
---|
536 | <TD VAlign=top>
|
---|
537 | <tt>sparsetable</tt>
|
---|
538 | </TD>
|
---|
539 | <TD VAlign=top>
|
---|
540 | Returns a <tt>reverse_nonempty_iterator</tt> pointing to the end of
|
---|
541 | the reversed <tt>sparsetable</tt>.
|
---|
542 | </TD>
|
---|
543 | </TR>
|
---|
544 |
|
---|
545 | <TR>
|
---|
546 | <TD VAlign=top>
|
---|
547 | <tt>const_reverse_nonempty_iterator nonempty_rbegin() const</tt>
|
---|
548 | </TD>
|
---|
549 | <TD VAlign=top>
|
---|
550 | <tt>sparsetable</tt>
|
---|
551 | </TD>
|
---|
552 | <TD VAlign=top>
|
---|
553 | Returns a <tt>const_reverse_nonempty_iterator</tt> pointing to the
|
---|
554 | first <A HREF="#assigned">assigned</A> element of the reversed
|
---|
555 | <tt>sparsetable</tt>.
|
---|
556 | </TD>
|
---|
557 | </TR>
|
---|
558 |
|
---|
559 | <TR>
|
---|
560 | <TD VAlign=top>
|
---|
561 | <tt>const_reverse_nonempty_iterator nonempty_rend() const</tt>
|
---|
562 | </TD>
|
---|
563 | <TD VAlign=top>
|
---|
564 | <tt>sparsetable</tt>
|
---|
565 | </TD>
|
---|
566 | <TD VAlign=top>
|
---|
567 | Returns a <tt>const_reverse_nonempty_iterator</tt> pointing to the
|
---|
568 | end of the reversed <tt>sparsetable</tt>.
|
---|
569 | </TD>
|
---|
570 | </TR>
|
---|
571 |
|
---|
572 | <TR>
|
---|
573 | <TD VAlign=top>
|
---|
574 | <tt>destructive_iterator destructive_begin()</tt>
|
---|
575 | </TD>
|
---|
576 | <TD VAlign=top>
|
---|
577 | <tt>sparsetable</tt>
|
---|
578 | </TD>
|
---|
579 | <TD VAlign=top>
|
---|
580 | Returns a <tt>destructive_iterator</tt> pointing to the first
|
---|
581 | <A HREF="#assigned">assigned</A> element of the
|
---|
582 | <tt>sparsetable</tt>.
|
---|
583 | </TD>
|
---|
584 | </TR>
|
---|
585 |
|
---|
586 | <TR>
|
---|
587 | <TD VAlign=top>
|
---|
588 | <tt>destructive_iterator destructive_end()</tt>
|
---|
589 | </TD>
|
---|
590 | <TD VAlign=top>
|
---|
591 | <tt>sparsetable</tt>
|
---|
592 | </TD>
|
---|
593 | <TD VAlign=top>
|
---|
594 | Returns a <tt>destructive_iterator</tt> pointing to the end of
|
---|
595 | the <tt>sparsetable</tt>.
|
---|
596 | </TD>
|
---|
597 | </TR>
|
---|
598 |
|
---|
599 | <TR>
|
---|
600 | <TD VAlign=top>
|
---|
601 | <tt>size_type size() const</tt>
|
---|
602 | </TD>
|
---|
603 | <TD VAlign=top>
|
---|
604 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
605 | </TD>
|
---|
606 | <TD VAlign=top>
|
---|
607 | Returns the size of the <tt>sparsetable</tt>.
|
---|
608 | </TD>
|
---|
609 | </TR>
|
---|
610 |
|
---|
611 | <TR>
|
---|
612 | <TD VAlign=top>
|
---|
613 | <tt>size_type max_size() const</tt>
|
---|
614 | </TD>
|
---|
615 | <TD VAlign=top>
|
---|
616 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
617 | </TD>
|
---|
618 | <TD VAlign=top>
|
---|
619 | Returns the largest possible size of the <tt>sparsetable</tt>.
|
---|
620 | </TD>
|
---|
621 | </TR>
|
---|
622 |
|
---|
623 | <TR>
|
---|
624 | <TD VAlign=top>
|
---|
625 | <tt>bool empty() const</tt>
|
---|
626 | </TD>
|
---|
627 | <TD VAlign=top>
|
---|
628 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
629 | </TD>
|
---|
630 | <TD VAlign=top>
|
---|
631 | <tt>true</tt> if the <tt>sparsetable</tt>'s size is <tt>0</tt>.
|
---|
632 | </TD>
|
---|
633 | </TR>
|
---|
634 |
|
---|
635 | <TR>
|
---|
636 | <TD VAlign=top>
|
---|
637 | <tt>size_type num_nonempty() const</tt>
|
---|
638 | </TD>
|
---|
639 | <TD VAlign=top>
|
---|
640 | <tt>sparsetable</tt>
|
---|
641 | </TD>
|
---|
642 | <TD VAlign=top>
|
---|
643 | Returns the number of sparsetable elements that are currently <A
|
---|
644 | HREF="#assigned">assigned</A>.
|
---|
645 | </TD>
|
---|
646 | </TR>
|
---|
647 |
|
---|
648 | <TR>
|
---|
649 | <TD VAlign=top>
|
---|
650 | <tt>sparsetable(size_type n)</tt>
|
---|
651 | </TD>
|
---|
652 | <TD VAlign=top>
|
---|
653 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
654 | </TD>
|
---|
655 | <TD VAlign=top>
|
---|
656 | Creates a <tt>sparsetable</tt> with <tt>n</tt> elements.
|
---|
657 | </TD>
|
---|
658 | </TR>
|
---|
659 |
|
---|
660 | <TR>
|
---|
661 | <TD VAlign=top>
|
---|
662 | <tt>sparsetable(const sparsetable&)</tt>
|
---|
663 | </TD>
|
---|
664 | <TD VAlign=top>
|
---|
665 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
666 | </TD>
|
---|
667 | <TD VAlign=top>
|
---|
668 | The copy constructor.
|
---|
669 | </TD>
|
---|
670 | </TR>
|
---|
671 |
|
---|
672 | <TR>
|
---|
673 | <TD VAlign=top>
|
---|
674 | <tt>~sparsetable()</tt>
|
---|
675 | </TD>
|
---|
676 | <TD VAlign=top>
|
---|
677 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
678 | </TD>
|
---|
679 | <TD VAlign=top>
|
---|
680 | The destructor.
|
---|
681 | </TD>
|
---|
682 | </TR>
|
---|
683 |
|
---|
684 | <TR>
|
---|
685 | <TD VAlign=top>
|
---|
686 | <tt>sparsetable& operator=(const sparsetable&)</tt>
|
---|
687 | </TD>
|
---|
688 | <TD VAlign=top>
|
---|
689 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
690 | </TD>
|
---|
691 | <TD VAlign=top>
|
---|
692 | The assignment operator
|
---|
693 | </TD>
|
---|
694 | </TR>
|
---|
695 |
|
---|
696 | <TR>
|
---|
697 | <TD VAlign=top>
|
---|
698 | <tt>void swap(sparsetable&)</tt>
|
---|
699 | </TD>
|
---|
700 | <TD VAlign=top>
|
---|
701 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>
|
---|
702 | </TD>
|
---|
703 | <TD VAlign=top>
|
---|
704 | Swaps the contents of two sparsetables.
|
---|
705 | </TD>
|
---|
706 | </TR>
|
---|
707 |
|
---|
708 | <TR>
|
---|
709 | <TD VAlign=top>
|
---|
710 | <tt>reference operator[](size_type n)</tt>
|
---|
711 | </TD>
|
---|
712 | <TD VAlign=top>
|
---|
713 | <A
|
---|
714 | href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random
|
---|
715 | Access Container</A>
|
---|
716 | </TD>
|
---|
717 | <TD VAlign=top>
|
---|
718 | Returns the <tt>n</tt>'th element. <A href="#3">[2]</A>
|
---|
719 | </TD>
|
---|
720 | </TR>
|
---|
721 |
|
---|
722 | <TR>
|
---|
723 | <TD VAlign=top>
|
---|
724 | <tt>const_reference operator[](size_type n) const</tt>
|
---|
725 | </TD>
|
---|
726 | <TD VAlign=top>
|
---|
727 | <A
|
---|
728 | href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random
|
---|
729 | Access Container</A>
|
---|
730 | </TD>
|
---|
731 | <TD VAlign=top>
|
---|
732 | Returns the <tt>n</tt>'th element.
|
---|
733 | </TD>
|
---|
734 | </TR>
|
---|
735 |
|
---|
736 | <TR>
|
---|
737 | <TD VAlign=top>
|
---|
738 | <tt>bool test(size_type i) const</tt>
|
---|
739 | </TD>
|
---|
740 | <TD VAlign=top>
|
---|
741 | <tt>sparsetable</tt>
|
---|
742 | </TD>
|
---|
743 | <TD VAlign=top>
|
---|
744 | true if the <tt>i</tt>'th element of the <tt>sparsetable</tt> is <A
|
---|
745 | HREF="#assigned">assigned</A>.
|
---|
746 | </TD>
|
---|
747 | </TR>
|
---|
748 |
|
---|
749 | <TR>
|
---|
750 | <TD VAlign=top>
|
---|
751 | <tt>bool test(iterator pos) const</tt>
|
---|
752 | </TD>
|
---|
753 | <TD VAlign=top>
|
---|
754 | <tt>sparsetable</tt>
|
---|
755 | </TD>
|
---|
756 | <TD VAlign=top>
|
---|
757 | true if the <tt>sparsetable</tt> element pointed to by <tt>pos</tt>
|
---|
758 | is <A HREF="#assigned">assigned</A>.
|
---|
759 | </TD>
|
---|
760 | </TR>
|
---|
761 |
|
---|
762 | <TR>
|
---|
763 | <TD VAlign=top>
|
---|
764 | <tt>bool test(const_iterator pos) const</tt>
|
---|
765 | </TD>
|
---|
766 | <TD VAlign=top>
|
---|
767 | <tt>sparsetable</tt>
|
---|
768 | </TD>
|
---|
769 | <TD VAlign=top>
|
---|
770 | true if the <tt>sparsetable</tt> element pointed to by <tt>pos</tt>
|
---|
771 | is <A HREF="#assigned">assigned</A>.
|
---|
772 | </TD>
|
---|
773 | </TR>
|
---|
774 |
|
---|
775 | <TR>
|
---|
776 | <TD VAlign=top>
|
---|
777 | <tt>const_reference get(size_type i) const</tt>
|
---|
778 | </TD>
|
---|
779 | <TD VAlign=top>
|
---|
780 | <tt>sparsetable</tt>
|
---|
781 | </TD>
|
---|
782 | <TD VAlign=top>
|
---|
783 | returns the <tt>i</tt>'th element of the <tt>sparsetable</tt>.
|
---|
784 | </TD>
|
---|
785 | </TR>
|
---|
786 |
|
---|
787 | <TR>
|
---|
788 | <TD VAlign=top>
|
---|
789 | <tt>reference set(size_type i, const_reference val)</tt>
|
---|
790 | </TD>
|
---|
791 | <TD VAlign=top>
|
---|
792 | <tt>sparsetable</tt>
|
---|
793 | </TD>
|
---|
794 | <TD VAlign=top>
|
---|
795 | Sets the <tt>i</tt>'th element of the <tt>sparsetable</tt> to value
|
---|
796 | <tt>val</tt>.
|
---|
797 | </TD>
|
---|
798 | </TR>
|
---|
799 |
|
---|
800 | <TR>
|
---|
801 | <TD VAlign=top>
|
---|
802 | <tt>void erase(size_type i)</tt>
|
---|
803 | </TD>
|
---|
804 | <TD VAlign=top>
|
---|
805 | <tt>sparsetable</tt>
|
---|
806 | </TD>
|
---|
807 | <TD VAlign=top>
|
---|
808 | Erases the <tt>i</tt>'th element of the <tt>sparsetable</tt>.
|
---|
809 | </TD>
|
---|
810 | </TR>
|
---|
811 |
|
---|
812 | <TR>
|
---|
813 | <TD VAlign=top>
|
---|
814 | <tt>void erase(iterator pos)</tt>
|
---|
815 | </TD>
|
---|
816 | <TD VAlign=top>
|
---|
817 | <tt>sparsetable</tt>
|
---|
818 | </TD>
|
---|
819 | <TD VAlign=top>
|
---|
820 | Erases the element of the <tt>sparsetable</tt> pointed to by
|
---|
821 | <tt>pos</tt>.
|
---|
822 | </TD>
|
---|
823 | </TR>
|
---|
824 |
|
---|
825 | <TR>
|
---|
826 | <TD VAlign=top>
|
---|
827 | <tt>void erase(iterator first, iterator last)</tt>
|
---|
828 | </TD>
|
---|
829 | <TD VAlign=top>
|
---|
830 | <tt>sparsetable</tt>
|
---|
831 | </TD>
|
---|
832 | <TD VAlign=top>
|
---|
833 | Erases the elements of the <tt>sparsetable</tt> in the range
|
---|
834 | <tt>[first, last)</tt>.
|
---|
835 | </TD>
|
---|
836 | </TR>
|
---|
837 |
|
---|
838 | <TR>
|
---|
839 | <TD VAlign=top>
|
---|
840 | <tt>void clear()</tt>
|
---|
841 | </TD>
|
---|
842 | <TD VAlign=top>
|
---|
843 | <tt>sparsetable</tt>
|
---|
844 | </TD>
|
---|
845 | <TD VAlign=top>
|
---|
846 | Erases all of the elements.
|
---|
847 | </TD>
|
---|
848 | </TR>
|
---|
849 |
|
---|
850 | <TR>
|
---|
851 | <TD VAlign=top>
|
---|
852 | <tt>void resize(size_type n)</tt>
|
---|
853 | </TD>
|
---|
854 | <TD VAlign=top>
|
---|
855 | <tt>sparsetable</tt>
|
---|
856 | </TD>
|
---|
857 | <TD VAlign=top>
|
---|
858 | Changes the size of sparsetable to <tt>n</tt>.
|
---|
859 | <A HREF="#1">[1]</A>
|
---|
860 | </TD>
|
---|
861 | </TR>
|
---|
862 |
|
---|
863 | <TR>
|
---|
864 | <TD VAlign=top>
|
---|
865 | <tt>bool write_metadata(FILE *fp)</tt>
|
---|
866 | </TD>
|
---|
867 | <TD VAlign=top>
|
---|
868 | <tt>sparsetable</tt>
|
---|
869 | </TD>
|
---|
870 | <TD VAlign=top>
|
---|
871 | See below.
|
---|
872 | </TD>
|
---|
873 | </TR>
|
---|
874 |
|
---|
875 | <TR>
|
---|
876 | <TD VAlign=top>
|
---|
877 | <tt>bool read_metadata(FILE *fp)</tt>
|
---|
878 | </TD>
|
---|
879 | <TD VAlign=top>
|
---|
880 | <tt>sparsetable</tt>
|
---|
881 | </TD>
|
---|
882 | <TD VAlign=top>
|
---|
883 | See below.
|
---|
884 | </TD>
|
---|
885 | </TR>
|
---|
886 |
|
---|
887 | <TR>
|
---|
888 | <TD VAlign=top>
|
---|
889 | <tt>bool write_nopointer_data(FILE *fp)</tt>
|
---|
890 | </TD>
|
---|
891 | <TD VAlign=top>
|
---|
892 | <tt>sparsetable</tt>
|
---|
893 | </TD>
|
---|
894 | <TD VAlign=top>
|
---|
895 | See below.
|
---|
896 | </TD>
|
---|
897 | </TR>
|
---|
898 |
|
---|
899 | <TR>
|
---|
900 | <TD VAlign=top>
|
---|
901 | <tt>bool read_nopointer_data(FILE *fp)</tt>
|
---|
902 | </TD>
|
---|
903 | <TD VAlign=top>
|
---|
904 | <tt>sparsetable</tt>
|
---|
905 | </TD>
|
---|
906 | <TD VAlign=top>
|
---|
907 | See below.
|
---|
908 | </TD>
|
---|
909 | </TR>
|
---|
910 |
|
---|
911 | <TR>
|
---|
912 | <TD VAlign=top>
|
---|
913 | <pre>bool operator==(const sparsetable&, const sparsetable&)
|
---|
914 | </pre>
|
---|
915 | </TD>
|
---|
916 | <TD VAlign=top>
|
---|
917 | <A
|
---|
918 | href="http://www.sgi.com/tech/stl/ForwardContainer.html">Forward
|
---|
919 | Container</A>
|
---|
920 | </TD>
|
---|
921 | <TD VAlign=top>
|
---|
922 | Tests two sparsetables for equality. This is a global function,
|
---|
923 | not a member function.
|
---|
924 | </TD>
|
---|
925 | </TR>
|
---|
926 |
|
---|
927 | <TR>
|
---|
928 | <TD VAlign=top>
|
---|
929 | <pre>bool operator<(const sparsetable&, const sparsetable&)
|
---|
930 | </pre>
|
---|
931 | </TD>
|
---|
932 | <TD VAlign=top>
|
---|
933 | <A
|
---|
934 | href="http://www.sgi.com/tech/stl/ForwardContainer.html">Forward
|
---|
935 | Container</A>
|
---|
936 | </TD>
|
---|
937 | <TD VAlign=top>
|
---|
938 | Lexicographical comparison. This is a global function,
|
---|
939 | not a member function.
|
---|
940 | </TD>
|
---|
941 | </TR>
|
---|
942 |
|
---|
943 | </table>
|
---|
944 |
|
---|
945 |
|
---|
946 | <h3>New members</h3>
|
---|
947 |
|
---|
948 | These members are not defined in the <A
|
---|
949 | href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random
|
---|
950 | Access Container</A> requirement, but are specific to
|
---|
951 | <tt>sparsetable</tt>.
|
---|
952 |
|
---|
953 | <table border>
|
---|
954 | <TR><TH>Member</TH><TH>Description</TH></TR>
|
---|
955 |
|
---|
956 | <TR>
|
---|
957 | <TD VAlign=top>
|
---|
958 | <tt>nonempty_iterator</tt>
|
---|
959 | </TD>
|
---|
960 | <TD VAlign=top>
|
---|
961 | Iterator used to iterate through the
|
---|
962 | <A HREF="#assigned">assigned</A> elements of the
|
---|
963 | <tt>sparsetable</tt>.
|
---|
964 | </TD>
|
---|
965 | </TR>
|
---|
966 |
|
---|
967 | <TR>
|
---|
968 | <TD VAlign=top>
|
---|
969 | <tt>const_nonempty_iterator</tt>
|
---|
970 | </TD>
|
---|
971 | <TD VAlign=top>
|
---|
972 | Const iterator used to iterate through the
|
---|
973 | <A HREF="#assigned">assigned</A> elements of the
|
---|
974 | <tt>sparsetable</tt>.
|
---|
975 | </TD>
|
---|
976 | </TR>
|
---|
977 |
|
---|
978 | <TR>
|
---|
979 | <TD VAlign=top>
|
---|
980 | <tt>reverse_nonempty_iterator</tt>
|
---|
981 | </TD>
|
---|
982 | <TD VAlign=top>
|
---|
983 | Iterator used to iterate backwards through the
|
---|
984 | <A HREF="#assigned">assigned</A> elements of the
|
---|
985 | <tt>sparsetable</tt>.
|
---|
986 | </TD>
|
---|
987 | </TR>
|
---|
988 |
|
---|
989 | <TR>
|
---|
990 | <TD VAlign=top>
|
---|
991 | <tt>const_reverse_nonempty_iterator</tt>
|
---|
992 | </TD>
|
---|
993 | <TD VAlign=top>
|
---|
994 | Const iterator used to iterate backwards through the
|
---|
995 | <A HREF="#assigned">assigned</A> elements of the
|
---|
996 | <tt>sparsetable</tt>.
|
---|
997 | </TD>
|
---|
998 | </TR>
|
---|
999 |
|
---|
1000 | <TR>
|
---|
1001 | <TD VAlign=top>
|
---|
1002 | <tt>destructive_iterator</tt>
|
---|
1003 | </TD>
|
---|
1004 | <TD VAlign=top>
|
---|
1005 | Iterator used to iterate through the
|
---|
1006 | <A HREF="#assigned">assigned</A> elements of the
|
---|
1007 | <tt>sparsetable</tt>, erasing elements as it iterates.
|
---|
1008 | <A href="#2">[2]</A>
|
---|
1009 | </TD>
|
---|
1010 | </TR>
|
---|
1011 |
|
---|
1012 | <TR>
|
---|
1013 | <TD VAlign=top>
|
---|
1014 | <tt>nonempty_iterator nonempty_begin()</tt>
|
---|
1015 | </TD>
|
---|
1016 | <TD VAlign=top>
|
---|
1017 | Returns a <tt>nonempty_iterator</tt> pointing to the first
|
---|
1018 | <A HREF="#assigned">assigned</A> element of the
|
---|
1019 | <tt>sparsetable</tt>.
|
---|
1020 | </TD>
|
---|
1021 | </TR>
|
---|
1022 |
|
---|
1023 | <TR>
|
---|
1024 | <TD VAlign=top>
|
---|
1025 | <tt>nonempty_iterator nonempty_end()</tt>
|
---|
1026 | </TD>
|
---|
1027 | <TD VAlign=top>
|
---|
1028 | Returns a <tt>nonempty_iterator</tt> pointing to the end of the
|
---|
1029 | <tt>sparsetable</tt>.
|
---|
1030 | </TD>
|
---|
1031 | </TR>
|
---|
1032 |
|
---|
1033 | <TR>
|
---|
1034 | <TD VAlign=top>
|
---|
1035 | <tt>const_nonempty_iterator nonempty_begin() const</tt>
|
---|
1036 | </TD>
|
---|
1037 | <TD VAlign=top>
|
---|
1038 | Returns a <tt>const_nonempty_iterator</tt> pointing to the first
|
---|
1039 | <A HREF="#assigned">assigned</A> element of the
|
---|
1040 | <tt>sparsetable</tt>.
|
---|
1041 | </TD>
|
---|
1042 | </TR>
|
---|
1043 |
|
---|
1044 | <TR>
|
---|
1045 | <TD VAlign=top>
|
---|
1046 | <tt>const_nonempty_iterator nonempty_end() const</tt>
|
---|
1047 | </TD>
|
---|
1048 | <TD VAlign=top>
|
---|
1049 | Returns a <tt>const_nonempty_iterator</tt> pointing to the end of
|
---|
1050 | the <tt>sparsetable</tt>.
|
---|
1051 | </TD>
|
---|
1052 | </TR>
|
---|
1053 |
|
---|
1054 | <TR>
|
---|
1055 | <TD VAlign=top>
|
---|
1056 | <tt>reverse_nonempty_iterator nonempty_rbegin()</tt>
|
---|
1057 | </TD>
|
---|
1058 | <TD VAlign=top>
|
---|
1059 | Returns a <tt>reverse_nonempty_iterator</tt> pointing to the first
|
---|
1060 | <A HREF="#assigned">assigned</A> element of the reversed
|
---|
1061 | <tt>sparsetable</tt>.
|
---|
1062 | </TD>
|
---|
1063 | </TR>
|
---|
1064 |
|
---|
1065 | <TR>
|
---|
1066 | <TD VAlign=top>
|
---|
1067 | <tt>reverse_nonempty_iterator nonempty_rend()</tt>
|
---|
1068 | </TD>
|
---|
1069 | <TD VAlign=top>
|
---|
1070 | Returns a <tt>reverse_nonempty_iterator</tt> pointing to the end of
|
---|
1071 | the reversed <tt>sparsetable</tt>.
|
---|
1072 | </TD>
|
---|
1073 | </TR>
|
---|
1074 |
|
---|
1075 | <TR>
|
---|
1076 | <TD VAlign=top>
|
---|
1077 | <tt>const_reverse_nonempty_iterator nonempty_rbegin() const</tt>
|
---|
1078 | </TD>
|
---|
1079 | <TD VAlign=top>
|
---|
1080 | Returns a <tt>const_reverse_nonempty_iterator</tt> pointing to the
|
---|
1081 | first <A HREF="#assigned">assigned</A> element of the reversed
|
---|
1082 | <tt>sparsetable</tt>.
|
---|
1083 | </TD>
|
---|
1084 | </TR>
|
---|
1085 |
|
---|
1086 | <TR>
|
---|
1087 | <TD VAlign=top>
|
---|
1088 | <tt>const_reverse_nonempty_iterator nonempty_rend() const</tt>
|
---|
1089 | </TD>
|
---|
1090 | <TD VAlign=top>
|
---|
1091 | Returns a <tt>const_reverse_nonempty_iterator</tt> pointing to the
|
---|
1092 | end of the reversed <tt>sparsetable</tt>.
|
---|
1093 | </TD>
|
---|
1094 | </TR>
|
---|
1095 |
|
---|
1096 | <TR>
|
---|
1097 | <TD VAlign=top>
|
---|
1098 | <tt>destructive_iterator destructive_begin()</tt>
|
---|
1099 | </TD>
|
---|
1100 | <TD VAlign=top>
|
---|
1101 | Returns a <tt>destructive_iterator</tt> pointing to the first
|
---|
1102 | <A HREF="#assigned">assigned</A> element of the
|
---|
1103 | <tt>sparsetable</tt>.
|
---|
1104 | </TD>
|
---|
1105 | </TR>
|
---|
1106 |
|
---|
1107 | <TR>
|
---|
1108 | <TD VAlign=top>
|
---|
1109 | <tt>destructive_iterator destructive_end()</tt>
|
---|
1110 | </TD>
|
---|
1111 | <TD VAlign=top>
|
---|
1112 | Returns a <tt>destructive_iterator</tt> pointing to the end of
|
---|
1113 | the <tt>sparsetable</tt>.
|
---|
1114 | </TD>
|
---|
1115 | </TR>
|
---|
1116 |
|
---|
1117 | <TR>
|
---|
1118 | <TD VAlign=top>
|
---|
1119 | <tt>size_type num_nonempty() const</tt>
|
---|
1120 | </TD>
|
---|
1121 | <TD VAlign=top>
|
---|
1122 | Returns the number of sparsetable elements that are currently <A
|
---|
1123 | HREF="#assigned">assigned</A>.
|
---|
1124 | </TD>
|
---|
1125 | </TR>
|
---|
1126 |
|
---|
1127 | <TR>
|
---|
1128 | <TD VAlign=top>
|
---|
1129 | <tt>bool test(size_type i) const</tt>
|
---|
1130 | </TD>
|
---|
1131 | <TD VAlign=top>
|
---|
1132 | true if the <tt>i</tt>'th element of the <tt>sparsetable</tt> is <A
|
---|
1133 | HREF="#assigned">assigned</A>.
|
---|
1134 | </TD>
|
---|
1135 | </TR>
|
---|
1136 |
|
---|
1137 | <TR>
|
---|
1138 | <TD VAlign=top>
|
---|
1139 | <tt>bool test(iterator pos) const</tt>
|
---|
1140 | </TD>
|
---|
1141 | <TD VAlign=top>
|
---|
1142 | true if the <tt>sparsetable</tt> element pointed to by <tt>pos</tt>
|
---|
1143 | is <A HREF="#assigned">assigned</A>.
|
---|
1144 | </TD>
|
---|
1145 | </TR>
|
---|
1146 |
|
---|
1147 | <TR>
|
---|
1148 | <TD VAlign=top>
|
---|
1149 | <tt>bool test(const_iterator pos) const</tt>
|
---|
1150 | </TD>
|
---|
1151 | <TD VAlign=top>
|
---|
1152 | true if the <tt>sparsetable</tt> element pointed to by <tt>pos</tt>
|
---|
1153 | is <A HREF="#assigned">assigned</A>.
|
---|
1154 | </TD>
|
---|
1155 | </TR>
|
---|
1156 |
|
---|
1157 | <TR>
|
---|
1158 | <TD VAlign=top>
|
---|
1159 | <tt>const_reference get(size_type i) const</tt>
|
---|
1160 | </TD>
|
---|
1161 | <TD VAlign=top>
|
---|
1162 | returns the <tt>i</tt>'th element of the <tt>sparsetable</tt>. If
|
---|
1163 | the <tt>i</tt>'th element is <A HREF="#assigned">assigned</A>, the
|
---|
1164 | assigned value is returned, otherwise, the default value
|
---|
1165 | <tt>T()</tt> is returned.
|
---|
1166 | </TD>
|
---|
1167 | </TR>
|
---|
1168 |
|
---|
1169 | <TR>
|
---|
1170 | <TD VAlign=top>
|
---|
1171 | <tt>reference set(size_type i, const_reference val)</tt>
|
---|
1172 | </TD>
|
---|
1173 | <TD VAlign=top>
|
---|
1174 | Sets the <tt>i</tt>'th element of the <tt>sparsetable</tt> to value
|
---|
1175 | <tt>val</tt>, and returns a reference to the <tt>i</tt>'th element
|
---|
1176 | of the table. This operation causes the <tt>i</tt>'th element to
|
---|
1177 | be <A HREF="#assigned">assigned</A>.
|
---|
1178 | </TD>
|
---|
1179 | </TR>
|
---|
1180 |
|
---|
1181 | <TR>
|
---|
1182 | <TD VAlign=top>
|
---|
1183 | <tt>void erase(size_type i)</tt>
|
---|
1184 | </TD>
|
---|
1185 | <TD VAlign=top>
|
---|
1186 | Erases the <tt>i</tt>'th element of the <tt>sparsetable</tt>. This
|
---|
1187 | operation causes the <tt>i</tt>'th element to be <A
|
---|
1188 | HREF="#assigned">unassigned</A>.
|
---|
1189 | </TD>
|
---|
1190 | </TR>
|
---|
1191 |
|
---|
1192 | <TR>
|
---|
1193 | <TD VAlign=top>
|
---|
1194 | <tt>void erase(iterator pos)</tt>
|
---|
1195 | </TD>
|
---|
1196 | <TD VAlign=top>
|
---|
1197 | Erases the element of the <tt>sparsetable</tt> pointed to by
|
---|
1198 | <tt>pos</tt>. This operation causes the <tt>i</tt>'th element to
|
---|
1199 | be <A HREF="#assigned">unassigned</A>.
|
---|
1200 | </TD>
|
---|
1201 | </TR>
|
---|
1202 |
|
---|
1203 | <TR>
|
---|
1204 | <TD VAlign=top>
|
---|
1205 | <tt>void erase(iterator first, iterator last)</tt>
|
---|
1206 | </TD>
|
---|
1207 | <TD VAlign=top>
|
---|
1208 | Erases the elements of the <tt>sparsetable</tt> in the range
|
---|
1209 | <tt>[first, last)</tt>. This operation causes these elements to
|
---|
1210 | be <A HREF="#assigned">unassigned</A>.
|
---|
1211 | </TD>
|
---|
1212 | </TR>
|
---|
1213 |
|
---|
1214 | <TR>
|
---|
1215 | <TD VAlign=top>
|
---|
1216 | <tt>void clear()</tt>
|
---|
1217 | </TD>
|
---|
1218 | <TD VAlign=top>
|
---|
1219 | Erases all of the elements. This causes all elements to be
|
---|
1220 | <A HREF="#assigned">unassigned</A>.
|
---|
1221 | </TD>
|
---|
1222 | </TR>
|
---|
1223 |
|
---|
1224 | <TR>
|
---|
1225 | <TD VAlign=top>
|
---|
1226 | <tt>void resize(size_type n)</tt>
|
---|
1227 | </TD>
|
---|
1228 | <TD VAlign=top>
|
---|
1229 | Changes the size of sparsetable to <tt>n</tt>. If <tt>n</tt> is
|
---|
1230 | greater than the old size, new, <A HREF="#assigned">unassigned</A>
|
---|
1231 | elements are appended. If <tt>n</tt> is less than the old size,
|
---|
1232 | all elements in position ><tt>n</tt> are deleted.
|
---|
1233 | <A HREF="#1">[1]</A>
|
---|
1234 | </TD>
|
---|
1235 | </TR>
|
---|
1236 |
|
---|
1237 | <TR>
|
---|
1238 | <TD VAlign=top>
|
---|
1239 | <tt>bool write_metadata(FILE *fp)</tt>
|
---|
1240 | </TD>
|
---|
1241 | <TD VAlign=top>
|
---|
1242 | Write hashtable metadata to <tt>fp</tt>. See <A HREF="#io">below</A>.
|
---|
1243 | </TD>
|
---|
1244 | </TR>
|
---|
1245 |
|
---|
1246 | <TR>
|
---|
1247 | <TD VAlign=top>
|
---|
1248 | <tt>bool read_metadata(FILE *fp)</tt>
|
---|
1249 | </TD>
|
---|
1250 | <TD VAlign=top>
|
---|
1251 | Read hashtable metadata from <tt>fp</tt>. See <A HREF="#io">below</A>.
|
---|
1252 | </TD>
|
---|
1253 | </TR>
|
---|
1254 |
|
---|
1255 | <TR>
|
---|
1256 | <TD VAlign=top>
|
---|
1257 | <tt>bool write_nopointer_data(FILE *fp)</tt>
|
---|
1258 | </TD>
|
---|
1259 | <TD VAlign=top>
|
---|
1260 | Write hashtable contents to <tt>fp</tt>. This is valid only if the
|
---|
1261 | hashtable key and value are "plain" data. See <A HREF="#io">below</A>.
|
---|
1262 | </TD>
|
---|
1263 | </TR>
|
---|
1264 |
|
---|
1265 | <TR>
|
---|
1266 | <TD VAlign=top>
|
---|
1267 | <tt>bool read_nopointer_data(FILE *fp)</tt>
|
---|
1268 | </TD>
|
---|
1269 | <TD VAlign=top>
|
---|
1270 | Read hashtable contents to <tt>fp</tt>. This is valid only if the
|
---|
1271 | hashtable key and value are "plain" data. See <A HREF="#io">below</A>.
|
---|
1272 | </TD>
|
---|
1273 | </TR>
|
---|
1274 |
|
---|
1275 | </table>
|
---|
1276 |
|
---|
1277 |
|
---|
1278 | <h3>Notes</h3>
|
---|
1279 |
|
---|
1280 | <P><A name="1">[1]</A>
|
---|
1281 |
|
---|
1282 | <tt>value_type</tt> must be <A
|
---|
1283 | HREF="http://c2.com/cgi/wiki?PlainOldData">plain old data</A> (see <A
|
---|
1284 | HREF="implementation.html">implementation.html</A> for why this is necessary).
|
---|
1285 | In addition, there should be no data structures that point directly
|
---|
1286 | into parts of value, including the value itself (for instance, you
|
---|
1287 | cannot have a value like <tt>struct {int a = 1, *b = &a}</tt>. This
|
---|
1288 | is because <tt>sparsetable</tt> uses <tt>malloc()</tt> and
|
---|
1289 | <tt>free</tt> to allocate space for the key and value, and
|
---|
1290 | <tt>memmove()</tt> to reorganize the key and value in memory.</p>
|
---|
1291 |
|
---|
1292 | <p>Almost all common uses fit this criterion: <tt>value_type</tt> can
|
---|
1293 | be a basic C type or an STL type like <tt>string</tt>, for instance.
|
---|
1294 |
|
---|
1295 | <P><A name="2">[2]</A>
|
---|
1296 |
|
---|
1297 | <tt>sparsetable::destructive_iterator</tt> iterates through a
|
---|
1298 | sparsetable like a normal iterator, but <tt>++it</tt> may delete the
|
---|
1299 | element being iterated past. Obviously, this iterator can only be
|
---|
1300 | used once on a given table! One application of this iterator is to
|
---|
1301 | copy data from a sparsetable to some other data structure without
|
---|
1302 | using extra memory to store the data in both places during the
|
---|
1303 | copy.</p>
|
---|
1304 |
|
---|
1305 | <P><A name="3">[3]</A>
|
---|
1306 |
|
---|
1307 | Since <tt>operator[]</tt> might insert a new element into the
|
---|
1308 | <tt>sparsetable</tt>, it can't possibly be a <tt>const</tt> member
|
---|
1309 | function. In theory, since it might insert a new element, it should
|
---|
1310 | cause the element it refers to to become <A
|
---|
1311 | HREF="#assigned">assigned</A>. However, this is undesirable when
|
---|
1312 | <tt>operator[]</tt> is used to examine elements, rather than assign
|
---|
1313 | them. Thus, as an implementation trick, <tt>operator[]</tt> does not
|
---|
1314 | really return a <tt>reference</tt>. Instead it returns an object that
|
---|
1315 | behaves almost exactly like a <tt>reference</tt>. This object,
|
---|
1316 | however, delays setting the appropriate sparsetable element to <A
|
---|
1317 | HREF="#assigned">assigned</A> to when it is actually assigned to.</p>
|
---|
1318 |
|
---|
1319 | <p>For a bit more detail: the object returned by <tt>operator[]</tt>
|
---|
1320 | is an opaque type which defines <tt>operator=</tt>, <tt>operator
|
---|
1321 | reference()</tt>, and <tt>operator&</tt>. The first operator controls
|
---|
1322 | assigning to the value. The second controls examining the value. The
|
---|
1323 | third controls pointing to the value.</p>
|
---|
1324 |
|
---|
1325 | <p>All three operators perform exactly as an object of type
|
---|
1326 | <tt>reference</tt> would perform. The only problems that arise is
|
---|
1327 | when this object is accessed in situations where C++ cannot do the
|
---|
1328 | conversion by default. By far the most common situation is with
|
---|
1329 | variadic functions such as <tt>printf</tt>. In such situations, you
|
---|
1330 | may need to manually cast the object to the right type:</p>
|
---|
1331 | <pre>
|
---|
1332 | printf("%d", static_cast<typename table::reference>(table[i]));
|
---|
1333 | </pre>
|
---|
1334 |
|
---|
1335 |
|
---|
1336 | <h3><A NAME=io>Input/Output</A></h3>
|
---|
1337 |
|
---|
1338 | <p>It is possible to save and restore <tt>sparsetable</tt> objects
|
---|
1339 | to disk. Storage takes place in two steps. The first writes the
|
---|
1340 | table metadata. The second writes the actual data.</p>
|
---|
1341 |
|
---|
1342 | <p>To write a sparsetable to disk, first call <tt>write_metadata()</tt>
|
---|
1343 | on an open file pointer. This saves the sparsetable information in a
|
---|
1344 | byte-order-independent format. However, currently information written
|
---|
1345 | by a 32-bit system cannot be read by a 64-bit system, and vice
|
---|
1346 | versa.</p>
|
---|
1347 |
|
---|
1348 | <p>After the metadata has been written to disk, you must write the
|
---|
1349 | actual data stored in the sparsetable to disk. If the value is
|
---|
1350 | "simple" enough, you can do this by calling
|
---|
1351 | <tt>write_nopointer_data()</tt>. "Simple" data is data that can be
|
---|
1352 | safely copied to disk via <tt>fwrite()</tt>. Native C data types fall
|
---|
1353 | into this category, as do structs of native C data types. Pointers
|
---|
1354 | and STL objects do not.</p>
|
---|
1355 |
|
---|
1356 | <p>Note that <tt>write_nopointer_data()</tt> does not do any endian
|
---|
1357 | conversion. Thus, it is only appropriate when you intend to read the
|
---|
1358 | data on the same endian architecture as you write the data.</p>
|
---|
1359 |
|
---|
1360 | <p>If you cannot use <tt>write_nopointer_data()</tt> for any reason,
|
---|
1361 | you can write the data yourself by iterating over the
|
---|
1362 | <tt>sparsetable</tt> with a <tt>const_nonempty_iterator</tt> and
|
---|
1363 | writing the key and data in any manner you wish.</p>
|
---|
1364 |
|
---|
1365 | <p>To read the hashtable information from disk, first you must create
|
---|
1366 | a <tt>sparsetable</tt> object. Then open a file pointer to point
|
---|
1367 | to the saved sparsetable, and call <tt>read_metadata()</tt>. If you
|
---|
1368 | saved the data via <tt>write_nopointer_data()</tt>, you can follow the
|
---|
1369 | <tt>read_metadata()</tt> call with a call to
|
---|
1370 | <tt>read_nopointer_data()</tt>. This is all that is needed.</p>
|
---|
1371 |
|
---|
1372 | <p>If you saved the data through a custom write routine, you must call
|
---|
1373 | a custom read routine to read in the data. To do this, iterate over
|
---|
1374 | the <tt>sparsetable</tt> with a <tt>nonempty_iterator</tt>; this
|
---|
1375 | operation is sensical because the metadata has already been set up.
|
---|
1376 | For each iterator item, you can read the key and value from disk, and
|
---|
1377 | set it appropriately. The code might look like this:</p>
|
---|
1378 | <pre>
|
---|
1379 | for (sparsetable<int*>::nonempty_iterator it = t.nonempty_begin();
|
---|
1380 | it != t.nonempty_end(); ++it) {
|
---|
1381 | *it = new int;
|
---|
1382 | fread(*it, sizeof(int), 1, fp);
|
---|
1383 | }
|
---|
1384 | </pre>
|
---|
1385 |
|
---|
1386 |
|
---|
1387 | <h3>See also</h3>
|
---|
1388 |
|
---|
1389 | <p>The following are SGI STL concepts and classes related to
|
---|
1390 | <tt>sparsetable</tt>.</p>
|
---|
1391 |
|
---|
1392 | <A href="http://www.sgi.com/tech/stl/Container.html">Container</A>,
|
---|
1393 | <A href="http://www.sgi.com/tech/stl/RandomAccessContainer.html">Random Access Container</A>,
|
---|
1394 | <tt><A href="sparse_hash_set.html">sparse_hash_set</A></tt>,
|
---|
1395 | <tt><A href="sparse_hash_map.html">sparse_hash_map</A></tt>
|
---|
1396 |
|
---|
1397 | </BODY>
|
---|
1398 | </HTML>
|
---|