X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2Flowlevel.hxx;h=2367d0d4a5ad4bcd60885c4720055fd52bc6982e;hb=598b64fa9569c16878c904e344e2e2775e210c42;hp=fc8398f54d2b74d38b689cbad85dee8b8e49055f;hpb=7fc8c026884b2d0a1b683765c089a9bef5ac47c8;p=simgear.git diff --git a/simgear/io/lowlevel.hxx b/simgear/io/lowlevel.hxx index fc8398f5..2367d0d4 100644 --- a/simgear/io/lowlevel.hxx +++ b/simgear/io/lowlevel.hxx @@ -18,7 +18,7 @@ // // 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. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ // @@ -27,19 +27,13 @@ #ifndef _SG_LOWLEVEL_HXX #define _SG_LOWLEVEL_HXX - #include #include -#include +#include +#include -#ifdef _MSC_VER -typedef __int64 int64; -typedef __int64 uint64; -#else -typedef long long int64; -typedef unsigned long long uint64; -#endif +#include // Note that output is written in little endian form (and converted as // necessary for big endian machines) @@ -54,10 +48,10 @@ void sgReadUInt ( gzFile fd, unsigned int *var ) ; void sgWriteUInt ( gzFile fd, const unsigned int var ) ; void sgReadInt ( gzFile fd, int *var ) ; void sgWriteInt ( gzFile fd, const int var ) ; -void sgReadLong ( gzFile fd, long int *var ) ; -void sgWriteLong ( gzFile fd, const long int var ) ; -void sgReadLongLong ( gzFile fd, int64 *var ) ; -void sgWriteLongLong ( gzFile fd, const int64 var ) ; +void sgReadLong ( gzFile fd, int32_t *var ) ; +void sgWriteLong ( gzFile fd, const int32_t var ) ; +void sgReadLongLong ( gzFile fd, int64_t *var ) ; +void sgWriteLongLong ( gzFile fd, const int64_t var ) ; void sgReadUShort ( gzFile fd, unsigned short *var ) ; void sgWriteUShort ( gzFile fd, const unsigned short var ) ; void sgReadShort ( gzFile fd, short *var ) ; @@ -81,39 +75,50 @@ void sgWriteBytes ( gzFile fd, const unsigned int n, const void *var ) ; void sgReadString ( gzFile fd, char **var ) ; void sgWriteString ( gzFile fd, const char *var ) ; -inline void sgReadVec2 ( gzFile fd, sgVec2 var ) { - sgReadFloat ( fd, 2, var ) ; +inline void sgReadVec2 ( gzFile fd, SGVec2f& var ) { + sgReadFloat ( fd, 2, var.data() ) ; +} +inline void sgWriteVec2 ( gzFile fd, const SGVec2f& var ) { + sgWriteFloat ( fd, 2, var.data() ) ; +} + +inline void sgReadVec3 ( gzFile fd, SGVec3f& var ) { + sgReadFloat ( fd, 3, var.data() ) ; } -inline void sgWriteVec2 ( gzFile fd, const sgVec2 var ) { - sgWriteFloat ( fd, 2, var ) ; +inline void sgWriteVec3 ( gzFile fd, const SGVec3f& var ) { + sgWriteFloat ( fd, 3, var.data() ) ; } -inline void sgReadVec3 ( gzFile fd, sgVec3 var ) { - sgReadFloat ( fd, 3, var ) ; +inline void sgReaddVec3 ( gzFile fd, SGVec3d& var ) { + sgReadDouble ( fd, 3, var.data() ) ; } -inline void sgWriteVec3 ( gzFile fd, const sgVec3 var ) { - sgWriteFloat ( fd, 3, var ) ; +inline void sgWritedVec3 ( gzFile fd, const SGVec3d& var ) { + sgWriteDouble ( fd, 3, var.data() ) ; } -inline void sgReaddVec3 ( gzFile fd, sgdVec3 var ) { - sgReadDouble ( fd, 3, var ) ; +inline void sgReadVec4 ( gzFile fd, SGVec4f& var ) { + sgReadFloat ( fd, 4, var.data() ) ; } -inline void sgWritedVec3 ( gzFile fd, const sgdVec3 var ) { - sgWriteDouble ( fd, 3, var ) ; +inline void sgWriteVec4 ( gzFile fd, const SGVec4f& var ) { + sgWriteFloat ( fd, 4, var.data() ) ; } -inline void sgReadVec4 ( gzFile fd, sgVec4 var ) { - sgReadFloat ( fd, 4, var ) ; +inline void sgReadMat4 ( gzFile fd, SGMatrixf& var ) { + sgReadFloat ( fd, 16, (float *)var.data() ) ; } -inline void sgWriteVec4 ( gzFile fd, const sgVec4 var ) { - sgWriteFloat ( fd, 4, var ) ; +inline void sgWriteMat4 ( gzFile fd, const SGMatrixf& var ) { + sgWriteFloat ( fd, 16, (float *)var.data() ) ; } -inline void sgReadMat4 ( gzFile fd, sgMat4 var ) { - sgReadFloat ( fd, 16, (float *)var ) ; +inline void sgReadGeod ( gzFile fd, SGGeod& var ) { + double data[3]; + sgReadDouble ( fd, 3, data ); + var = SGGeod::fromDegM( data[0], data[1], data[2] ); } -inline void sgWriteMat4 ( gzFile fd, const sgMat4 var ) { - sgWriteFloat ( fd, 16, (float *)var ) ; +inline void sgWriteGeod ( gzFile fd, const SGGeod& var ) { + sgWriteDouble( fd, var.getLongitudeDeg() ); + sgWriteDouble( fd, var.getLatitudeDeg() ); + sgWriteDouble( fd, var.getElevationM() ); } void sgClearReadError(); @@ -121,52 +126,4 @@ void sgClearWriteError(); int sgReadError(); int sgWriteError(); -inline bool sgIsLittleEndian() { - static const int sgEndianTest = 1; - return (*((char *) &sgEndianTest ) != 0); -} - -inline bool sgIsBigEndian() { - static const int sgEndianTest = 1; - return (*((char *) &sgEndianTest ) == 0); -} - -inline void sgEndianSwap(unsigned short *x) { - *x = - (( *x >> 8 ) & 0x00FF ) | - (( *x << 8 ) & 0xFF00 ) ; -} - -inline void sgEndianSwap(unsigned int *x) { - *x = - (( *x >> 24 ) & 0x000000FF ) | - (( *x >> 8 ) & 0x0000FF00 ) | - (( *x << 8 ) & 0x00FF0000 ) | - (( *x << 24 ) & 0xFF000000 ) ; -} - -inline void sgEndianSwap(uint64 *x) { -#ifndef _MSC_VER - *x = - (( *x >> 56 ) & 0x00000000000000FFULL ) | - (( *x >> 40 ) & 0x000000000000FF00ULL ) | - (( *x >> 24 ) & 0x0000000000FF0000ULL ) | - (( *x >> 8 ) & 0x00000000FF000000ULL ) | - (( *x << 8 ) & 0x000000FF00000000ULL ) | - (( *x << 24 ) & 0x0000FF0000000000ULL ) | - (( *x << 40 ) & 0x00FF000000000000ULL ) | - (( *x << 56 ) & 0xFF00000000000000ULL ) ; -#else - *x = - (( *x >> 56 ) & 0x00000000000000FF ) | - (( *x >> 40 ) & 0x000000000000FF00 ) | - (( *x >> 24 ) & 0x0000000000FF0000 ) | - (( *x >> 8 ) & 0x00000000FF000000 ) | - (( *x << 8 ) & 0x000000FF00000000 ) | - (( *x << 24 ) & 0x0000FF0000000000 ) | - (( *x << 40 ) & 0x00FF000000000000 ) | - (( *x << 56 ) & 0xFF00000000000000 ) ; -#endif -} - #endif // _SG_LOWLEVEL_HXX