source: GTP/trunk/App/Games/Jungle_Rumble/src/Stream.cpp @ 1378

Revision 1378, 4.1 KB checked in by giegl, 18 years ago (diff)

GTPD - Jungle Rumble - integrate into GTP SVN structure

Line 
1#include "dxstdafx.h"
2#include <stdio.h>
3#include "NxPhysics.h"
4#include "Stream.h"
5
6UserStream::UserStream(const char* filename, bool load) : fp(NULL)
7        {
8        fp = fopen(filename, load ? "rb" : "wb");
9        }
10
11UserStream::~UserStream()
12        {
13        if(fp)  fclose(fp);
14        }
15
16// Loading API
17NxU8 UserStream::readByte() const
18        {
19        NxU8 b;
20        size_t r = fread(&b, sizeof(NxU8), 1, fp);
21        NX_ASSERT(r);
22        return b;
23        }
24
25NxU16 UserStream::readWord() const
26        {
27        NxU16 w;
28        size_t r = fread(&w, sizeof(NxU16), 1, fp);
29        NX_ASSERT(r);
30        return w;
31        }
32
33NxU32 UserStream::readDword() const
34        {
35        NxU32 d;
36        size_t r = fread(&d, sizeof(NxU32), 1, fp);
37        NX_ASSERT(r);
38        return d;
39        }
40
41float UserStream::readFloat() const
42        {
43        NxReal f;
44        size_t r = fread(&f, sizeof(NxReal), 1, fp);
45        NX_ASSERT(r);
46        return f;
47        }
48
49double UserStream::readDouble() const
50        {
51        NxF64 f;
52        size_t r = fread(&f, sizeof(NxF64), 1, fp);
53        NX_ASSERT(r);
54        return f;
55        }
56
57void UserStream::readBuffer(void* buffer, NxU32 size)   const
58        {
59        size_t w = fread(buffer, size, 1, fp);
60        NX_ASSERT(w);
61        }
62
63// Saving API
64NxStream& UserStream::storeByte(NxU8 b)
65        {
66        size_t w = fwrite(&b, sizeof(NxU8), 1, fp);
67        NX_ASSERT(w);
68        return *this;
69        }
70
71NxStream& UserStream::storeWord(NxU16 w)
72        {
73        size_t ww = fwrite(&w, sizeof(NxU16), 1, fp);
74        NX_ASSERT(ww);
75        return *this;
76        }
77
78NxStream& UserStream::storeDword(NxU32 d)
79        {
80        size_t w = fwrite(&d, sizeof(NxU32), 1, fp);
81        NX_ASSERT(w);
82        return *this;
83        }
84
85NxStream& UserStream::storeFloat(NxReal f)
86        {
87        size_t w = fwrite(&f, sizeof(NxReal), 1, fp);
88        NX_ASSERT(w);
89        return *this;
90        }
91
92NxStream& UserStream::storeDouble(NxF64 f)
93        {
94        size_t w = fwrite(&f, sizeof(NxF64), 1, fp);
95        NX_ASSERT(w);
96        return *this;
97        }
98
99NxStream& UserStream::storeBuffer(const void* buffer, NxU32 size)
100        {
101        size_t w = fwrite(buffer, size, 1, fp);
102        NX_ASSERT(w);
103        return *this;
104        }
105
106
107
108
109MemoryWriteBuffer::MemoryWriteBuffer() : currentSize(0), maxSize(0), data(NULL)
110        {
111        }
112
113MemoryWriteBuffer::~MemoryWriteBuffer()
114        {
115                if(data!=NULL)
116                {
117                        delete[] data;
118                        data=NULL;
119                }
120        }
121
122void MemoryWriteBuffer::clear()
123        {
124        currentSize = 0;
125        }
126
127NxStream& MemoryWriteBuffer::storeByte(NxU8 b)
128        {
129        storeBuffer(&b, sizeof(NxU8));
130        return *this;
131        }
132NxStream& MemoryWriteBuffer::storeWord(NxU16 w)
133        {
134        storeBuffer(&w, sizeof(NxU16));
135        return *this;
136        }
137NxStream& MemoryWriteBuffer::storeDword(NxU32 d)
138        {
139        storeBuffer(&d, sizeof(NxU32));
140        return *this;
141        }
142NxStream& MemoryWriteBuffer::storeFloat(NxReal f)
143        {
144        storeBuffer(&f, sizeof(NxReal));
145        return *this;
146        }
147NxStream& MemoryWriteBuffer::storeDouble(NxF64 f)
148        {
149        storeBuffer(&f, sizeof(NxF64));
150        return *this;
151        }
152NxStream& MemoryWriteBuffer::storeBuffer(const void* buffer, NxU32 size)
153        {
154        NxU32 expectedSize = currentSize + size;
155        if(expectedSize > maxSize)
156                {
157                maxSize = expectedSize + 4096;
158
159                NxU8* newData = new NxU8[maxSize];
160                NX_ASSERT(newData!=NULL);
161
162                if(data)
163                        {
164                        memcpy(newData, data, currentSize);
165                        delete[] data;
166                        }
167                data = newData;
168                }
169        memcpy(data+currentSize, buffer, size);
170        currentSize += size;
171        return *this;
172        }
173
174
175MemoryReadBuffer::MemoryReadBuffer(const NxU8* data) : buffer(data)
176        {
177        }
178
179MemoryReadBuffer::~MemoryReadBuffer()
180        {
181        // We don't own the data => no delete
182        }
183
184NxU8 MemoryReadBuffer::readByte() const
185        {
186        NxU8 b;
187        memcpy(&b, buffer, sizeof(NxU8));
188        buffer += sizeof(NxU8);
189        return b;
190        }
191
192NxU16 MemoryReadBuffer::readWord() const
193        {
194        NxU16 w;
195        memcpy(&w, buffer, sizeof(NxU16));
196        buffer += sizeof(NxU16);
197        return w;
198        }
199
200NxU32 MemoryReadBuffer::readDword() const
201        {
202        NxU32 d;
203        memcpy(&d, buffer, sizeof(NxU32));
204        buffer += sizeof(NxU32);
205        return d;
206        }
207
208float MemoryReadBuffer::readFloat() const
209        {
210        float f;
211        memcpy(&f, buffer, sizeof(float));
212        buffer += sizeof(float);
213        return f;
214        }
215
216double MemoryReadBuffer::readDouble() const
217        {
218        double f;
219        memcpy(&f, buffer, sizeof(double));
220        buffer += sizeof(double);
221        return f;
222        }
223
224void MemoryReadBuffer::readBuffer(void* dest, NxU32 size) const
225        {
226        memcpy(dest, buffer, size);
227        buffer += size;
228        }
Note: See TracBrowser for help on using the repository browser.