CFx SDK Documentation  2020SP3
OdaSTL.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2017, Open Design Alliance (the "Alliance").
3 // All rights reserved.
4 //
5 // This software and its documentation and related materials are owned by
6 // the Alliance. The software may only be incorporated into application
7 // programs owned by members of the Alliance, subject to a signed
8 // Membership Agreement and Supplemental Software License Agreement with the
9 // Alliance. The structure and organization of this software are the valuable
10 // trade secrets of the Alliance and its suppliers. The software is also
11 // protected by copyright law and international treaty provisions. Application
12 // programs incorporating this software must include the following statement
13 // with their copyright notices:
14 //
15 // This application incorporates Teigha(R) software pursuant to a license
16 // agreement with Open Design Alliance.
17 // Teigha(R) Copyright (C) 2002-2017 by Open Design Alliance.
18 // All rights reserved.
19 //
20 // By use of this software, its documentation or related materials, you
21 // acknowledge and accept the above terms.
23 
24 
26 // Purpose: Declarations for using STL without warning noise.
27 //
28 // Usage: Include this file and define at least one of the STL_USING_xxx
29 // macros. Currently supported data types from the STL:
30 //
31 // // defines for using the STL
32 // #define STL_USING_ALL
33 // #define STL_USING_MAP
34 // #define STL_USING_VECTOR
35 // #define STL_USING_LIST
36 // #define STL_USING_STRING
37 // #define STL_USING_STREAM
38 // #define STL_USING_IOSTREAM
39 // #define STL_USING_MEMORY
40 // #define STL_USING_STACK
41 // #define STL_USING_ALGORITHM
42 // #define STL_USING_FUNCTIONAL
43 // #define STL_USING_UTILITY
44 // #define STL_USING_SET
45 // #define STL_USING_LIMITS
46 //
47 // Sample:
48 // #define STL_USING_ALL
49 // #include "OdaSTL.h"
50 //
51 // this file based on Oskar Wieland (oskar.wieland@gmx.de) STL.H
53 
55 // include guards
57 
58 // !!! Do not prevent the multiple include for this file
59 
60 //#ifndef _ODA_STLHELPER_INCLUDED_
61 //#define _ODA_STLHELPER_INCLUDED_
62 
63 
65 // handy define to include all stuff
67 
68 #ifdef STL_USING_ALL
69 
70 #define STL_USING_MAP
71 #define STL_USING_VECTOR
72 #define STL_USING_LIST
73 #define STL_USING_STRING
74 #define STL_USING_STREAM
75 #define STL_USING_IOSTREAM
76 #define STL_USING_MEMORY
77 #define STL_USING_STACK
78 #define STL_USING_ALGORITHM
79 #define STL_USING_FUNCTIONAL
80 #define STL_USING_UTILITY
81 #define STL_USING_SET
82 #define STL_USING_LIMITS
83 
84 #endif
85 
86 
88 // STL neccessary declaration for map
90 
91 #ifdef STL_USING_MAP
92 
93 #ifdef _MSC_VER
94 #pragma warning(push)
95 #endif // _MSC_VER
96 
97 #ifdef _MSC_VER
98 #include <yvals.h> // warning numbers get enabled in yvals.h
99 #endif
100 
101 #ifdef _MSC_VER
102 #pragma warning(disable: 4018) // signed/unsigned mismatch
103 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
104 #pragma warning(disable: 4100) // unreferenced formal parameter
105 #pragma warning(disable: 4127) // conditional expression is constant
106 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
107 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
108 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
109 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
110  // to a UDT. Will produce errors if applied using infix notation
111 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
112 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
113 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
114 #pragma warning(disable: 4702) // unreachable code
115 #pragma warning(disable: 4710) // 'function' : function not inlined
116 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
117 
118 // BUG: C4786 Warning Is Not Disabled with #pragma Warning
119 // STATUS: Microsoft has confirmed this to be a bug in the Microsoft product.
120 // This warning can be ignored. This occured only in the <map> container.
121 
122 // MSVC8 /analyze warnings
123 #if _MSC_VER > 1310
124 #pragma warning( disable : 6011 )
125 #pragma warning( disable : 6219 )
126 #pragma warning( disable : 6221 )
127 #pragma warning( disable : 6255 )
128 #pragma warning( disable : 6308 )
129 #pragma warning( disable : 6320 )
130 #pragma warning( disable : 6321 )
131 #pragma warning( disable : 6387 )
132 #endif // /analyze
133 #endif // _MSC_VER
134 
135 #include <map>
136 
137 #ifdef _MSC_VER
138 #pragma warning(pop)
139 #endif // _MSC_VER
140 
141 #endif //STL_USING_MAP
142 
143 
145 // STL neccessary declaration for vector
147 
148 #ifdef STL_USING_VECTOR
149 
150 #ifdef _MSC_VER
151 #pragma warning(push)
152 #endif // _MSC_VER
153 
154 #ifdef _MSC_VER
155 #include <yvals.h> // warning numbers get enabled in yvals.h
156 #endif
157 
158 #ifdef _MSC_VER
159 #pragma warning(disable: 4018) // signed/unsigned mismatch
160 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
161 #pragma warning(disable: 4100) // unreferenced formal parameter
162 #pragma warning(disable: 4127) // conditional expression is constant
163 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
164 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
165 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
166 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
167  // to a UDT. Will produce errors if applied using infix notation
168 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
169 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
170 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
171 #pragma warning(disable: 4702) // unreachable code
172 #pragma warning(disable: 4710) // 'function' : function not inlined
173 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
174 
175 // MSVC8 /analyze warnings
176 #if _MSC_VER > 1310
177 #pragma warning( disable : 6011 )
178 #pragma warning( disable : 6219 )
179 #pragma warning( disable : 6221 )
180 #pragma warning( disable : 6255 )
181 #pragma warning( disable : 6308 )
182 #pragma warning( disable : 6320 )
183 #pragma warning( disable : 6321 )
184 #pragma warning( disable : 6387 )
185 #endif // /analyze
186 #endif
187 
188 #include <vector>
189 
190 #ifdef _MSC_VER
191 #pragma warning(pop)
192 #endif // _MSC_VER
193 
194 #endif // STL_USING_VECTOR
195 
196 
198 // STL neccessary declaration for list
200 
201 #ifdef STL_USING_LIST
202 
203 #ifdef _MSC_VER
204 #pragma warning(push)
205 #endif // _MSC_VER
206 
207 #ifdef _MSC_VER
208 #include <yvals.h> // warning numbers get enabled in yvals.h
209 #endif
210 
211 #ifdef _MSC_VER
212 #pragma warning(disable: 4018) // signed/unsigned mismatch
213 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
214 #pragma warning(disable: 4100) // unreferenced formal parameter
215 #pragma warning(disable: 4127) // conditional expression is constant
216 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
217 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
218 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
219 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
220  // to a UDT. Will produce errors if applied using infix notation
221 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
222 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
223 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
224 #pragma warning(disable: 4702) // unreachable code
225 #pragma warning(disable: 4710) // 'function' : function not inlined
226 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
227 // MSVC8 /analyze warnings
228 #if _MSC_VER > 1310
229 #pragma warning( disable : 6011 )
230 #pragma warning( disable : 6219 )
231 #pragma warning( disable : 6221 )
232 #pragma warning( disable : 6255 )
233 #pragma warning( disable : 6308 )
234 #pragma warning( disable : 6320 )
235 #pragma warning( disable : 6321 )
236 #pragma warning( disable : 6387 )
237 #endif // /analyze
238 #endif
239 
240 #include <list>
241 
242 #ifdef _MSC_VER
243 #pragma warning(pop)
244 #endif // _MSC_VER
245 
246 #endif // STL_USING_LIST
247 
248 
250 // STL neccessary declaration for string
252 
253 #ifdef STL_USING_STRING
254 
255 #ifdef _MSC_VER
256 #pragma warning(push)
257 #endif // _MSC_VER
258 
259 #ifdef _MSC_VER
260 #include <yvals.h> // warning numbers get enabled in yvals.h
261 #endif
262 
263 #ifdef _MSC_VER
264 #pragma warning(disable: 4018) // signed/unsigned mismatch
265 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
266 #pragma warning(disable: 4100) // unreferenced formal parameter
267 #pragma warning(disable: 4127) // conditional expression is constant
268 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
269 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
270 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
271 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
272  // to a UDT. Will produce errors if applied using infix notation
273 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
274 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
275 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
276 #pragma warning(disable: 4702) // unreachable code
277 #pragma warning(disable: 4710) // 'function' : function not inlined
278 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
279 // MSVC8 /analyze warnings
280 #if _MSC_VER > 1310
281 #pragma warning( disable : 6011 )
282 #pragma warning( disable : 6219 )
283 #pragma warning( disable : 6221 )
284 #pragma warning( disable : 6255 )
285 #pragma warning( disable : 6308 )
286 #pragma warning( disable : 6320 )
287 #pragma warning( disable : 6321 )
288 #pragma warning( disable : 6387 )
289 #endif // /analyze
290 #endif
291 
292 #include <string>
293 
294 #ifdef _MSC_VER
295 #pragma warning(pop)
296 #endif // _MSC_VER
297 
298 #ifdef _MSC_VER
299 #pragma warning(disable: 4514) // unreferenced inline/local function has been removed
300 #pragma warning(disable: 4710) // 'function' : function not inlined
301 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters
302  // in the debug information
303 #endif
304 
305 #endif // STL_USING_STRING
306 
307 
309 // STL neccessary declaration for streams
311 
312 #ifdef STL_USING_STREAM
313 
314 #ifdef _MSC_VER
315 #pragma warning(push)
316 #endif // _MSC_VER
317 
318 #ifdef _MSC_VER
319 #include <yvals.h> // warning numbers get enabled in yvals.h
320 #endif
321 
322 #ifdef _MSC_VER
323 #pragma warning(disable: 4018) // signed/unsigned mismatch
324 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
325 #pragma warning(disable: 4100) // unreferenced formal parameter
326 #pragma warning(disable: 4127) // conditional expression is constant
327 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
328 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
329 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
330 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
331  // to a UDT. Will produce errors if applied using infix notation
332 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
333 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
334 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
335 #pragma warning(disable: 4702) // unreachable code
336 #pragma warning(disable: 4710) // 'function' : function not inlined
337 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
338 // MSVC8 /analyze warnings
339 #if _MSC_VER > 1310
340 #pragma warning( disable : 6011 )
341 #pragma warning( disable : 6219 )
342 #pragma warning( disable : 6221 )
343 #pragma warning( disable : 6255 )
344 #pragma warning( disable : 6308 )
345 #pragma warning( disable : 6320 )
346 #pragma warning( disable : 6321 )
347 #pragma warning( disable : 6387 )
348 #endif // /analyze
349 #endif
350 
351 #ifdef OD_HAVE_SSTREAM_FILE
352 #include <sstream>
353 #endif
354 
355 #ifdef OD_HAVE_FSTREAM_FILE
356 #include <fstream>
357 #endif
358 
359 #ifdef _MSC_VER
360 #pragma warning(pop)
361 #endif // _MSC_VER
362 
363 #endif //STL_USING_STREAM
364 
365 
367 // STL neccessary declaration for input/output streams
369 
370 #ifdef STL_USING_IOSTREAM
371 
372 #ifdef _MSC_VER
373 #pragma warning(push)
374 #endif // _MSC_VER
375 
376 #ifdef _MSC_VER
377 #include <yvals.h> // warning numbers get enabled in yvals.h
378 #endif
379 
380 #ifdef _MSC_VER
381 #pragma warning(disable: 4018) // signed/unsigned mismatch
382 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
383 #pragma warning(disable: 4100) // unreferenced formal parameter
384 #pragma warning(disable: 4127) // conditional expression is constant
385 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
386 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
387 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
388 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
389  // to a UDT. Will produce errors if applied using infix notation
390 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
391 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
392 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
393 #pragma warning(disable: 4702) // unreachable code
394 #pragma warning(disable: 4710) // 'function' : function not inlined
395 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
396 // MSVC8 /analyze warnings
397 #if _MSC_VER > 1310
398 #pragma warning( disable : 6011 )
399 #pragma warning( disable : 6219 )
400 #pragma warning( disable : 6221 )
401 #pragma warning( disable : 6255 )
402 #pragma warning( disable : 6308 )
403 #pragma warning( disable : 6320 )
404 #pragma warning( disable : 6321 )
405 #pragma warning( disable : 6387 )
406 #endif // /analyze
407 #endif
408 
409 #include <iostream>
410 #ifdef OD_HAVE_IOMANIP_FILE
411 #include <iomanip>
412 #endif
413 
414 #ifdef _MSC_VER
415 #pragma warning(pop)
416 #endif // _MSC_VER
417 
418 #endif //STL_USING_IOSTREAM
419 
421 // STL neccessary declaration for memory
423 
424 #ifdef STL_USING_MEMORY
425 
426 // The STL library provides a type called auto_ptr for managing pointers.
427 // This template class acts as a stack variable for dynamically allocated
428 // memory. When the variable goes out of scope, its destructor gets called.
429 // In its destructor, it calls delete on the contained pointer, making sure
430 // that the memory is returned to the heap.
431 
432 #ifdef _MSC_VER
433 #pragma warning(push)
434 #endif // _MSC_VER
435 
436 #ifdef _MSC_VER
437 #include <yvals.h> // warning numbers get enabled in yvals.h
438 #endif
439 
440 #ifdef _MSC_VER
441 #pragma warning(disable: 4018) // signed/unsigned mismatch
442 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
443 #pragma warning(disable: 4100) // unreferenced formal parameter
444 #pragma warning(disable: 4127) // conditional expression is constant
445 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
446 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
447 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
448 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
449  // to a UDT. Will produce errors if applied using infix notation
450 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
451 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
452 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
453 #pragma warning(disable: 4702) // unreachable code
454 #pragma warning(disable: 4710) // 'function' : function not inlined
455 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
456 // MSVC8 /analyze warnings
457 #if _MSC_VER > 1310
458 #pragma warning( disable : 6011 )
459 #pragma warning( disable : 6219 )
460 #pragma warning( disable : 6221 )
461 #pragma warning( disable : 6255 )
462 #pragma warning( disable : 6308 )
463 #pragma warning( disable : 6320 )
464 #pragma warning( disable : 6321 )
465 #pragma warning( disable : 6387 )
466 #endif // /analyze
467 #endif
468 
469 #include <memory>
470 
471 #ifdef _MSC_VER
472 #pragma warning(pop)
473 #endif // _MSC_VER
474 
475 #endif //STL_USING_MEMORY
476 
477 
479 // STL neccessary declaration for stack
481 
482 #ifdef STL_USING_STACK
483 
484 #ifdef _MSC_VER
485 #pragma warning(push)
486 #endif // _MSC_VER
487 
488 #ifdef _MSC_VER
489 #include <yvals.h> // warning numbers get enabled in yvals.h
490 #endif
491 
492 #ifdef _MSC_VER
493 #pragma warning(disable: 4018) // signed/unsigned mismatch
494 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
495 #pragma warning(disable: 4100) // unreferenced formal parameter
496 #pragma warning(disable: 4127) // conditional expression is constant
497 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
498 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
499 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
500 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
501  // to a UDT. Will produce errors if applied using infix notation
502 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
503 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
504 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
505 #pragma warning(disable: 4702) // unreachable code
506 #pragma warning(disable: 4710) // 'function' : function not inlined
507 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
508 // MSVC8 /analyze warnings
509 #if _MSC_VER > 1310
510 #pragma warning( disable : 6011 )
511 #pragma warning( disable : 6219 )
512 #pragma warning( disable : 6221 )
513 #pragma warning( disable : 6255 )
514 #pragma warning( disable : 6308 )
515 #pragma warning( disable : 6320 )
516 #pragma warning( disable : 6321 )
517 #pragma warning( disable : 6387 )
518 #endif // /analyze
519 #endif
520 
521 #include <stack>
522 
523 #ifdef _MSC_VER
524 #pragma warning(pop)
525 #endif // _MSC_VER
526 
527 #endif // STL_USING_STACK
528 
529 
530 #ifdef STL_USING_QUEUE
531 
532 #ifdef _MSC_VER
533 #pragma warning(push)
534 #endif // _MSC_VER
535 
536 #ifdef _MSC_VER
537 #include <yvals.h> // warning numbers get enabled in yvals.h
538 #endif
539 
540 #ifdef _MSC_VER
541 #pragma warning(disable: 4018) // signed/unsigned mismatch
542 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
543 #pragma warning(disable: 4100) // unreferenced formal parameter
544 #pragma warning(disable: 4127) // conditional expression is constant
545 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
546 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
547 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
548 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
549 // to a UDT. Will produce errors if applied using infix notation
550 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
551 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
552 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
553 #pragma warning(disable: 4702) // unreachable code
554 #pragma warning(disable: 4710) // 'function' : function not inlined
555 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
556 // MSVC8 /analyze warnings
557 #if _MSC_VER > 1310
558 #pragma warning( disable : 6011 )
559 #pragma warning( disable : 6219 )
560 #pragma warning( disable : 6221 )
561 #pragma warning( disable : 6255 )
562 #pragma warning( disable : 6308 )
563 #pragma warning( disable : 6320 )
564 #pragma warning( disable : 6321 )
565 #pragma warning( disable : 6387 )
566 #endif // /analyze
567 #endif
568 
569 #include <queue>
570 
571 #ifdef _MSC_VER
572 #pragma warning(pop)
573 #endif // _MSC_VER
574 
575 #endif // STL_USING_STACK
576 
578 // STL neccessary declaration for algorithm
580 
581 #ifdef STL_USING_ALGORITHM
582 
583 #ifdef _MSC_VER
584 #pragma warning(push)
585 #endif // _MSC_VER
586 
587 #ifdef _MSC_VER
588 #include <yvals.h> // warning numbers get enabled in yvals.h
589 #endif
590 
591 #ifdef _MSC_VER
592 #pragma warning(disable: 4018) // signed/unsigned mismatch
593 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
594 #pragma warning(disable: 4100) // unreferenced formal parameter
595 #pragma warning(disable: 4127) // conditional expression is constant
596 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
597 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
598 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
599 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
600  // to a UDT. Will produce errors if applied using infix notation
601 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
602 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
603 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
604 #pragma warning(disable: 4702) // unreachable code
605 #pragma warning(disable: 4710) // 'function' : function not inlined
606 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
607 // MSVC8 /analyze warnings
608 #if _MSC_VER > 1310
609 #pragma warning( disable : 6011 )
610 #pragma warning( disable : 6219 )
611 #pragma warning( disable : 6221 )
612 #pragma warning( disable : 6255 )
613 #pragma warning( disable : 6308 )
614 #pragma warning( disable : 6320 )
615 #pragma warning( disable : 6321 )
616 #pragma warning( disable : 6387 )
617 #endif // /analyze
618 #endif
619 
620 #include <algorithm>
621 #include <iterator>
622 
623 // in STLPORT used with BCC 5.6 std::remove clashes with remove(char*) from iostream
624 #ifdef __SGI_STL_PORT
625 
630 namespace std
631 {
632  using _STLP_STD::remove;
633 }
634 #endif
635 
636 #ifdef _MSC_VER
637 #pragma warning(pop)
638 #endif // _MSC_VER
639 
640 #endif // STL_USING_ALGORITHM
641 
643 // STL neccessary declaration for functional
645 
646 #ifdef STL_USING_FUNCTIONAL
647 
648 #ifdef _MSC_VER
649 #pragma warning(push)
650 #endif // _MSC_VER
651 
652 #ifdef _MSC_VER
653 #include <yvals.h> // warning numbers get enabled in yvals.h
654 #endif
655 
656 #ifdef _MSC_VER
657 #pragma warning(disable: 4018) // signed/unsigned mismatch
658 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
659 #pragma warning(disable: 4100) // unreferenced formal parameter
660 #pragma warning(disable: 4127) // conditional expression is constant
661 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
662 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
663 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
664 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
665  // to a UDT. Will produce errors if applied using infix notation
666 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
667 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
668 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
669 #pragma warning(disable: 4702) // unreachable code
670 #pragma warning(disable: 4710) // 'function' : function not inlined
671 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
672 // MSVC8 /analyze warnings
673 #if _MSC_VER > 1310
674 #pragma warning( disable : 6011 )
675 #pragma warning( disable : 6219 )
676 #pragma warning( disable : 6221 )
677 #pragma warning( disable : 6255 )
678 #pragma warning( disable : 6308 )
679 #pragma warning( disable : 6320 )
680 #pragma warning( disable : 6321 )
681 #pragma warning( disable : 6387 )
682 #endif // /analyze
683 #endif
684 
685 #include <functional>
686 
687 #ifdef _MSC_VER
688 #pragma warning(pop)
689 #endif // _MSC_VER
690 
691 #endif // STL_USING_FUNCTIONAL
692 
693 
695 // STL neccessary declaration for utilities
697 
698 #ifdef STL_USING_UTILITY
699 
700 #ifdef _MSC_VER
701 #pragma warning(push)
702 #endif // _MSC_VER
703 
704 #ifdef _MSC_VER
705 #include <yvals.h> // warning numbers get enabled in yvals.h
706 #endif
707 
708 #ifdef _MSC_VER
709 #pragma warning(disable: 4018) // signed/unsigned mismatch
710 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
711 #pragma warning(disable: 4100) // unreferenced formal parameter
712 #pragma warning(disable: 4127) // conditional expression is constant
713 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
714 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
715 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
716 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
717  // to a UDT. Will produce errors if applied using infix notation
718 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
719 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
720 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template 'vector'
721 #pragma warning(disable: 4702) // unreachable code
722 #pragma warning(disable: 4710) // 'function' : function not inlined
723 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
724 // MSVC8 /analyze warnings
725 #if _MSC_VER > 1310
726 #pragma warning( disable : 6011 )
727 #pragma warning( disable : 6219 )
728 #pragma warning( disable : 6221 )
729 #pragma warning( disable : 6255 )
730 #pragma warning( disable : 6308 )
731 #pragma warning( disable : 6320 )
732 #pragma warning( disable : 6321 )
733 #pragma warning( disable : 6387 )
734 #endif // /analyze
735 #endif
736 
737 #include <utility>
738 
739 #ifdef _MSC_VER
740 #pragma warning(pop)
741 #endif // _MSC_VER
742 
743 #endif // STL_USING_FUNCTIONAL
744 
745 #ifdef STL_USING_SET
746 
747 #ifdef _MSC_VER
748 #pragma warning(push)
749 #endif // _MSC_VER
750 
751 #ifdef _MSC_VER
752 #include <yvals.h> // warning numbers get enabled in yvals.h
753 #endif
754 
755 #ifdef _MSC_VER
756 #pragma warning(disable: 4018) // signed/unsigned mismatch
757 #pragma warning(disable: 4097) // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
758 #pragma warning(disable: 4100) // unreferenced formal parameter
759 #pragma warning(disable: 4127) // conditional expression is constant
760 #pragma warning(disable: 4146) // unary minus operator applied to unsigned type, result still unsigned
761 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data
762 #pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
763 #pragma warning(disable: 4284) // return type for 'identifier::operator ->' is not a UDT or reference
764  // to a UDT. Will produce errors if applied using infix notation
765 #pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
766 #pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
767 #pragma warning(disable: 4702) // unreachable code
768 #pragma warning(disable: 4710) // 'function' : function not inlined
769 #pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
770 // MSVC8 /analyze warnings
771 #if _MSC_VER > 1310
772 #pragma warning( disable : 6011 )
773 #pragma warning( disable : 6219 )
774 #pragma warning( disable : 6221 )
775 #pragma warning( disable : 6255 )
776 #pragma warning( disable : 6308 )
777 #pragma warning( disable : 6320 )
778 #pragma warning( disable : 6321 )
779 #pragma warning( disable : 6387 )
780 #endif // /analyze
781 #endif
782 
783 #include <set>
784 
785 #ifdef _MSC_VER
786 #pragma warning(pop)
787 #endif // _MSC_VER
788 
789 #endif // STL_USING_SET
790 
791 #ifdef STL_USING_LIMITS
792 
793 #ifdef _MSC_VER
794 #pragma warning(push)
795 #include <yvals.h> // warning numbers get enabled in yvals.h
796 #pragma warning(disable: 4663) // C++ language change: to explicitly specialize class template ...
797 
798 #undef min // in windows header min & max are defined
799 #undef max
800 
801 #endif // _MSC_VER
802 
803 #include <limits>
804 
805 #ifdef _MSC_VER
806 #pragma warning(pop)
807 #endif // _MSC_VER
808 
809 #endif // STL_USING_LIMITS
810 
811 
813 // verify proper use of macros
815 
816 #if defined(STL_USING_MAP) || defined(STL_USING_VECTOR) || defined(STL_USING_LIST) || \
817  defined(STL_USING_STRING) || defined(STL_USING_STREAM) || defined STL_USING_FUNCTIONAL || \
818  defined(STL_USING_MEMORY) || defined(STL_USING_STACK) || defined STL_USING_ALGORITHM || \
819  defined(STL_USING_UTILITY) || defined(STL_USING_IOSTREAM) || defined(STL_USING_SET) || \
820  defined(STL_USING_LIMITS)
821 
822 #define _ODA_STL_
823 
824 #else
825 #pragma message( "Warning: You included \"OdaSTL.H\" without using any STL features!" )
826 
827 #endif
828 
829 //#endif // _ODA_STLHELPER_INCLUDED_
830