00001 // =============================================================================== 00002 // NVIDIA PHYSX SDK TRAINING PROGRAMS 00003 // USER STREAM 00004 // 00005 // Written by Bob Schade, 5-1-06 00006 // =============================================================================== 00007 00008 #ifndef STREAM_H 00009 #define STREAM_H 00010 00011 #include "NxStream.h" 00012 #include <stdio.h> 00013 00014 class UserStream : public NxStream 00015 { 00016 public: 00017 UserStream(const char* filename, bool load); 00018 virtual ~UserStream(); 00019 00020 virtual NxU8 readByte() const; 00021 virtual NxU16 readWord() const; 00022 virtual NxU32 readDword() const; 00023 virtual float readFloat() const; 00024 virtual double readDouble() const; 00025 virtual void readBuffer(void* buffer, NxU32 size) const; 00026 00027 virtual NxStream& storeByte(NxU8 b); 00028 virtual NxStream& storeWord(NxU16 w); 00029 virtual NxStream& storeDword(NxU32 d); 00030 virtual NxStream& storeFloat(NxReal f); 00031 virtual NxStream& storeDouble(NxF64 f); 00032 virtual NxStream& storeBuffer(const void* buffer, NxU32 size); 00033 00034 FILE* fp; 00035 }; 00036 00037 class MemoryWriteBuffer : public NxStream 00038 { 00039 public: 00040 MemoryWriteBuffer(); 00041 virtual ~MemoryWriteBuffer(); 00042 00043 virtual NxU8 readByte() const { NX_ASSERT(0); return 0; } 00044 virtual NxU16 readWord() const { NX_ASSERT(0); return 0; } 00045 virtual NxU32 readDword() const { NX_ASSERT(0); return 0; } 00046 virtual float readFloat() const { NX_ASSERT(0); return 0.0f;} 00047 virtual double readDouble() const { NX_ASSERT(0); return 0.0; } 00048 virtual void readBuffer(void* /*buffer*/, NxU32 /*size*/) const { NX_ASSERT(0); } 00049 00050 virtual NxStream& storeByte(NxU8 b); 00051 virtual NxStream& storeWord(NxU16 w); 00052 virtual NxStream& storeDword(NxU32 d); 00053 virtual NxStream& storeFloat(NxReal f); 00054 virtual NxStream& storeDouble(NxF64 f); 00055 virtual NxStream& storeBuffer(const void* buffer, NxU32 size); 00056 00057 NxU32 currentSize; 00058 NxU32 maxSize; 00059 NxU8* data; 00060 }; 00061 00062 class MemoryReadBuffer : public NxStream 00063 { 00064 public: 00065 MemoryReadBuffer(const NxU8* data); 00066 virtual ~MemoryReadBuffer(); 00067 00068 virtual NxU8 readByte() const; 00069 virtual NxU16 readWord() const; 00070 virtual NxU32 readDword() const; 00071 virtual float readFloat() const; 00072 virtual double readDouble() const; 00073 virtual void readBuffer(void* buffer, NxU32 size) const; 00074 00075 virtual NxStream& storeByte(NxU8 /*b*/) { NX_ASSERT(0); return *this; } 00076 virtual NxStream& storeWord(NxU16 /*w*/) { NX_ASSERT(0); return *this; } 00077 virtual NxStream& storeDword(NxU32 /*d*/) { NX_ASSERT(0); return *this; } 00078 virtual NxStream& storeFloat(NxReal /*f*/) { NX_ASSERT(0); return *this; } 00079 virtual NxStream& storeDouble(NxF64 /*f*/) { NX_ASSERT(0); return *this; } 00080 virtual NxStream& storeBuffer(const void* /*buffer*/, NxU32 /*size*/) { NX_ASSERT(0); return *this; } 00081 00082 mutable const NxU8* buffer; 00083 }; 00084 00085 #endif // STREAM_H