diff --git a/NIF_IO.cpp b/NIF_IO.cpp index e98e8ddb5332c41d7467cfa81fba18cd18fda10e..31bae5476d54e263dceb5e9eb76f1670d18476bf 100644 --- a/NIF_IO.cpp +++ b/NIF_IO.cpp @@ -123,13 +123,6 @@ ostream & operator<<(ostream & lh, usVector3 const & rh) { /** * Read utility functions */ -int ReadUInt( istream& in ){ - - int tmp; - in.read( (char*)&tmp, 4 ); - return tmp; -} - uint ReadUInt( istream& in ){ uint tmp; @@ -221,11 +214,6 @@ void WriteUInt( uint val, ostream& out ){ out.write( (char*)&val, 4 ); } -void WriteInt( int val, ostream& out ){ - - out.write( (char*)&val, 4 ); -} - void WriteUShort( ushort val, ostream& out ){ out.write( (char*)&val, 2 ); @@ -347,42 +335,41 @@ ostream & operator<<(ostream & lh, Bin const & rh) { //--Overloaded versions of Read/Write functions ReadData/WriteData -void NifStream( int & val, istream& in ) { val = ReadInt( in ); }; -void NifStream( uint & val, istream& in ) { val = ReadUInt( in ); }; -void NifStream( ushort & val, istream& in ) { val = ReadUShort( in ); }; -void NifStream( short & val, istream& in ) { val = ReadShort( in ); }; -void NifStream( byte & val, istream& in ) { val = ReadByte( in ); }; -void NifStream( float & val, istream& in ) { val = ReadFloat( in ); }; -void NifStream( string & val, istream& in ) { val = ReadString( in ); }; -void NifStream( KeyType & val, istream& in ) { val = KeyType(ReadUInt( in )); }; +void NifStream( uint & val, istream& in, uint version ) { val = ReadUInt( in ); }; +void NifStream( ushort & val, istream& in, uint version ) { val = ReadUShort( in ); }; +void NifStream( short & val, istream& in, uint version ) { val = ReadShort( in ); }; +void NifStream( byte & val, istream& in, uint version ) { val = ReadByte( in ); }; +void NifStream( float & val, istream& in, uint version ) { val = ReadFloat( in ); }; +void NifStream( string & val, istream& in, uint version ) { val = ReadString( in ); }; +void NifStream( KeyType & val, istream& in, uint version ) { val = KeyType(ReadUInt( in )); }; -void NifStream( Vector3 & val, istream& in ) { +void NifStream( Vector3 & val, istream& in, uint version ) { val.x = ReadFloat( in ); val.y = ReadFloat( in ); val.z = ReadFloat( in ); }; -void NifStream( Quaternion & val, istream& in ) { +void NifStream( Quaternion & val, istream& in, uint version ) { val.w = ReadFloat( in ); val.x = ReadFloat( in ); val.y = ReadFloat( in ); val.z = ReadFloat( in ); }; -void NifStream( Color4 & val, istream& in ) { +void NifStream( Color4 & val, istream& in, uint version ) { val.r = ReadFloat( in ); val.g = ReadFloat( in ); val.b = ReadFloat( in ); val.a = ReadFloat( in ); }; -void NifStream( Triangle & val, istream& in ) { +void NifStream( Triangle & val, istream& in, uint version ) { val.v1 = ReadUShort( in ); val.v2 = ReadUShort( in ); val.v3 = ReadUShort( in ); }; -void NifStream( LODRange & val, istream& in ) { +void NifStream( LODRange & val, istream& in, uint version ) { val.near = ReadFloat( in ); val.far = ReadFloat( in ); }; @@ -427,37 +414,36 @@ void NifStream( TexDesc & val, istream& in, uint version ) { -void NifStream( uint const & val, ostream& out ) { WriteUInt( val, out ); } -void NifStream( int const & val, ostream& out ) { WriteInt( val, out ); } -void NifStream( ushort const & val, ostream& out ) { WriteUShort( val, out ); } -void NifStream( short const & val, ostream& out ) { WriteShort( val, out ); } -void NifStream( byte const & val, ostream& out ) { WriteByte( val, out ); } -void NifStream( float const & val, ostream& out ) { WriteFloat( val, out ); } -void NifStream( string const & val, ostream& out ) { WriteString( val, out ); } -void NifStream( KeyType const & val, ostream& out ) { WriteUInt( val, out ); } -void NifStream( Vector3 const & val, ostream& out ) { +void NifStream( uint const & val, ostream& out, uint version ) { WriteUInt( val, out ); } +void NifStream( ushort const & val, ostream& out, uint version ) { WriteUShort( val, out ); } +void NifStream( short const & val, ostream& out, uint version ) { WriteShort( val, out ); } +void NifStream( byte const & val, ostream& out, uint version ) { WriteByte( val, out ); } +void NifStream( float const & val, ostream& out, uint version ) { WriteFloat( val, out ); } +void NifStream( string const & val, ostream& out, uint version ) { WriteString( val, out ); } +void NifStream( KeyType const & val, ostream& out, uint version ) { WriteUInt( val, out ); } +void NifStream( Vector3 const & val, ostream& out, uint version ) { WriteFloat( val.x, out ); WriteFloat( val.y, out ); WriteFloat( val.z, out ); }; -void NifStream( Quaternion const & val, ostream& out ) { +void NifStream( Quaternion const & val, ostream& out, uint version ) { WriteFloat( val.w, out ); WriteFloat( val.x, out ); WriteFloat( val.y, out ); WriteFloat( val.z, out ); }; -void NifStream( Color4 const & val, ostream& out ) { +void NifStream( Color4 const & val, ostream& out, uint version ) { WriteFloat( val.r, out ); WriteFloat( val.g, out ); WriteFloat( val.b, out ); WriteFloat( val.a, out ); }; -void NifStream( Triangle const & val, ostream& out ) { +void NifStream( Triangle const & val, ostream& out, uint version ) { WriteUShort( val.v1, out ); WriteUShort( val.v2, out ); WriteUShort( val.v3, out ); }; -void NifStream( LODRange const & val, ostream& out ) { +void NifStream( LODRange const & val, ostream& out, uint version ) { WriteFloat( val.near, out ); WriteFloat( val.far, out ); }; diff --git a/NIF_IO.h b/NIF_IO.h index 3cfaaeb617f889fc1012c6fa26ab21da2355b52e..7d5caeff3cef2155b9e96fdad2f229452dd4e011 100644 --- a/NIF_IO.h +++ b/NIF_IO.h @@ -151,7 +151,6 @@ ostream & operator<<(ostream & lh, usVector3 const & rh); * Read utility functions */ uint ReadUInt( istream& in ); -uint ReadInt( istream& in ); ushort ReadUShort( istream& in ); short ReadShort( istream& in ); byte ReadByte( istream& in ); @@ -164,20 +163,19 @@ void ReadFVector3( fVector3& fvec, istream& in ); void ReadFVector4( fVector4& fvec, istream& in ); //Read -void NifStream( uint & val, istream& in ); -void NifStream( int & val, istream& in ); -void NifStream( ushort & val, istream& in ); -void NifStream( short & val, istream& in ); -void NifStream( byte & val, istream& in ); -void NifStream( float & val, istream& in ); -void NifStream( string & val, istream& in ); -void NifStream( Vector3 & val, istream& in ); -void NifStream( Quaternion & val, istream& in ); -void NifStream( KeyType & val, istream& in ); -void NifStream( Color4 & val, istream& in ); -void NifStream( Triangle & val, istream& in ); -void NifStream( TexDesc & val, istream& in, uint version ); -void NifStream( LODRange & val, istream& in ); +void NifStream( uint & val, istream& in, uint version = 0 ); +void NifStream( ushort & val, istream& in, uint version = 0 ); +void NifStream( short & val, istream& in, uint version = 0 ); +void NifStream( byte & val, istream& in, uint version = 0 ); +void NifStream( float & val, istream& in, uint version = 0 ); +void NifStream( string & val, istream& in, uint version = 0 ); +void NifStream( Vector3 & val, istream& in, uint version = 0 ); +void NifStream( Quaternion & val, istream& in, uint version = 0 ); +void NifStream( KeyType & val, istream& in, uint version = 0 ); +void NifStream( Color4 & val, istream& in, uint version = 0 ); +void NifStream( Triangle & val, istream& in, uint version = 0 ); +void NifStream( TexDesc & val, istream& in, uint version ); // version is significant +void NifStream( LODRange & val, istream& in, uint version = 0 ); template <class T> void NifStream( Key<T> & key, istream& file, KeyType type ) { @@ -222,8 +220,6 @@ void NifStream( vector<T> & val, istream& file ) { */ void WriteUInt( uint val, ostream& out ); -void WriteInt( uint val, ostream& out ); - void WriteUShort( ushort val, ostream& out ); void WriteShort( short val, ostream& out ); @@ -247,20 +243,19 @@ void WriteFVector4( fVector4 const & fvec, ostream& out ); void WriteBlockName( const char* name, uint nameLength, ostream& out ); //Write -void NifStream( uint const & val, ostream& out ); -void NifStream( int const & val, ostream& out ); -void NifStream( ushort const & val, ostream& out ); -void NifStream( short const & val, ostream& out ); -void NifStream( byte const & val, ostream& out ); -void NifStream( float const & val, ostream& out ); -void NifStream( string const & val, ostream& out ); -void NifStream( Vector3 const & val, ostream& out ); -void NifStream( Quaternion const & val, ostream& out ); -void NifStream( KeyType const & val, ostream& out ); -void NifStream( Color4 const & val, ostream& out ); -void NifStream( Triangle const & val, ostream& out ); -void NifStream( TexDesc const & val, ostream& out, uint version ); -void NifStream( LODRange const & val, ostream& out ); +void NifStream( uint const & val, ostream& out, uint version = 0 ); +void NifStream( ushort const & val, ostream& out, uint version = 0 ); +void NifStream( short const & val, ostream& out, uint version = 0 ); +void NifStream( byte const & val, ostream& out, uint version = 0 ); +void NifStream( float const & val, ostream& out, uint version = 0 ); +void NifStream( string const & val, ostream& out, uint version = 0 ); +void NifStream( Vector3 const & val, ostream& out, uint version = 0 ); +void NifStream( Quaternion const & val, ostream& out, uint version = 0 ); +void NifStream( KeyType const & val, ostream& out, uint version = 0 ); +void NifStream( Color4 const & val, ostream& out, uint version = 0 ); +void NifStream( Triangle const & val, ostream& out, uint version = 0 ); +void NifStream( TexDesc const & val, ostream& out, uint version ); // version is significant +void NifStream( LODRange const & val, ostream& out, uint version = 0 ); template <class T> void NifStream( Key<T> const & key, ostream& file, KeyType type ) { diff --git a/niflib.vcproj b/niflib.vcproj index 2ebb506403caafd1b516930a2b141385763d21ff..88faa196a67df2e6001076184459f22821921696 100644 --- a/niflib.vcproj +++ b/niflib.vcproj @@ -149,6 +149,9 @@ <File RelativePath=".\niflib.cpp"> </File> + <File + RelativePath=".\xml_extract.cpp"> + </File> </Filter> <Filter Name="Header Files" @@ -169,6 +172,9 @@ <File RelativePath=".\niflib.h"> </File> + <File + RelativePath=".\xml_extract.h"> + </File> </Filter> <Filter Name="Resource Files"