#include <vector>
-#include <plib/sg.h>
#include <simgear/compiler.h>
+#include <simgear/props/props.hxx>
#include <simgear/math/SGMath.hxx>
#include "tiny_xdr.hxx"
// angular acceleration wrt the earth centered frame measured in
// the earth centered frame
xdr_data_t angularAccel[3];
+ // Padding. The alignment is 8 bytes on x86_64 because there are
+ // 8-byte types in the message, so the size should be explicitly
+ // rounded out to a multiple of 8. Of course, it's a bad idea to
+ // put a C struct directly on the wire, but that's a fight for
+ // another day...
+ xdr_data_t pad;
};
-// Property message
-struct T_PropertyMsg {
- xdr_data_t id;
- xdr_data_t value;
-};
-
-struct FGFloatPropertyData {
+struct FGPropertyData {
unsigned id;
- float value;
+
+ // While the type isn't transmitted, it is needed for the destructor
+ simgear::props::Type type;
+ union {
+ int int_value;
+ float float_value;
+ char* string_value;
+ };
+
+ ~FGPropertyData() {
+ if ((type == simgear::props::STRING) || (type == simgear::props::UNSPECIFIED))
+ {
+ delete [] string_value;
+ }
+ }
};
+
+
// Position message
struct FGExternalMotionData {
// simulation time when this packet was generated
SGVec3f angularAccel;
// The set of properties recieved for this timeslot
- std::vector<FGFloatPropertyData> properties;
+ std::vector<FGPropertyData*> properties;
};
#endif