FRIBParallelanalysis  1.0
FrameworkforMPIParalleldataanalysisatFRIB
TCLHashTableIterator.h
1 /*
2  GNU GENERAL PUBLIC LICENSE
3  Version 2, June 1991
4 
5  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
6  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7  Everyone is permitted to copy and distribute verbatim copies
8  of this license document, but changing it is not allowed.
9 
10  Preamble
11 
12  The licenses for most software are designed to take away your
13 freedom to share and change it. By contrast, the GNU General Public
14 License is intended to guarantee your freedom to share and change free
15 software--to make sure the software is free for all its users. This
16 General Public License applies to most of the Free Software
17 Foundation's software and to any other program whose authors commit to
18 using it. (Some other Free Software Foundation software is covered by
19 the GNU Library General Public License instead.) You can apply it to
20 your programs, too.
21 
22  When we speak of free software, we are referring to freedom, not
23 price. Our General Public Licenses are designed to make sure that you
24 have the freedom to distribute copies of free software (and charge for
25 this service if you wish), that you receive source code or can get it
26 if you want it, that you can change the software or use pieces of it
27 in new free programs; and that you know you can do these things.
28 
29  To protect your rights, we need to make restrictions that forbid
30 anyone to deny you these rights or to ask you to surrender the rights.
31 These restrictions translate to certain responsibilities for you if you
32 distribute copies of the software, or if you modify it.
33 
34  For example, if you distribute copies of such a program, whether
35 gratis or for a fee, you must give the recipients all the rights that
36 you have. You must make sure that they, too, receive or can get the
37 source code. And you must show them these terms so they know their
38 rights.
39 
40  We protect your rights with two steps: (1) copyright the software, and
41 (2) offer you this license which gives you legal permission to copy,
42 distribute and/or modify the software.
43 
44  Also, for each author's protection and ours, we want to make certain
45 that everyone understands that there is no warranty for this free
46 software. If the software is modified by someone else and passed on, we
47 want its recipients to know that what they have is not the original, so
48 that any problems introduced by others will not reflect on the original
49 authors' reputations.
50 
51  Finally, any free program is threatened constantly by software
52 patents. We wish to avoid the danger that redistributors of a free
53 program will individually obtain patent licenses, in effect making the
54 program proprietary. To prevent this, we have made it clear that any
55 patent must be licensed for everyone's free use or not licensed at all.
56 
57  The precise terms and conditions for copying, distribution and
58 modification follow.
59 
60  GNU GENERAL PUBLIC LICENSE
61  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
62 
63  0. This License applies to any program or other work which contains
64 a notice placed by the copyright holder saying it may be distributed
65 under the terms of this General Public License. The "Program", below,
66 refers to any such program or work, and a "work based on the Program"
67 means either the Program or any derivative work under copyright law:
68 that is to say, a work containing the Program or a portion of it,
69 either verbatim or with modifications and/or translated into another
70 language. (Hereinafter, translation is included without limitation in
71 the term "modification".) Each licensee is addressed as "you".
72 
73 Activities other than copying, distribution and modification are not
74 covered by this License; they are outside its scope. The act of
75 running the Program is not restricted, and the output from the Program
76 is covered only if its contents constitute a work based on the
77 Program (independent of having been made by running the Program).
78 Whether that is true depends on what the Program does.
79 
80  1. You may copy and distribute verbatim copies of the Program's
81 source code as you receive it, in any medium, provided that you
82 conspicuously and appropriately publish on each copy an appropriate
83 copyright notice and disclaimer of warranty; keep intact all the
84 notices that refer to this License and to the absence of any warranty;
85 and give any other recipients of the Program a copy of this License
86 along with the Program.
87 
88 You may charge a fee for the physical act of transferring a copy, and
89 you may at your option offer warranty protection in exchange for a fee.
90 
91  2. You may modify your copy or copies of the Program or any portion
92 of it, thus forming a work based on the Program, and copy and
93 distribute such modifications or work under the terms of Section 1
94 above, provided that you also meet all of these conditions:
95 
96  a) You must cause the modified files to carry prominent notices
97  stating that you changed the files and the date of any change.
98 
99  b) You must cause any work that you distribute or publish, that in
100  whole or in part contains or is derived from the Program or any
101  part thereof, to be licensed as a whole at no charge to all third
102  parties under the terms of this License.
103 
104  c) If the modified program normally reads commands interactively
105  when run, you must cause it, when started running for such
106  interactive use in the most ordinary way, to print or display an
107  announcement including an appropriate copyright notice and a
108  notice that there is no warranty (or else, saying that you provide
109  a warranty) and that users may redistribute the program under
110  these conditions, and telling the user how to view a copy of this
111  License. (Exception: if the Program itself is interactive but
112  does not normally print such an announcement, your work based on
113  the Program is not required to print an announcement.)
114 
115 These requirements apply to the modified work as a whole. If
116 identifiable sections of that work are not derived from the Program,
117 and can be reasonably considered independent and separate works in
118 themselves, then this License, and its terms, do not apply to those
119 sections when you distribute them as separate works. But when you
120 distribute the same sections as part of a whole which is a work based
121 on the Program, the distribution of the whole must be on the terms of
122 this License, whose permissions for other licensees extend to the
123 entire whole, and thus to each and every part regardless of who wrote it.
124 
125 Thus, it is not the intent of this section to claim rights or contest
126 your rights to work written entirely by you; rather, the intent is to
127 exercise the right to control the distribution of derivative or
128 collective works based on the Program.
129 
130 In addition, mere aggregation of another work not based on the Program
131 with the Program (or with a work based on the Program) on a volume of
132 a storage or distribution medium does not bring the other work under
133 the scope of this License.
134 
135  3. You may copy and distribute the Program (or a work based on it,
136 under Section 2) in object code or executable form under the terms of
137 Sections 1 and 2 above provided that you also do one of the following:
138 
139  a) Accompany it with the complete corresponding machine-readable
140  source code, which must be distributed under the terms of Sections
141  1 and 2 above on a medium customarily used for software interchange; or,
142 
143  b) Accompany it with a written offer, valid for at least three
144  years, to give any third party, for a charge no more than your
145  cost of physically performing source distribution, a complete
146  machine-readable copy of the corresponding source code, to be
147  distributed under the terms of Sections 1 and 2 above on a medium
148  customarily used for software interchange; or,
149 
150  c) Accompany it with the information you received as to the offer
151  to distribute corresponding source code. (This alternative is
152  allowed only for noncommercial distribution and only if you
153  received the program in object code or executable form with such
154  an offer, in accord with Subsection b above.)
155 
156 The source code for a work means the preferred form of the work for
157 making modifications to it. For an executable work, complete source
158 code means all the source code for all modules it contains, plus any
159 associated interface definition files, plus the scripts used to
160 control compilation and installation of the executable. However, as a
161 special exception, the source code distributed need not include
162 anything that is normally distributed (in either source or binary
163 form) with the major components (compiler, kernel, and so on) of the
164 operating system on which the executable runs, unless that component
165 itself accompanies the executable.
166 
167 If distribution of executable or object code is made by offering
168 access to copy from a designated place, then offering equivalent
169 access to copy the source code from the same place counts as
170 distribution of the source code, even though third parties are not
171 compelled to copy the source along with the object code.
172 
173  4. You may not copy, modify, sublicense, or distribute the Program
174 except as expressly provided under this License. Any attempt
175 otherwise to copy, modify, sublicense or distribute the Program is
176 void, and will automatically terminate your rights under this License.
177 However, parties who have received copies, or rights, from you under
178 this License will not have their licenses terminated so long as such
179 parties remain in full compliance.
180 
181  5. You are not required to accept this License, since you have not
182 signed it. However, nothing else grants you permission to modify or
183 distribute the Program or its derivative works. These actions are
184 prohibited by law if you do not accept this License. Therefore, by
185 modifying or distributing the Program (or any work based on the
186 Program), you indicate your acceptance of this License to do so, and
187 all its terms and conditions for copying, distributing or modifying
188 the Program or works based on it.
189 
190  6. Each time you redistribute the Program (or any work based on the
191 Program), the recipient automatically receives a license from the
192 original licensor to copy, distribute or modify the Program subject to
193 these terms and conditions. You may not impose any further
194 restrictions on the recipients' exercise of the rights granted herein.
195 You are not responsible for enforcing compliance by third parties to
196 this License.
197 
198  7. If, as a consequence of a court judgment or allegation of patent
199 infringement or for any other reason (not limited to patent issues),
200 conditions are imposed on you (whether by court order, agreement or
201 otherwise) that contradict the conditions of this License, they do not
202 excuse you from the conditions of this License. If you cannot
203 distribute so as to satisfy simultaneously your obligations under this
204 License and any other pertinent obligations, then as a consequence you
205 may not distribute the Program at all. For example, if a patent
206 license would not permit royalty-free redistribution of the Program by
207 all those who receive copies directly or indirectly through you, then
208 the only way you could satisfy both it and this License would be to
209 refrain entirely from distribution of the Program.
210 
211 If any portion of this section is held invalid or unenforceable under
212 any particular circumstance, the balance of the section is intended to
213 apply and the section as a whole is intended to apply in other
214 circumstances.
215 
216 It is not the purpose of this section to induce you to infringe any
217 patents or other property right claims or to contest validity of any
218 such claims; this section has the sole purpose of protecting the
219 integrity of the free software distribution system, which is
220 implemented by public license practices. Many people have made
221 generous contributions to the wide range of software distributed
222 through that system in reliance on consistent application of that
223 system; it is up to the author/donor to decide if he or she is willing
224 to distribute software through any other system and a licensee cannot
225 impose that choice.
226 
227 This section is intended to make thoroughly clear what is believed to
228 be a consequence of the rest of this License.
229 
230  8. If the distribution and/or use of the Program is restricted in
231 certain countries either by patents or by copyrighted interfaces, the
232 original copyright holder who places the Program under this License
233 may add an explicit geographical distribution limitation excluding
234 those countries, so that distribution is permitted only in or among
235 countries not thus excluded. In such case, this License incorporates
236 the limitation as if written in the body of this License.
237 
238  9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
239 
240 Each version is given a distinguishing version number. If the Program
241 specifies a version number of this License which applies to it and "any
242 later version", you have the option of following the terms and conditions
243 either of that version or of any later version published by the Free Software
244 Foundation. If the Program does not specify a version number of this License,
245  you may choose any version ever published by the Free Software Foundation.
246 
247  10. If you wish to incorporate parts of the Program into other free
248 programs whose distribution conditions are different, write to the author to
249 ask for permission. For software which is copyrighted by the Free Software
250 Foundation, write to the Free Software Foundation; we sometimes make
251 exceptions for this. Our decision will be guided by the two goals of
252 preserving the free status of all derivatives of our free software and of
253 promoting the sharing and reuse of software generally.
254 
255  NO WARRANTY
256 
257  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
258 THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
259 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
260 THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
261 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
262 FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
263 PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
264 YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
265 
266  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
267 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
268 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
269 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
270 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
271 LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
272 THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
273 EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
274 DAMAGES.
275 
276  END OF TERMS AND CONDITIONS '
277 */
278 // TCLHashTableIterator.h:
279 //
280 // This file defines the CTCLHashTableIterator class.
281 // Note that this is a template class where T is the type of thing
282 // stored in a hash table entry. T must have assignment and copy
283 // constructors.
284 // In STL terms, this is a forward iterator. There is no going backwards.
285 //
286 // Author:
287 // Ron Fox
288 // NSCL
289 // Michigan State University
290 // East Lansing, MI 48824-1321
291 // mailto:fox@nscl.msu.edu
292 //
293 // Copyright 1999 NSCL, All Rights Reserved.
294 //
296 /*
297  * Change Log:
298  * $Log$
299  * Revision 8.3 2006/03/16 16:57:50 ron-fox
300  * Import tclPlus (TCL DIr) from SpecTcl-3.1 where it tries to get rid
301  * of most deprecated calls and adds docbook -> manpage documentation for the
302  * entire library
303  *
304  * Revision 5.2 2005/06/03 15:19:30 ron-fox
305  * Part of breaking off /merging branch to start 3.1 development
306  *
307  * Revision 5.1.2.1 2004/12/21 17:51:27 ron-fox
308  * Port to gcc 3.x compilers.
309  *
310  * Revision 5.1 2004/11/29 16:56:14 ron-fox
311  * Begin port to 3.x compilers calling this 3.0
312  *
313  * Revision 4.3 2003/01/02 17:11:34 venema
314  * Major version upgrade to 2.0 includes support for arbitrary user coordinate mapping and sticky print options.
315  *
316  * Revision 4.2 2002/08/08 15:20:16 ron-fox
317  * Fix typo for Tcl_Hashtable -> Tcl_HashTable
318  *
319  * Revision 1.3 2002/08/08 15:17:15 fox
320  * Fix type on Tcl_Hashtable -> Tcl_HashTable
321  *
322  */
323 #ifndef TCLHASHTABLEITERATOR_H //Required for current class
324 #define TCLHASHTABLEITERATOR_H
325 
326 #ifndef TCLHASHTABLEITEM_H
327 #include "TCLHashTableItem.h"
328 #endif
329 
330  //Required for 1:1 associated classes
331 #include <tcl.h>
332 
333 template <class T>
335 {
337 
338  Tcl_HashSearch m_Context; // Search context used by Tcl_NextHashEntry
339  pCTCLTHashTableItem m_pCurrentEntry; // Pointer to current entry.
340  Tcl_HashTable* m_pHashTable;
341 
342 public:
343 
344  //Constructors with arguments
345 
346  CTCLHashTableIterator (Tcl_HashTable* pTable) :
347  m_pCurrentEntry(0),
348  m_pHashTable(pTable)
349  {
350  Initialize();
351  }
352  virtual ~ CTCLHashTableIterator ( ) { } //Destructor
353 
354  //Copy constructor
355 
356  CTCLHashTableIterator (const CTCLHashTableIterator& aCTCLHashTableIterator )
357  {
358  m_Context = aCTCLHashTableIterator.m_Context;
359  m_pCurrentEntry = aCTCLHashTableIterator.m_pCurrentEntry;
360  m_pHashTable = aCTCLHashTableIterator.m_pHashTable;
361 
362  }
363 
364  //Operator= Assignment Operator
365 
366  CTCLHashTableIterator operator=
367  (const CTCLHashTableIterator& aCTCLHashTableIterator)
368  {
369  if (this == &aCTCLHashTableIterator) return *this;
370 
371  m_Context = aCTCLHashTableIterator.m_Context;
372  m_pCurrentEntry = aCTCLHashTableIterator.m_pCurrentEntry;
373  m_pHashTable = aCTCLHashTableIterator.m_pHashTable;
374  return *this;
375  }
376 
377  //Operator== Equality Operator
378 
379  int operator== (const CTCLHashTableIterator& aCTCLHashTableIterator)
380  { return (
381  (m_pCurrentEntry == aCTCLHashTableIterator.m_pCurrentEntry) &&
382  (m_pHashTable == aCTCLHashTableIterator.m_pHashTable)
383  );
384  }
385  // Selectors:
386 
387 public:
388 
389  Tcl_HashSearch getContext() const
390  {
391  return m_Context;
392  }
393 
394 
395  CTCLHashTableItem<T>* getCurrentEntry() const
396  {
397  return m_pCurrentEntry;
398  }
399  Tcl_HashTable* getHashTable() const
400  {
401  return m_pHashTable;
402  }
403  // Mutators... don't use these unless you know exactly what you're doing.
404 public:
405  //Set accessor function for attribute
406 
407  void setContext (Tcl_HashSearch am_Context)
408  {
409  m_Context = am_Context;
410  }
411 
412  //Set accessor function for attribute
413 
414  void setCurrentEntry (CTCLHashTableItem<T>* am_pCurrentEntry)
415  {
416  m_pCurrentEntry = am_pCurrentEntry;
417  }
418 
419  //Set accessor function for 1:1 association
420  void setHashTable (Tcl_HashTable* am_pHashTable)
421  {
422  m_pHashTable = am_pHashTable;
423  }
424  //
425  // operations on hash table iterators:
426  //
427 public:
428  CTCLHashTableIterator& operator++ () {
429  m_pCurrentEntry = Tcl_NextHashEntry(&m_Context);
430  return *this;
431  }
432  CTCLHashTableIterator operator++ (int i) {
433  CTCLHashTableIterator<T> copy(*this);
434  ++this;
435  return copy;
436  }
437 
438  CTCLHashTableItem<T>& operator* () {
439  return *m_pCurrentEntry;
440  }
441  CTCLHashTableItem<T>* operator->() {
442  return m_pCurrentEntry;
443  }
444 
445 
446  // Protected utility functions:
447 protected:
448  void Initialize() {
449  m_pCurrentEntry = Tcl_FirstHashEntry(m_pHashTable, &m_Context);
450  }
451 };
452 
453 #endif
Definition: TCLHashTableIterator.h:334
Definition: TCLHashTableItem.h:301