CFx SDK Documentation 2026 SP0
Loading...
Searching...
No Matches
OdaSTL.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2024, 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 Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2024 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
103
104#pragma warning(disable: 4100) // unreferenced formal parameter
105#pragma warning(disable: 4127) // conditional expression is constant
106
107
108#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
109
110
111
112#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
113
114#pragma warning(disable: 4702) // unreachable code
115#pragma warning(disable: 4710) // 'function' : function not inlined
116
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: 4100) // unreferenced formal parameter
160#pragma warning(disable: 4127) // conditional expression is constant
161#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
162#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
163#pragma warning(disable: 4702) // unreachable code
164#pragma warning(disable: 4710) // 'function' : function not inlined
165
166// MSVC8 /analyze warnings
167#if _MSC_VER > 1310
168#pragma warning( disable : 6011 )
169#pragma warning( disable : 6219 )
170#pragma warning( disable : 6221 )
171#pragma warning( disable : 6255 )
172#pragma warning( disable : 6308 )
173#pragma warning( disable : 6320 )
174#pragma warning( disable : 6321 )
175#pragma warning( disable : 6387 )
176#endif // /analyze
177#endif
178
179#include <vector>
180
181#ifdef _MSC_VER
182#pragma warning(pop)
183#endif // _MSC_VER
184
185#endif // STL_USING_VECTOR
186
187
189// STL neccessary declaration for list
191
192#ifdef STL_USING_LIST
193
194#ifdef _MSC_VER
195#pragma warning(push)
196#endif // _MSC_VER
197
198#ifdef _MSC_VER
199#include <yvals.h> // warning numbers get enabled in yvals.h
200#endif
201
202#ifdef _MSC_VER
203
204#pragma warning(disable: 4100) // unreferenced formal parameter
205#pragma warning(disable: 4127) // conditional expression is constant
206#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
207#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
208#pragma warning(disable: 4702) // unreachable code
209#pragma warning(disable: 4710) // 'function' : function not inlined
210
211// MSVC8 /analyze warnings
212#if _MSC_VER > 1310
213#pragma warning( disable : 6011 )
214#pragma warning( disable : 6219 )
215#pragma warning( disable : 6221 )
216#pragma warning( disable : 6255 )
217#pragma warning( disable : 6308 )
218#pragma warning( disable : 6320 )
219#pragma warning( disable : 6321 )
220#pragma warning( disable : 6387 )
221#endif // /analyze
222#endif
223
224#include <list>
225
226#ifdef _MSC_VER
227#pragma warning(pop)
228#endif // _MSC_VER
229
230#endif // STL_USING_LIST
231
232
234// STL neccessary declaration for string
236
237#ifdef STL_USING_STRING
238
239#ifdef _MSC_VER
240#pragma warning(push)
241#endif // _MSC_VER
242
243#ifdef _MSC_VER
244#include <yvals.h> // warning numbers get enabled in yvals.h
245#endif
246
247#ifdef _MSC_VER
248
249#pragma warning(disable: 4100) // unreferenced formal parameter
250#pragma warning(disable: 4127) // conditional expression is constant
251#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
252#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
253#pragma warning(disable: 4702) // unreachable code
254#pragma warning(disable: 4710) // 'function' : function not inlined
255
256// MSVC8 /analyze warnings
257#if _MSC_VER > 1310
258#pragma warning( disable : 6011 )
259#pragma warning( disable : 6219 )
260#pragma warning( disable : 6221 )
261#pragma warning( disable : 6255 )
262#pragma warning( disable : 6308 )
263#pragma warning( disable : 6320 )
264#pragma warning( disable : 6321 )
265#pragma warning( disable : 6387 )
266#endif // /analyze
267#endif
268
269#include <string>
270
271#ifdef _MSC_VER
272#pragma warning(pop)
273#endif // _MSC_VER
274
275#endif // STL_USING_STRING
276
277
279// STL neccessary declaration for streams
281
282#ifdef STL_USING_STREAM
283
284#ifdef _MSC_VER
285#pragma warning(push)
286#endif // _MSC_VER
287
288#ifdef _MSC_VER
289#include <yvals.h> // warning numbers get enabled in yvals.h
290#endif
291
292#ifdef _MSC_VER
293
294#pragma warning(disable: 4100) // unreferenced formal parameter
295#pragma warning(disable: 4127) // conditional expression is constant
296#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
297#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
298#pragma warning(disable: 4702) // unreachable code
299#pragma warning(disable: 4710) // 'function' : function not inlined
300
301// MSVC8 /analyze warnings
302#if _MSC_VER > 1310
303#pragma warning( disable : 6011 )
304#pragma warning( disable : 6219 )
305#pragma warning( disable : 6221 )
306#pragma warning( disable : 6255 )
307#pragma warning( disable : 6308 )
308#pragma warning( disable : 6320 )
309#pragma warning( disable : 6321 )
310#pragma warning( disable : 6387 )
311#endif // /analyze
312#endif
313
314#ifdef OD_HAVE_SSTREAM_FILE
315#include <sstream>
316#endif
317
318#ifdef OD_HAVE_FSTREAM_FILE
319#include <fstream>
320#endif
321
322#ifdef _MSC_VER
323#pragma warning(pop)
324#endif // _MSC_VER
325
326#endif //STL_USING_STREAM
327
328
330// STL neccessary declaration for input/output streams
332
333#ifdef STL_USING_IOSTREAM
334
335#ifdef _MSC_VER
336#pragma warning(push)
337#endif // _MSC_VER
338
339#ifdef _MSC_VER
340#include <yvals.h> // warning numbers get enabled in yvals.h
341#endif
342
343#ifdef _MSC_VER
344
345#pragma warning(disable: 4100) // unreferenced formal parameter
346#pragma warning(disable: 4127) // conditional expression is constant
347#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
348#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
349#pragma warning(disable: 4702) // unreachable code
350#pragma warning(disable: 4710) // 'function' : function not inlined
351
352// MSVC8 /analyze warnings
353#if _MSC_VER > 1310
354#pragma warning( disable : 6011 )
355#pragma warning( disable : 6219 )
356#pragma warning( disable : 6221 )
357#pragma warning( disable : 6255 )
358#pragma warning( disable : 6308 )
359#pragma warning( disable : 6320 )
360#pragma warning( disable : 6321 )
361#pragma warning( disable : 6387 )
362#endif // /analyze
363#endif
364
365#include <iostream>
366#ifdef OD_HAVE_IOMANIP_FILE
367#include <iomanip>
368#endif
369
370#ifdef _MSC_VER
371#pragma warning(pop)
372#endif // _MSC_VER
373
374#endif //STL_USING_IOSTREAM
375
377// STL neccessary declaration for memory
379
380#ifdef STL_USING_MEMORY
381
382#ifdef _MSC_VER
383#pragma warning(push)
384#endif // _MSC_VER
385
386#ifdef _MSC_VER
387#include <yvals.h> // warning numbers get enabled in yvals.h
388#endif
389
390#ifdef _MSC_VER
391
392#pragma warning(disable: 4100) // unreferenced formal parameter
393#pragma warning(disable: 4127) // conditional expression is constant
394#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
395#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
396#pragma warning(disable: 4702) // unreachable code
397#pragma warning(disable: 4710) // 'function' : function not inlined
398
399// MSVC8 /analyze warnings
400#if _MSC_VER > 1310
401#pragma warning( disable : 6011 )
402#pragma warning( disable : 6219 )
403#pragma warning( disable : 6221 )
404#pragma warning( disable : 6255 )
405#pragma warning( disable : 6308 )
406#pragma warning( disable : 6320 )
407#pragma warning( disable : 6321 )
408#pragma warning( disable : 6387 )
409#endif // /analyze
410#endif
411
412#include <memory>
413
414#ifdef _MSC_VER
415#pragma warning(pop)
416#endif // _MSC_VER
417
418#endif //STL_USING_MEMORY
419
420
422// STL neccessary declaration for stack
424
425#ifdef STL_USING_STACK
426
427#ifdef _MSC_VER
428#pragma warning(push)
429#endif // _MSC_VER
430
431#ifdef _MSC_VER
432#include <yvals.h> // warning numbers get enabled in yvals.h
433#endif
434
435#ifdef _MSC_VER
436
437#pragma warning(disable: 4100) // unreferenced formal parameter
438#pragma warning(disable: 4127) // conditional expression is constant
439#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
440#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
441#pragma warning(disable: 4702) // unreachable code
442#pragma warning(disable: 4710) // 'function' : function not inlined
443
444// MSVC8 /analyze warnings
445#if _MSC_VER > 1310
446#pragma warning( disable : 6011 )
447#pragma warning( disable : 6219 )
448#pragma warning( disable : 6221 )
449#pragma warning( disable : 6255 )
450#pragma warning( disable : 6308 )
451#pragma warning( disable : 6320 )
452#pragma warning( disable : 6321 )
453#pragma warning( disable : 6387 )
454#endif // /analyze
455#endif
456
457#include <stack>
458
459#ifdef _MSC_VER
460#pragma warning(pop)
461#endif // _MSC_VER
462
463#endif // STL_USING_STACK
464
465
466#ifdef STL_USING_QUEUE
467
468#ifdef _MSC_VER
469#pragma warning(push)
470#endif // _MSC_VER
471
472#ifdef _MSC_VER
473#include <yvals.h> // warning numbers get enabled in yvals.h
474#endif
475
476#ifdef _MSC_VER
477
478#pragma warning(disable: 4100) // unreferenced formal parameter
479#pragma warning(disable: 4127) // conditional expression is constant
480#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
481#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
482#pragma warning(disable: 4702) // unreachable code
483#pragma warning(disable: 4710) // 'function' : function not inlined
484
485// MSVC8 /analyze warnings
486#if _MSC_VER > 1310
487#pragma warning( disable : 6011 )
488#pragma warning( disable : 6219 )
489#pragma warning( disable : 6221 )
490#pragma warning( disable : 6255 )
491#pragma warning( disable : 6308 )
492#pragma warning( disable : 6320 )
493#pragma warning( disable : 6321 )
494#pragma warning( disable : 6387 )
495#endif // /analyze
496#endif
497
498#include <queue>
499
500#ifdef _MSC_VER
501#pragma warning(pop)
502#endif // _MSC_VER
503
504#endif // STL_USING_STACK
505
507// STL neccessary declaration for algorithm
509
510#ifdef STL_USING_ALGORITHM
511
512#ifdef _MSC_VER
513#pragma warning(push)
514#endif // _MSC_VER
515
516#ifdef _MSC_VER
517#include <yvals.h> // warning numbers get enabled in yvals.h
518#endif
519
520#ifdef _MSC_VER
521
522#pragma warning(disable: 4100) // unreferenced formal parameter
523#pragma warning(disable: 4127) // conditional expression is constant
524#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
525#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
526#pragma warning(disable: 4702) // unreachable code
527#pragma warning(disable: 4710) // 'function' : function not inlined
528
529// MSVC8 /analyze warnings
530#if _MSC_VER > 1310
531#pragma warning( disable : 6011 )
532#pragma warning( disable : 6219 )
533#pragma warning( disable : 6221 )
534#pragma warning( disable : 6255 )
535#pragma warning( disable : 6308 )
536#pragma warning( disable : 6320 )
537#pragma warning( disable : 6321 )
538#pragma warning( disable : 6387 )
539#endif // /analyze
540#endif
541
542#include <algorithm>
543#include <iterator>
544
545// in STLPORT used with BCC 5.6 std::remove clashes with remove(char*) from iostream
546#ifdef __SGI_STL_PORT
552namespace std
553{
554 using _STLP_STD::remove;
555}
556#endif
557
558#ifdef _MSC_VER
559#pragma warning(pop)
560#endif // _MSC_VER
561
562#endif // STL_USING_ALGORITHM
563
565// STL neccessary declaration for functional
567
568#ifdef STL_USING_FUNCTIONAL
569
570#ifdef _MSC_VER
571#pragma warning(push)
572#endif // _MSC_VER
573
574#ifdef _MSC_VER
575#include <yvals.h> // warning numbers get enabled in yvals.h
576#endif
577
578#ifdef _MSC_VER
579
580#pragma warning(disable: 4100) // unreferenced formal parameter
581#pragma warning(disable: 4127) // conditional expression is constant
582#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
583#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
584#pragma warning(disable: 4702) // unreachable code
585#pragma warning(disable: 4710) // 'function' : function not inlined
586
587// MSVC8 /analyze warnings
588#if _MSC_VER > 1310
589#pragma warning( disable : 6011 )
590#pragma warning( disable : 6219 )
591#pragma warning( disable : 6221 )
592#pragma warning( disable : 6255 )
593#pragma warning( disable : 6308 )
594#pragma warning( disable : 6320 )
595#pragma warning( disable : 6321 )
596#pragma warning( disable : 6387 )
597#endif // /analyze
598#endif
599
600#include <functional>
601
602#ifdef _MSC_VER
603#pragma warning(pop)
604#endif // _MSC_VER
605
606#endif // STL_USING_FUNCTIONAL
607
608
610// STL neccessary declaration for utilities
612
613#ifdef STL_USING_UTILITY
614
615#ifdef _MSC_VER
616#pragma warning(push)
617#endif // _MSC_VER
618
619#ifdef _MSC_VER
620#include <yvals.h> // warning numbers get enabled in yvals.h
621#endif
622
623#ifdef _MSC_VER
624
625#pragma warning(disable: 4100) // unreferenced formal parameter
626#pragma warning(disable: 4127) // conditional expression is constant
627#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
628#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
629#pragma warning(disable: 4702) // unreachable code
630#pragma warning(disable: 4710) // 'function' : function not inlined
631
632// MSVC8 /analyze warnings
633#if _MSC_VER > 1310
634#pragma warning( disable : 6011 )
635#pragma warning( disable : 6219 )
636#pragma warning( disable : 6221 )
637#pragma warning( disable : 6255 )
638#pragma warning( disable : 6308 )
639#pragma warning( disable : 6320 )
640#pragma warning( disable : 6321 )
641#pragma warning( disable : 6387 )
642#endif // /analyze
643#endif
644
645#include <utility>
646
647#ifdef _MSC_VER
648#pragma warning(pop)
649#endif // _MSC_VER
650
651#endif // STL_USING_FUNCTIONAL
652
653#ifdef STL_USING_SET
654
655#ifdef _MSC_VER
656#pragma warning(push)
657#endif // _MSC_VER
658
659#ifdef _MSC_VER
660#include <yvals.h> // warning numbers get enabled in yvals.h
661#endif
662
663#ifdef _MSC_VER
664
665#pragma warning(disable: 4100) // unreferenced formal parameter
666#pragma warning(disable: 4127) // conditional expression is constant
667#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned mismatch
668#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
669#pragma warning(disable: 4702) // unreachable code
670#pragma warning(disable: 4710) // 'function' : function not inlined
671
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 <set>
686
687#ifdef _MSC_VER
688#pragma warning(pop)
689#endif // _MSC_VER
690
691#endif // STL_USING_SET
692
693#ifdef STL_USING_LIMITS
694
695#ifdef _MSC_VER
696#pragma warning(push)
697#include <yvals.h> // warning numbers get enabled in yvals.h
698
699#undef min // in windows header min & max are defined
700#undef max
701
702#endif // _MSC_VER
703
704#include <limits>
705
706#ifdef _MSC_VER
707#pragma warning(pop)
708#endif // _MSC_VER
709
710#endif // STL_USING_LIMITS
711
712
714// verify proper use of macros
716
717#if defined(STL_USING_MAP) || defined(STL_USING_VECTOR) || defined(STL_USING_LIST) || \
718 defined(STL_USING_STRING) || defined(STL_USING_STREAM) || defined STL_USING_FUNCTIONAL || \
719 defined(STL_USING_MEMORY) || defined(STL_USING_STACK) || defined STL_USING_ALGORITHM || \
720 defined(STL_USING_UTILITY) || defined(STL_USING_IOSTREAM) || defined(STL_USING_SET) || \
721 defined(STL_USING_LIMITS)
722
723#define _ODA_STL_
724
725#else
726#pragma message( "Warning: You included \"OdaSTL.H\" without using any STL features!" )
727
728#endif
729
730//#endif // _ODA_STLHELPER_INCLUDED_
731