X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2Flowlevel.hxx;h=2367d0d4a5ad4bcd60885c4720055fd52bc6982e;hb=c199c952186357d53657e85c0b02cfd3f0100d7e;hp=9b75d39f077a90f718b31fd0b44de36a1be5c897;hpb=0a7a815124d15f2f675497aaf60b19237757a00f;p=simgear.git diff --git a/simgear/io/lowlevel.hxx b/simgear/io/lowlevel.hxx index 9b75d39f..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 -#ifdef HAVE_CONFIG_H -# include -#endif - #include #include -#ifdef HAVE_STDINT_H -# include -#endif - -#include #include +#include + +#include // Note that output is written in little endian form (and converted as // necessary for big endian machines) @@ -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 sgVec2 var ) { - sgWriteFloat ( fd, 2, var ) ; +inline void sgWriteVec2 ( gzFile fd, const SGVec2f& var ) { + sgWriteFloat ( fd, 2, var.data() ) ; } -inline void sgReadVec3 ( gzFile fd, sgVec3 var ) { - sgReadFloat ( fd, 3, var ) ; +inline void sgReadVec3 ( gzFile fd, SGVec3f& var ) { + sgReadFloat ( fd, 3, var.data() ) ; } -inline void sgWriteVec3 ( gzFile fd, const sgVec3 var ) { - sgWriteFloat ( fd, 3, var ) ; +inline void sgWriteVec3 ( gzFile fd, const SGVec3f& var ) { + sgWriteFloat ( fd, 3, var.data() ) ; } -inline void sgReaddVec3 ( gzFile fd, sgdVec3 var ) { - sgReadDouble ( fd, 3, var ) ; +inline void sgReaddVec3 ( gzFile fd, SGVec3d& var ) { + sgReadDouble ( fd, 3, var.data() ) ; } -inline void sgWritedVec3 ( gzFile fd, const sgdVec3 var ) { - sgWriteDouble ( fd, 3, var ) ; +inline void sgWritedVec3 ( gzFile fd, const SGVec3d& var ) { + sgWriteDouble ( fd, 3, var.data() ) ; } -inline void sgReadVec4 ( gzFile fd, sgVec4 var ) { - sgReadFloat ( fd, 4, var ) ; +inline void sgReadVec4 ( gzFile fd, SGVec4f& var ) { + sgReadFloat ( fd, 4, var.data() ) ; } -inline void sgWriteVec4 ( gzFile fd, const sgVec4 var ) { - sgWriteFloat ( fd, 4, var ) ; +inline void sgWriteVec4 ( gzFile fd, const SGVec4f& var ) { + sgWriteFloat ( fd, 4, var.data() ) ; } -inline void sgReadMat4 ( gzFile fd, sgMat4 var ) { - sgReadFloat ( fd, 16, (float *)var ) ; +inline void sgReadMat4 ( gzFile fd, SGMatrixf& var ) { + sgReadFloat ( fd, 16, (float *)var.data() ) ; } -inline void sgWriteMat4 ( gzFile fd, const sgMat4 var ) { - sgWriteFloat ( fd, 16, (float *)var ) ; +inline void sgWriteMat4 ( gzFile fd, const SGMatrixf& var ) { + sgWriteFloat ( fd, 16, (float *)var.data() ) ; +} + +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 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_t *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