open_toontown_panda3d/panda/src/physx/physxFileStream.cxx

196 lines
5.6 KiB
C++

// Filename: physxFileStream.cxx
// Created by: enn0x (11Oct09)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#include "physxFileStream.h"
#include "stdio.h"
#include "virtualFileSystem.h"
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
PhysxFileStream::PhysxFileStream(const Filename &fn, bool load) : _fp(NULL), _vf(NULL), _in(NULL)
{
if (load) {
_vf = VirtualFileSystem::get_global_ptr()->get_file(fn);
_in = _vf->open_read_file(true);
}
else {
_fp = fopen(fn.c_str(), "wb");
}
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::Destructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
PhysxFileStream::~PhysxFileStream()
{
if (_fp) fclose(_fp);
if (_vf) _vf->close_read_file(_in);
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::readByte
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxU8 PhysxFileStream::readByte() const
{
NxU8 b;
_in->read((char *)&b, sizeof(NxU8));
NX_ASSERT(!(_in->bad()));
return b;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::readWord
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxU16 PhysxFileStream::readWord() const
{
NxU16 w;
_in->read((char *)&w, sizeof(NxU16));
NX_ASSERT(!(_in->bad()));
return w;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::readDword
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxU32 PhysxFileStream::readDword() const
{
NxU32 d;
_in->read((char *)&d, sizeof(NxU32));
NX_ASSERT(!(_in->bad()));
return d;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::readFloat
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
float PhysxFileStream::readFloat() const
{
NxReal f;
_in->read((char *)&f, sizeof(NxReal));
NX_ASSERT(!(_in->bad()));
return f;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::readDouble
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
double PhysxFileStream::readDouble() const
{
NxF64 f;
_in->read((char *)&f, sizeof(NxF64));
NX_ASSERT(!(_in->bad()));
return f;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::readBuffer
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
void PhysxFileStream::readBuffer(void *buffer, NxU32 size) const
{
_in->read((char *)buffer, size);
NX_ASSERT(!(_in->bad()));
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::storeByte
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxStream &PhysxFileStream::storeByte(NxU8 b)
{
size_t w = fwrite(&b, sizeof(NxU8), 1, _fp);
NX_ASSERT(w);
return *this;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::storeWord
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxStream &PhysxFileStream::storeWord(NxU16 w)
{
size_t ww = fwrite(&w, sizeof(NxU16), 1, _fp);
NX_ASSERT(ww);
return *this;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::storeDword
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxStream &PhysxFileStream::storeDword(NxU32 d)
{
size_t w = fwrite(&d, sizeof(NxU32), 1, _fp);
NX_ASSERT(w);
return *this;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::storeFloat
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxStream &PhysxFileStream::storeFloat(NxReal f)
{
size_t w = fwrite(&f, sizeof(NxReal), 1, _fp);
NX_ASSERT(w);
return *this;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::storeDouble
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxStream &PhysxFileStream::storeDouble(NxF64 f)
{
size_t w = fwrite(&f, sizeof(NxF64), 1, _fp);
NX_ASSERT(w);
return *this;
}
////////////////////////////////////////////////////////////////////
// Function: PhysxFileStream::storeBuffer
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
NxStream &PhysxFileStream::storeBuffer(const void *buffer, NxU32 size)
{
size_t w = fwrite(buffer, size, 1, _fp);
NX_ASSERT(w);
return *this;
}