-/****************************************************************************
-** $Id: rs_math.cpp 1938 2004-12-09 23:09:53Z andrew $
-**
-** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
-**
-** This file is part of the qcadlib Library project.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid qcadlib Professional Edition licenses may use
-** this file in accordance with the qcadlib Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.ribbonsoft.com for further details.
-**
-** Contact info@ribbonsoft.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
+// rs_math.cpp
+//
+// Part of the Architektonas Project
+// Originally part of QCad Community Edition by Andrew Mustun
+// Extensively rewritten and refactored by James L. Hammons
+// (C) 2010 Underground Software
+//
+// JLH = James L. Hammons <jlhamm@acm.org>
+//
+// Who When What
+// --- ---------- -----------------------------------------------------------
+// JLH 06/01/2010 Added this text. :-)
+//
#include "rs_math.h"
+#include <assert.h> // For test()
+#include <math.h>
+#include <errno.h>
+#include "fparser.h"
#include "rs_debug.h"
/**
return res;
}
-/**
- * Evaluates a mathematical expression and returns the result.
- * If an error occured, ok will be set to false (if ok isn't NULL).
- */
-//double RS_Math::eval(const QString& expr, bool* ok);
-
/**
* Evaluates a mathematical expression and returns the result.
* If an error occured, ok will be set to false (if ok isn't NULL).
*/
double RS_Math::eval(const QString & expr, bool * ok)
{
-#ifndef RS_NO_FPARSER
if (expr.isEmpty())
{
if (ok != NULL)
if (ret >= 0)
{
- if (ok != NULL)
+ if (ok)
*ok = false;
return 0.0;
}
- if (ok != NULL)
+ if (ok)
*ok = true;
return fp.Eval(NULL);
-#else
- //std::cerr << "RS_Math::eval: No FParser support compiled in.\n";
- return expr.toDouble();
-#endif
}
/**
{
// Remove zeros at the end:
while (valStr.at(valStr.length() - 1) == '0')
- {
valStr.truncate(valStr.length() - 1);
- }
if (valStr.at(valStr.length() - 1) == '.')
- {
valStr.truncate(valStr.length() - 1);
- }
}
return valStr;