]> git.mxchange.org Git - simgear.git/blobdiff - simgear/math/interpolater.cxx
SG-ified logstream.
[simgear.git] / simgear / math / interpolater.cxx
index 732f248cb7126e4c1a94e51e1f9b7408afdb42a5..064443ad07233a9319017ded2a87863d7a580284 100644 (file)
@@ -6,28 +6,27 @@
 //
 // Copyright (C) 1998  Curtis L. Olson  - curt@me.umn.edu
 //
-// 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 library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library 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
+// This library 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.
+// Library 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.
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA  02111-1307, USA.
 //
 // $Id$
 
 
 #include <simgear/compiler.h>
 
-#ifdef __MWERKS__
 #include <stdlib.h> // for exit()
-#endif
 
 #include STL_STRING
 
 
 #include "interpolater.hxx"
 
+SG_USING_STD(string);
+
 
 // Constructor -- loads the interpolation table from the specified
 // file
-fgINTERPTABLE::fgINTERPTABLE( const string& file ) {
-    FG_LOG( FG_MATH, FG_INFO, "Initializing Interpolator for " << file );
+SGInterpTable::SGInterpTable( const string& file ) {
+    SG_LOG( SG_MATH, SG_INFO, "Initializing Interpolator for " << file );
 
     fg_gzifstream in( file );
-    if ( !in ) {
-        FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << file );
+    if ( !in.is_open() ) {
+        SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << file );
        exit(-1);
     }
 
@@ -54,9 +55,10 @@ fgINTERPTABLE::fgINTERPTABLE( const string& file ) {
     while ( in ) {
        if ( size < MAX_TABLE_SIZE ) {
            in >> table[size][0] >> table[size][1];
+           in >> skipws;
            size++;
        } else {
-            FG_LOG( FG_MATH, FG_ALERT,
+            SG_LOG( SG_MATH, SG_ALERT,
                    "fgInterpolateInit(): Exceed max table size = "
                    << MAX_TABLE_SIZE );
            exit(-1);
@@ -66,28 +68,31 @@ fgINTERPTABLE::fgINTERPTABLE( const string& file ) {
 
 
 // Given an x value, linearly interpolate the y value from the table
-double fgINTERPTABLE::interpolate(double x) {
+double SGInterpTable::interpolate(double x) {
     int i;
     double y;
 
     i = 0;
 
     while ( (x > table[i][0]) && (i < size) ) {
+       // cout << "  i = " << i << " table[i][0] = " << table[i][0] << endl;
+       // cout << "  size = " << size << endl;
        i++;
     }
 
     // printf ("i = %d ", i);
 
     if ( (i == 0) && (x < table[0][0]) ) {
-       FG_LOG( FG_MATH, FG_ALERT
-               "fgInterpolateInit(): lookup error, x to small = " << x );
-       return(0.0);
+       SG_LOG( SG_MATH, SG_DEBUG
+               "interpolate(): lookup error, x to small = " << x );
+       return table[0][1];
     }
 
-    if ( x > table[i][0] ) {
-       FG_LOG( FG_MATH, FG_ALERT, 
-               "fgInterpolateInit(): lookup error, x to big = " << x );
-       return(0.0);
+    // cout << " table[size-1][0] = " << table[size-1][0] << endl;
+    if ( x > table[size-1][0] ) {
+       SG_LOG( SG_MATH, SG_DEBUG, 
+               "interpolate(): lookup error, x to big = " << x );
+       return table[size-1][1];
     }
 
     // y = y1 + (y0 - y1)(x - x1) / (x0 - x1)
@@ -101,7 +106,7 @@ double fgINTERPTABLE::interpolate(double x) {
 
 
 // Destructor
-fgINTERPTABLE::~fgINTERPTABLE( void ) {
+SGInterpTable::~SGInterpTable( void ) {
 }