From d63c0361a235c725a5f8c2ce2379935cd1a209b0 Mon Sep 17 00:00:00 2001
From: curt <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 <cmath>
+//       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  <algorithm>
+#      define STL_FUNCTIONAL <functional>
+#      define STL_IOMANIP    <iomanip.h>
+#      define STL_IOSTREAM   <iostream.h>
+#      define STL_STDEXCEPT  <stdexcept>
+#      define STL_STRING     <string>
+#      define STL_STRSTREAM  <strstream.h>
+
+#      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  <algorithm>
+#      define STL_FUNCTIONAL <functional>
+#      define STL_IOMANIP    <iomanip>
+#      define STL_IOSTREAM   <iostream>
+#      define STL_STDEXCEPT  <stdexcept>
+#      define STL_STRING     <string>
+#      define STL_STRSTREAM  <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  <algorithm>
+#  define STL_FUNCTIONAL <functional>
+#  define STL_IOMANIP    <iomanip>
+#  define STL_IOSTREAM   <iostream>
+#  define STL_STDEXCEPT  <stdexcept>
+#  define STL_STRING     <string>
+#  define STL_STRSTREAM  <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 <functional> implementation from SGI STL 3.11
+// Adapter function objects: pointers to member functions
+#ifdef FG_INCOMPLETE_FUNCTIONAL
+
+template <class _Ret, class _Tp>
+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 <class _Ret, class _Tp>
+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,
+//   <functional> 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  <algorithm>
-#      define STL_FUNCTIONAL <functional>
-#      define STL_IOMANIP    <iomanip.h>
-#      define STL_IOSTREAM   <iostream.h>
-#      define STL_STDEXCEPT  <stdexcept>
-#      define STL_STRING     <string>
-#      define STL_STRSTREAM  <strstream.h>
-
-#      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  <algorithm>
-#      define STL_FUNCTIONAL <functional>
-#      define STL_IOMANIP    <iomanip>
-#      define STL_IOSTREAM   <iostream>
-#      define STL_STDEXCEPT  <stdexcept>
-#      define STL_STRING     <string>
-#      define STL_STRSTREAM  <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  <algorithm>
-#  define STL_FUNCTIONAL <functional>
-#  define STL_IOMANIP    <iomanip>
-#  define STL_IOSTREAM   <iostream>
-#  define STL_STDEXCEPT  <stdexcept>
-#  define STL_STRING     <string>
-#  define STL_STRSTREAM  <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 <functional> implementation from SGI STL 3.11
-// Adapter function objects: pointers to member functions
-#ifdef _FG_INCOMPLETE_FUNCTIONAL
-
-template <class _Ret, class _Tp>
-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 <class _Ret, class _Tp>
-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,
-//   <functional> 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 <Include/compiler.h>