Date started: 07/01/01
Purpose: Encapsulates the JSBBase object
- ------------- Copyright (C) 2001 Jon S. Berndt (jsb@hal-pc.org) -------------
+ ------------- Copyright (C) 2001 Jon S. Berndt (jon@jsbsim.org) -------------
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
#define BASE
#include "FGJSBBase.h"
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
namespace JSBSim {
-static const char *IdSrc = "$Id$";
+static const char *IdSrc = "$Id: FGJSBBase.cpp,v 1.29 2010/03/18 13:19:21 jberndt Exp $";
static const char *IdHdr = ID_JSBBASE;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
char FGJSBBase::fgdef[6] = {'\0' };
#endif
-const double FGJSBBase::radtodeg = 57.29578;
-const double FGJSBBase::degtorad = 1.745329E-2;
+const double FGJSBBase::radtodeg = 57.295779513082320876798154814105;
+const double FGJSBBase::degtorad = 0.017453292519943295769236907684886;
const double FGJSBBase::hptoftlbssec = 550.0;
const double FGJSBBase::psftoinhg = 0.014138;
const double FGJSBBase::psftopa = 47.88;
short FGJSBBase::debug_lvl = 1;
+using std::cerr;
+using std::cout;
+using std::endl;
+
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGJSBBase::PutMessage(const Message& msg)
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGJSBBase::Message* FGJSBBase::ProcessMessage(void)
+void FGJSBBase::ProcessMessage(void)
+{
+ if (Messages.empty()) return;
+ localMsg = Messages.front();
+
+ while (Messages.size() > 0) {
+ switch (localMsg.type) {
+ case JSBSim::FGJSBBase::Message::eText:
+ cout << localMsg.messageId << ": " << localMsg.text << endl;
+ break;
+ case JSBSim::FGJSBBase::Message::eBool:
+ cout << localMsg.messageId << ": " << localMsg.text << " " << localMsg.bVal << endl;
+ break;
+ case JSBSim::FGJSBBase::Message::eInteger:
+ cout << localMsg.messageId << ": " << localMsg.text << " " << localMsg.iVal << endl;
+ break;
+ case JSBSim::FGJSBBase::Message::eDouble:
+ cout << localMsg.messageId << ": " << localMsg.text << " " << localMsg.dVal << endl;
+ break;
+ default:
+ cerr << "Unrecognized message type." << endl;
+ break;
+ }
+ Messages.pop();
+ if (Messages.size() > 0) localMsg = Messages.front();
+ else break;
+ }
+
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FGJSBBase::Message* FGJSBBase::ProcessNextMessage(void)
{
if (Messages.empty()) return NULL;
localMsg = Messages.front();
+
Messages.pop();
return &localMsg;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+string FGJSBBase::CreateIndexedPropertyName(const string& Property, int index)
+{
+ std::ostringstream buf;
+ buf << Property << '[' << index << ']';
+ return buf.str();
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGJSBBase::GaussianRandomNumber(void)
+{
+ static double V1, V2, S;
+ static int phase = 0;
+ double X;
+
+ if (phase == 0) {
+ V1 = V2 = S = X = 0.0;
+
+ do {
+ double U1 = (double)rand() / RAND_MAX;
+ double U2 = (double)rand() / RAND_MAX;
+
+ V1 = 2 * U1 - 1;
+ V2 = 2 * U2 - 1;
+ S = V1 * V1 + V2 * V2;
+ } while(S >= 1 || S == 0);
+
+ X = V1 * sqrt(-2 * log(S) / S);
+ } else
+ X = V2 * sqrt(-2 * log(S) / S);
+
+ phase = 1 - phase;
+
+ return X;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
} // namespace JSBSim