📄 dataoutputstream.cpp
字号:
/* * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or (at * your option) any later version. The full license is in the LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library 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 * OpenSceneGraph Public License for more details.*///// Copyright(c) 2008 Skew Matrix Software LLC.//#include "DataOutputStream.h"#include <osg/Endian>#include <osg/Notify>using namespace flt;char DataOutputStream::_null( 0 );DataOutputStream::DataOutputStream( std::streambuf* sb, bool validate ) : std::ostream( sb ), _validate( validate ){ _byteswap = osg::getCpuByteOrder() == osg::LittleEndian;}voidDataOutputStream::writeInt8( const int8 val ){ vwrite( (char*)&val, sizeof( int8 ) );}voidDataOutputStream::writeUInt8( const uint8 val ){ vwrite( (char*)&val, sizeof( uint8 ) );}voidDataOutputStream::writeInt16( const int16 val ){ int16 data=val; if (_byteswap && good()) osg::swapBytes2( (char*)&data ); vwrite( (char*)&data, sizeof( int16 ) );}voidDataOutputStream::writeUInt16( const uint16 val ){ uint16 data=val; if (_byteswap && good()) osg::swapBytes2( (char*)&data ); vwrite( (char*)&data, sizeof( uint16 ) );}voidDataOutputStream::writeInt32( const int32 val ){ int32 data=val; if (_byteswap && good()) osg::swapBytes4( (char*)&data ); vwrite( (char*)&data, sizeof( int32 ) );}voidDataOutputStream::writeUInt32( const uint32 val ){ uint32 data=val; if (_byteswap && good()) osg::swapBytes4( (char*)&data ); vwrite( (char*)&data, sizeof( uint32 ) );}voidDataOutputStream::writeFloat32( const float32 val ){ float32 data=val; if (_byteswap && good()) osg::swapBytes4( (char*)&data ); vwrite( (char*)&data, sizeof( float32 ) );}voidDataOutputStream::writeFloat64( const float64 val ){ float64 data=val; if (_byteswap && good()) osg::swapBytes8( (char*)&data ); vwrite( (char*)&data, sizeof( float64 ) );}voidDataOutputStream::writeString( const std::string& val, bool nullTerminate ){ vwrite( const_cast<char*>( val.c_str() ), val.size() ); if (nullTerminate) vwrite( &_null, 1 );}voidDataOutputStream::writeString( const std::string& val, int size, char fill ){ if (val.size() > ((unsigned int)size)-1) { vwrite( const_cast<char*>( val.c_str() ), size-1 ); vwrite( &fill, 1 ); } else { vwrite( const_cast<char*>( val.c_str() ), val.size() ); writeFill( size - val.size(), fill ); }}voidDataOutputStream::writeID( const std::string& val ){ unsigned int len = val.size(); vwrite( const_cast<char*>( val.c_str() ), len ); while (len++ < 8) vwrite( &_null, 1 );}voidDataOutputStream::writeVec2f( const osg::Vec2f& val ){ writeFloat32( val.x() ); writeFloat32( val.y() );}voidDataOutputStream::writeVec3f( const osg::Vec3f& val ){ writeFloat32( val.x() ); writeFloat32( val.y() ); writeFloat32( val.z() );}voidDataOutputStream::writeVec4f( const osg::Vec4f& val ){ writeFloat32( val.x() ); writeFloat32( val.y() ); writeFloat32( val.z() ); writeFloat32( val.w() );}voidDataOutputStream::writeVec3d( const osg::Vec3d& val ){ writeFloat64( val.x() ); writeFloat64( val.y() ); writeFloat64( val.z() );}voidDataOutputStream::writeFill( int sizeBytes, const char val ){ for (int i = 0; i < sizeBytes; ++i) { put(val); }}std::ostream&DataOutputStream::vwrite( char_type* str, std::streamsize count ){ if (_validate) return *this; else return write( str, count );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -