From d63c0361a235c725a5f8c2ce2379935cd1a209b0 Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 16 Oct 1998 00:49:04 +0000 Subject: [PATCH] fg_stl_config.h -> compiler.h, fg_stl_config.h maintained for backwards compatibility. --- compiler.h | 218 ++++++++++++++++++++++++++++++++++++++++++++++++ fg_stl_config.h | 205 +-------------------------------------------- 2 files changed, 219 insertions(+), 204 deletions(-) create mode 100644 compiler.h diff --git a/compiler.h b/compiler.h new file mode 100644 index 000000000..744d08b1f --- /dev/null +++ b/compiler.h @@ -0,0 +1,218 @@ +/************************************************************************** + * compiler.h -- C++ Compiler Portability Macros + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id$ + * (Log is kept at end of this file) + **************************************************************************/ + +#ifndef _COMPILER_H +#define _COMPILER_H + +// What this file does. +// (1) Defines macros for some STL includes which may be affected +// by file name length limitations. +// (2) Defines macros for some features not supported by all C++ compilers. +// (3) Defines 'explicit' as a null macro if the compiler doesn't support +// the explicit keyword. +// (4) Defines 'typename' as a null macro if the compiler doesn't support +// the typename keyword. +// (5) Defines bool, true and false if the compiler doesn't do so. +// (6) Defines FG_EXPLICIT_FUNCTION_TMPL_ARGS if the compiler +// supports calling a function template by providing its template +// arguments explicitly. +// (7) Defines FG_NEED_AUTO_PTR if STL doesn't provide auto_ptr<>. +// (8) Defines FG_NO_ARROW_OPERATOR if the compiler is unable +// to support the -> operator for iterators. +// (9) Defines FG_USE_EXCEPTIONS if the compiler (in the current +// compilation mode) supports exceptions. +// (10) Define FG_NAMESPACES if the compiler supports namespaces. +// (11) Define FG_MATH_FN_IN_NAMESPACE_STD if C math functions are in +// and std:: +// (12) Define FG_HAVE_STD if ISO C++ Standard headers are supported. + +#ifdef __GNUC__ +# if __GNUC__ == 2 +# if __GNUC_MINOR__ < 8 + + // g++-2.7.x +# define STL_ALGORITHM +# define STL_FUNCTIONAL +# define STL_IOMANIP +# define STL_IOSTREAM +# define STL_STDEXCEPT +# define STL_STRING +# define STL_STRSTREAM + +# define FG_NEED_AUTO_PTR +# define FG_NO_DEFAULT_TEMPLATE_ARGS +# define FG_INCOMPLETE_FUNCTIONAL +# define FG_NO_ARROW_OPERATOR + +# elif __GNUC_MINOR__ >= 8 + + // g++-2.8.x and egcs-1.x +# define FG_EXPLICIT_FUNCTION_TMPL_ARGS +# define FG_NEED_AUTO_PTR +# define FG_MEMBER_TEMPLATES +# define FG_NAMESPACES +# define FG_MATH_FN_IN_NAMESPACE_STD +# define FG_HAVE_STD + +# define STL_ALGORITHM +# define STL_FUNCTIONAL +# define STL_IOMANIP +# define STL_IOSTREAM +# define STL_STDEXCEPT +# define STL_STRING +# define STL_STRSTREAM + +# endif +# else +# error Time to upgrade. GNU compilers < 2.7 not supported +# endif +#endif + +// Microsoft compilers. +#ifdef _MSC_VER +# if _MSC_VER < 1100 +# define FG_NEED_EXPLICIT +# endif +#endif + +#ifdef __BORLANDC__ + +# define STL_ALGORITHM +# define STL_FUNCTIONAL +# define STL_IOMANIP +# define STL_IOSTREAM +# define STL_STDEXCEPT +# define STL_STRING +# define STL_STRSTREAM + +# define FG_NO_DEFAULT_TEMPLATE_ARGS +# define FG_NAMESPACES +# define FG_INCOMPLETE_FUNCTIONAL + +#endif + +#ifdef FG_NEED_EXPLICIT +# define explicit +#endif + +#ifdef FG_NEED_TYPENAME +# define typename +#endif + +#ifdef FG_NEED_MUTABLE +# define mutable +#endif + +#ifdef FG_NEED_BOOL + typedef int bool; +# define true 1 +# define false 0 +#endif + +#ifdef FG_MATH_FN_IN_NAMESPACE_STD +# define FG_MATHFN_SCOPE(x) std::x +#elif defined(FG_NAMESPACES) +# define FG_MATHFN_SCOPE(x) ::x +#else +# define FG_MATHFN_SCOPE(x) x +#endif + +#ifdef FG_EXPLICIT_FUNCTION_TMPL_ARGS +# define FG_NULL_TMPL_ARGS <> +#else +# define FG_NULL_TMPL_ARGS +#endif + +// FG_NO_NAMESPACES is a hook so that users can disable namespaces +// without having to edit library headers. +#if defined(FG_NAMESPACES) && !defined(FG_NO_NAMESPACES) +# define FG_NAMESPACE(X) namespace X { +# define FG_NAMESPACE_END } +# define FG_USING_NAMESPACE(X) using namespace X +# else +# define FG_NAMESPACE(X) +# define FG_NAMESPACE_END +# define FG_USING_NAMESPACE(X) +#endif + +// Additional implementation from SGI STL 3.11 +// Adapter function objects: pointers to member functions +#ifdef FG_INCOMPLETE_FUNCTIONAL + +template +class const_mem_fun_ref_t +#ifndef __BORLANDC__ + : public unary_function<_Tp,_Ret> +#endif // __BORLANDC__ +{ +public: + explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {} + _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); } +private: + _Ret (_Tp::*_M_f)() const; +}; + +template +inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const) + { return const_mem_fun_ref_t<_Ret,_Tp>(__f); } + +#endif // FG_INCOMPLETE_FUNCTIONAL + +#endif // _COMPILER_H + +// $Log$ +// Revision 1.1 1998/10/16 00:49:04 curt +// fg_stl_config.h -> compiler.h, fg_stl_config.h maintained for backwards +// compatibility. +// +// Revision 1.3 1998/09/29 02:00:16 curt +// Start of some borland c support +// +// Revision 1.2 1998/09/10 19:07:04 curt +// /Simulator/Objects/fragment.hxx +// Nested fgFACE inside fgFRAGMENT since its not used anywhere else. +// +// ./Simulator/Objects/material.cxx +// ./Simulator/Objects/material.hxx +// Made fgMATERIAL and fgMATERIAL_MGR bona fide classes with private +// data members - that should keep the rabble happy :) +// +// ./Simulator/Scenery/tilemgr.cxx +// In viewable() delay evaluation of eye[0] and eye[1] in until they're +// actually needed. +// Change to fgTileMgrRender() to call fgMATERIAL_MGR::render_fragments() +// method. +// +// ./Include/fg_stl_config.h +// ./Include/auto_ptr.hxx +// Added support for g++ 2.7. +// Further changes to other files are forthcoming. +// +// Brief summary of changes required for g++ 2.7. +// operator->() not supported by iterators: use (*i).x instead of i->x +// default template arguments not supported, +// doesn't have mem_fun_ref() needed by callbacks. +// some std include files have different names. +// template member functions not supported. +// +// Revision 1.1 1998/08/30 14:13:49 curt +// Initial revision. Contributed by Bernie Bright. +// diff --git a/fg_stl_config.h b/fg_stl_config.h index d366bc59f..100160e69 100644 --- a/fg_stl_config.h +++ b/fg_stl_config.h @@ -1,204 +1 @@ -/************************************************************************** - * fg_stl_config.hxx -- STL Portability Macros - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - * (Log is kept at end of this file) - **************************************************************************/ - -#ifndef _FG_STL_CONFIG_H -#define _FG_STL_CONFIG_H - -// What this file does. -// (1) Defines macros for some STL includes which may be affected -// by file name length limitations. -// (2) Defines macros for some features not supported by all C++ compilers. -// (3) Defines 'explicit' as a null macro if the compiler doesn't support -// the explicit keyword. -// (4) Defines 'typename' as a null macro if the compiler doesn't support -// the typename keyword. -// (5) Defines bool, true and false if the compiler doesn't do so. -// (6) Defines _FG_EXPLICIT_FUNCTION_TMPL_ARGS if the compiler -// supports calling a function template by providing its template -// arguments explicitly. -// (7) Defines _FG_NEED_AUTO_PTR if STL doesn't provide auto_ptr<>. -// (8) Defines _FG_NO_ARROW_OPERATOR if the compiler is unable -// to support the -> operator for iterators. -// (9) Defines _FG_USE_EXCEPTIONS if the compiler (in the current -// compilation mode) supports exceptions. -// (10) Define _FG_NAMESPACES if the compiler supports namespaces. - -#ifdef __GNUC__ -# if __GNUC__ == 2 -# if __GNUC_MINOR__ < 8 - - // g++-2.7.x -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM - -# define _FG_NEED_AUTO_PTR -# define _FG_NO_DEFAULT_TEMPLATE_ARGS -# define _FG_INCOMPLETE_FUNCTIONAL -# define _FG_NO_ARROW_OPERATOR - -# elif __GNUC_MINOR__ >= 8 - - // g++-2.8.x and egcs-1.x -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM - -# define _FG_EXPLICIT_FUNCTION_TMPL_ARGS -# define _FG_NEED_AUTO_PTR -# define _FG_MEMBER_TEMPLATES -# define _FG_NAMESPACES - -# endif -# else -# error Time to upgrade. GNU compilers < 2.7 not supported -# endif -#endif - -// Microsoft compilers. -#ifdef _MSC_VER -# if _MSC_VER < 1100 -# define _FG_NEED_EXPLICIT -# endif -#endif - -#ifdef __BORLANDC__ - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM - -# define _FG_NO_DEFAULT_TEMPLATE_ARGS -# define _FG_NAMESPACES -# define _FG_INCOMPLETE_FUNCTIONAL - -#endif - -#ifdef _FG_NEED_EXPLICIT -# define explicit -#endif - -#ifdef _FG_NEED_TYPENAME -# define typename -#endif - -#ifdef _FG_NEED_MUTABLE -# define mutable -#endif - -#ifdef _FG_NEED_BOOL - typedef int bool; -# define true 1 -# define false 0 -#endif - -#ifdef _FG_EXPLICIT_FUNCTION_TMPL_ARGS -# define _FG_NULL_TMPL_ARGS <> -#else -# define _FG_NULL_TMPL_ARGS -#endif - -// _FG_NO_NAMESPACES is a hook so that users can disable namespaces -// without having to edit library headers. -#if defined(_FG_NAMESPACES) && !defined(_FG_NO_NAMESPACES) -# define _FG_NAMESPACE(X) namespace X { -# define _FG_NAMESPACE_END } -# define _FG_USING_NAMESPACE(X) using namespace X -# else -# define _FG_NAMESPACE(X) -# define _FG_NAMESPACE_END -# define _FG_USING_NAMESPACE(X) -#endif - -// Additional implementation from SGI STL 3.11 -// Adapter function objects: pointers to member functions -#ifdef _FG_INCOMPLETE_FUNCTIONAL - -template -class const_mem_fun_ref_t -#ifndef __BORLANDC__ - : public unary_function<_Tp,_Ret> -#endif // __BORLANDC__ -{ -public: - explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {} - _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); } -private: - _Ret (_Tp::*_M_f)() const; -}; - -template -inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const) - { return const_mem_fun_ref_t<_Ret,_Tp>(__f); } - -#endif // _FG_INCOMPLETE_FUNCTIONAL - -#endif // _FG_STL_CONFIG_H - -// $Log$ -// Revision 1.4 1998/10/13 00:09:55 curt -// More portability changes to help with windoze compilation problems. -// -// Revision 1.3 1998/09/29 02:00:16 curt -// Start of some borland c support -// -// Revision 1.2 1998/09/10 19:07:04 curt -// /Simulator/Objects/fragment.hxx -// Nested fgFACE inside fgFRAGMENT since its not used anywhere else. -// -// ./Simulator/Objects/material.cxx -// ./Simulator/Objects/material.hxx -// Made fgMATERIAL and fgMATERIAL_MGR bona fide classes with private -// data members - that should keep the rabble happy :) -// -// ./Simulator/Scenery/tilemgr.cxx -// In viewable() delay evaluation of eye[0] and eye[1] in until they're -// actually needed. -// Change to fgTileMgrRender() to call fgMATERIAL_MGR::render_fragments() -// method. -// -// ./Include/fg_stl_config.h -// ./Include/auto_ptr.hxx -// Added support for g++ 2.7. -// Further changes to other files are forthcoming. -// -// Brief summary of changes required for g++ 2.7. -// operator->() not supported by iterators: use (*i).x instead of i->x -// default template arguments not supported, -// doesn't have mem_fun_ref() needed by callbacks. -// some std include files have different names. -// template member functions not supported. -// -// Revision 1.1 1998/08/30 14:13:49 curt -// Initial revision. Contributed by Bernie Bright. -// +#include -- 2.39.5