X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=libs%2Fbytestreamutils.h;h=90a9048a61cd16b30a52ecdc3827b8567913686f;hp=aad7d7e42d06d1da833b044d4f232ebff78a1f3b;hb=9d606a0b3be053550486b8f1a00255e340ccf8a8;hpb=ecd25e066c1c9e23fbe68aafbc7c06649e1625e9 diff --git a/libs/bytestreamutils.h b/libs/bytestreamutils.h index aad7d7e4..90a9048a 100644 --- a/libs/bytestreamutils.h +++ b/libs/bytestreamutils.h @@ -1,34 +1,34 @@ /* -Copyright (C) 2001-2006, William Joseph. -All Rights Reserved. + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. -This file is part of GtkRadiant. + This file is part of GtkRadiant. -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -#if !defined(INCLUDED_BYTESTREAMUTILS_H) +#if !defined( INCLUDED_BYTESTREAMUTILS_H ) #define INCLUDED_BYTESTREAMUTILS_H -#if defined(__GNUC__) +#if defined( __GNUC__ ) -#define _ISOC9X_SOURCE 1 -#define _ISOC99_SOURCE 1 +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 -#define __USE_ISOC9X 1 -#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 +#define __USE_ISOC99 1 #include @@ -37,16 +37,16 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include // if C99 is unavailable, fall back to the types most likely to be the right sizes -#if !defined(int16_t) +#if !defined( int16_t ) typedef signed short int16_t; #endif -#if !defined(uint16_t) +#if !defined( uint16_t ) typedef unsigned short uint16_t; #endif -#if !defined(int32_t) +#if !defined( int32_t ) typedef signed int int32_t; #endif -#if !defined(uint32_t) +#if !defined( uint32_t ) typedef unsigned int uint32_t; #endif @@ -54,76 +54,102 @@ typedef unsigned int uint32_t; template -inline void istream_read_little_endian(InputStreamType& istream, Type& value) -{ - istream.read(reinterpret_cast(&value), sizeof(Type)); -#if defined(__BIG_ENDIAN__) - std::reverse(reinterpret_cast(&value), reinterpret_cast(&value) + sizeof(Type)); +inline void istream_read_little_endian( InputStreamType& istream, Type& value ){ + istream.read( reinterpret_cast( &value ), sizeof( Type ) ); +#if defined( __BIG_ENDIAN__ ) + std::reverse( reinterpret_cast( &value ), reinterpret_cast( &value ) + sizeof( Type ) ); #endif } template -inline void istream_read_big_endian(InputStreamType& istream, Type& value) -{ - istream.read(reinterpret_cast(&value), sizeof(Type)); -#if !defined(__BIG_ENDIAN__) - std::reverse(reinterpret_cast(&value), reinterpret_cast(&value) + sizeof(Type)); +inline void istream_read_big_endian( InputStreamType& istream, Type& value ){ + istream.read( reinterpret_cast( &value ), sizeof( Type ) ); +#if !defined( __BIG_ENDIAN__ ) + std::reverse( reinterpret_cast( &value ), reinterpret_cast( &value ) + sizeof( Type ) ); #endif } template -inline void istream_read_byte(InputStreamType& istream, typename InputStreamType::byte_type& b) -{ - istream.read(&b, 1); +inline void istream_read_byte( InputStreamType& istream, typename InputStreamType::byte_type& b ){ + istream.read( &b, 1 ); } template -inline int16_t istream_read_int16_le(InputStreamType& istream) -{ - int16_t value; - istream_read_little_endian(istream, value); - return value; +inline int16_t istream_read_int16_le( InputStreamType& istream ){ + int16_t value; + istream_read_little_endian( istream, value ); + return value; } template -inline uint16_t istream_read_uint16_le(InputStreamType& istream) -{ - uint16_t value; - istream_read_little_endian(istream, value); - return value; +inline int16_t istream_read_int16_be( InputStreamType& istream ){ + int16_t value; + istream_read_big_endian( istream, value ); + return value; } template -inline int32_t istream_read_int32_le(InputStreamType& istream) -{ - int32_t value; - istream_read_little_endian(istream, value); - return value; +inline uint16_t istream_read_uint16_le( InputStreamType& istream ){ + uint16_t value; + istream_read_little_endian( istream, value ); + return value; } template -inline uint32_t istream_read_uint32_le(InputStreamType& istream) -{ - uint32_t value; - istream_read_little_endian(istream, value); - return value; +inline uint16_t istream_read_uint16_be( InputStreamType& istream ){ + uint16_t value; + istream_read_big_endian( istream, value ); + return value; } template -inline float istream_read_float32_le(InputStreamType& istream) -{ - float value; - istream_read_little_endian(istream, value); - return value; +inline int32_t istream_read_int32_le( InputStreamType& istream ){ + int32_t value; + istream_read_little_endian( istream, value ); + return value; } template -inline typename InputStreamType::byte_type istream_read_byte(InputStreamType& istream) -{ - typename InputStreamType::byte_type b; - istream.read(&b, sizeof(typename InputStreamType::byte_type)); - return b; +inline int32_t istream_read_int32_be( InputStreamType& istream ){ + int32_t value; + istream_read_big_endian( istream, value ); + return value; +} + +template +inline uint32_t istream_read_uint32_le( InputStreamType& istream ){ + uint32_t value; + istream_read_little_endian( istream, value ); + return value; +} + +template +inline uint32_t istream_read_uint32_be( InputStreamType& istream ){ + uint32_t value; + istream_read_big_endian( istream, value ); + return value; +} + +template +inline float istream_read_float32_le( InputStreamType& istream ){ + float value; + istream_read_little_endian( istream, value ); + return value; +} + +template +inline float istream_read_float32_be( InputStreamType& istream ){ + float value; + istream_read_big_endian( istream, value ); + return value; +} + +template +inline typename InputStreamType::byte_type istream_read_byte( InputStreamType& istream ){ + typename InputStreamType::byte_type b; + istream.read( &b, sizeof( typename InputStreamType::byte_type ) ); + return b; } #endif