Isle
Loading...
Searching...
No Matches
legostorage.h
Go to the documentation of this file.
1#ifndef __LEGOSTORAGE_H
2#define __LEGOSTORAGE_H
3
4#include "legotypes.h"
6#include "mxstring.h"
7
8#include <stdio.h>
9
10// VTABLE: LEGO1 0x100d7d80
11// SIZE 0x08
17public:
22 enum OpenFlags {
23 c_read = 1,
24 c_write = 2,
25 c_text = 4
26 };
27
32
36 virtual ~LegoStorage() {}
37
44 virtual LegoResult Read(void* p_buffer, LegoU32 p_size) = 0; // vtable+0x04
45
52 virtual LegoResult Write(const void* p_buffer, LegoU32 p_size) = 0; // vtable+0x08
53
59 virtual LegoResult GetPosition(LegoU32& p_position) = 0; // vtable+0x0c
60
66 virtual LegoResult SetPosition(LegoU32 p_position) = 0; // vtable+0x10
67
72 virtual LegoBool IsWriteMode() { return m_mode == c_write; } // vtable+0x14
73
78 virtual LegoBool IsReadMode() { return m_mode == c_read; } // vtable+0x18
79
86 LegoStorage* WriteString(const char* p_data)
87 {
88 LegoS16 length = strlen(p_data);
89 WriteS16(length);
90 Write(p_data, length);
91 return this;
92 }
93
100 {
101 Write(&p_data, sizeof(p_data));
102 return this;
103 }
104
111 {
112 Write(&p_data, sizeof(p_data));
113 return this;
114 }
115
122 {
123 Write(&p_data, sizeof(p_data));
124 return this;
125 }
126
134 {
135 Write(&p_data, sizeof(p_data));
136 return this;
137 }
138
146 {
147 Write(&p_data, sizeof(p_data));
148 return this;
149 }
150
157 {
158 Write(&p_data, sizeof(p_data));
159 return this;
160 }
161
168 {
169 WriteFloat(p_data[0]);
170 WriteFloat(p_data[1]);
171 WriteFloat(p_data[2]);
172 return this;
173 }
174
181 {
182 WriteString(p_data.GetData());
183 return this;
184 }
185
192 LegoStorage* ReadString(char* p_data)
193 {
194 LegoS16 length;
195 ReadS16(length);
196 Read(p_data, length);
197 p_data[length] = '\0';
198 return this;
199 }
200
207 {
208 Read(&p_data, sizeof(p_data));
209 return this;
210 }
211
218 {
219 Read(&p_data, sizeof(p_data));
220 return this;
221 }
222
229 {
230 Read(&p_data, sizeof(p_data));
231 return this;
232 }
233
241 {
242 Read(&p_data, sizeof(p_data));
243 return this;
244 }
245
253 {
254 Read(&p_data, sizeof(p_data));
255 return this;
256 }
257
264 {
265 Read(&p_data, sizeof(p_data));
266 return this;
267 }
268
275 {
276 ReadFloat(p_data[0]);
277 ReadFloat(p_data[1]);
278 ReadFloat(p_data[2]);
279 return this;
280 }
281
288 {
289 LegoS16 length;
290 ReadS16(length);
291
292 char* text = new char[length + 1];
293 Read(text, length);
294
295 text[length] = '\0';
296 p_data = text;
297 delete[] text;
298 return this;
299 }
300
301 // SYNTHETIC: LEGO1 0x10045b00
302 // LegoStorage::`scalar deleting destructor'
303
304protected:
308 LegoU8 m_mode; // 0x04
309};
310
311// VTABLE: LEGO1 0x100db710
312// SIZE 0x10
317class LegoMemory : public LegoStorage {
318public:
323 LegoMemory(void* p_buffer);
324
331 LegoResult Read(void* p_buffer, LegoU32 p_size) override; // vtable+0x04
332
339 LegoResult Write(const void* p_buffer, LegoU32 p_size) override; // vtable+0x08
340
346 LegoResult GetPosition(LegoU32& p_position) override // vtable+0x0c
347 {
348 p_position = m_position;
349 return SUCCESS;
350 }
351
357 LegoResult SetPosition(LegoU32 p_position) override // vtable+0x10
358 {
359 m_position = p_position;
360 return SUCCESS;
361 }
362
363 // SYNTHETIC: LEGO1 0x10045a80
364 // LegoMemory::~LegoMemory
365
366 // SYNTHETIC: LEGO1 0x100990f0
367 // LegoMemory::`scalar deleting destructor'
368
369protected:
373 LegoU8* m_buffer; // 0x04
374
379};
380
381// VTABLE: LEGO1 0x100db730
382// SIZE 0x0c
387class LegoFile : public LegoStorage {
388public:
392 LegoFile();
393
397 ~LegoFile() override;
398
405 LegoResult Read(void* p_buffer, LegoU32 p_size) override; // vtable+0x04
406
413 LegoResult Write(const void* p_buffer, LegoU32 p_size) override; // vtable+0x08
414
420 LegoResult GetPosition(LegoU32& p_position) override; // vtable+0x0c
421
427 LegoResult SetPosition(LegoU32 p_position) override; // vtable+0x10
428
436 LegoResult Open(const char* p_name, LegoU32 p_mode);
437
438 // SYNTHETIC: LEGO1 0x10099230
439 // LegoFile::`scalar deleting destructor'
440
441protected:
445 FILE* m_file; // 0x08
446};
447
448#endif // __LEGOSTORAGE_H
Implementation of LegoStorage for file-backed storage using stdio FILE*.
Definition: legostorage.h:387
LegoResult Read(void *p_buffer, LegoU32 p_size) override
Reads bytes from file at current position.
Definition: legostorage.cpp:50
FILE * m_file
C runtime file pointer backing storage.
Definition: legostorage.h:445
~LegoFile() override
Destructor.
Definition: legostorage.cpp:42
LegoFile()
Default constructor initializes with NULL file pointer.
Definition: legostorage.cpp:36
LegoResult GetPosition(LegoU32 &p_position) override
Gets the current file pointer position relative to beginning.
Definition: legostorage.cpp:74
LegoResult Open(const char *p_name, LegoU32 p_mode)
Opens a file with given name and mode, closing existing file if needed.
LegoResult Write(const void *p_buffer, LegoU32 p_size) override
Writes bytes to file at current position.
Definition: legostorage.cpp:62
LegoResult SetPosition(LegoU32 p_position) override
Sets the current file pointer position.
Definition: legostorage.cpp:88
Implementation of LegoStorage for memory-backed buffers.
Definition: legostorage.h:317
LegoU8 * m_buffer
Pointer to target memory buffer for reading/writing.
Definition: legostorage.h:373
LegoResult Read(void *p_buffer, LegoU32 p_size) override
Reads bytes from memory buffer at current position.
Definition: legostorage.cpp:20
LegoResult GetPosition(LegoU32 &p_position) override
Gets the current offset into the memory buffer.
Definition: legostorage.h:346
LegoU32 m_position
Current read/write offset in buffer.
Definition: legostorage.h:378
LegoResult Write(const void *p_buffer, LegoU32 p_size) override
Writes bytes to memory buffer at current position.
Definition: legostorage.cpp:28
LegoResult SetPosition(LegoU32 p_position) override
Sets the current offset into the memory buffer.
Definition: legostorage.h:357
Abstract base class providing an interface for file-like storage with binary and text read/write oper...
Definition: legostorage.h:16
virtual LegoResult Write(const void *p_buffer, LegoU32 p_size)=0
Write bytes from buffer into storage.
LegoStorage * WriteVector(Mx3DPointFloat p_data)
Writes a 3D vector (three floats) to storage.
Definition: legostorage.h:167
LegoStorage * ReadFloat(LegoFloat &p_data)
Reads a floating-point (single-precision) value from storage.
Definition: legostorage.h:263
LegoStorage * WriteU32(MxU32 p_data)
Writes a 32-bit unsigned value to storage.
Definition: legostorage.h:145
LegoStorage * ReadMxString(MxString &p_data)
Reads a length-prefixed string and stores it in an MxString object.
Definition: legostorage.h:287
LegoStorage * ReadU32(MxU32 &p_data)
Reads a 32-bit unsigned value from storage.
Definition: legostorage.h:252
LegoStorage * ReadVector(Mx3DPointFloat &p_data)
Reads a 3D vector (three floats) from storage.
Definition: legostorage.h:274
LegoStorage * WriteU8(LegoU8 p_data)
Writes an 8-bit unsigned value to storage.
Definition: legostorage.h:99
virtual LegoBool IsWriteMode()
Returns TRUE if object was opened in write mode.
Definition: legostorage.h:72
LegoStorage * ReadU8(LegoU8 &p_data)
Reads an 8-bit unsigned value from storage.
Definition: legostorage.h:206
LegoStorage * WriteS16(LegoS16 p_data)
Writes a 16-bit signed value to storage.
Definition: legostorage.h:110
LegoU8 m_mode
File open/access mode.
Definition: legostorage.h:308
LegoStorage * ReadS16(LegoS16 &p_data)
Reads a 16-bit signed value from storage.
Definition: legostorage.h:217
LegoStorage * ReadS32(MxS32 &p_data)
Reads a 32-bit signed value from storage.
Definition: legostorage.h:240
LegoStorage * ReadU16(LegoU16 &p_data)
Reads a 16-bit unsigned value from storage.
Definition: legostorage.h:228
virtual ~LegoStorage()
Virtual destructor for safe polymorphic destruction.
Definition: legostorage.h:36
virtual LegoResult SetPosition(LegoU32 p_position)=0
Set current read/write position in stream.
virtual LegoResult Read(void *p_buffer, LegoU32 p_size)=0
Read bytes from storage into buffer.
LegoStorage()
Default constructor initializing mode to zero.
Definition: legostorage.h:31
virtual LegoBool IsReadMode()
Returns TRUE if object was opened in read mode.
Definition: legostorage.h:78
LegoStorage * WriteString(const char *p_data)
Writes a length-prefixed string to storage.
Definition: legostorage.h:86
LegoStorage * ReadString(char *p_data)
Reads a length-prefixed string from storage.
Definition: legostorage.h:192
LegoStorage * WriteFloat(LegoFloat p_data)
Writes a floating-point (single-precision) value to storage.
Definition: legostorage.h:156
LegoStorage * WriteU16(LegoU16 p_data)
Writes a 16-bit unsigned value to storage.
Definition: legostorage.h:121
OpenFlags
File open mode flags for storage operations.
Definition: legostorage.h:22
@ c_read
Open for read operations. [AI].
Definition: legostorage.h:23
@ c_write
Open for write operations. [AI].
Definition: legostorage.h:24
@ c_text
Open in text mode, otherwise binary. [AI].
Definition: legostorage.h:25
virtual LegoResult GetPosition(LegoU32 &p_position)=0
Get current read/write position in stream.
LegoStorage * WriteS32(MxS32 p_data)
Writes a 32-bit signed value to storage.
Definition: legostorage.h:133
LegoStorage * WriteMxString(MxString p_data)
Writes a length-prefixed MxString to storage.
Definition: legostorage.h:180
[AI] Represents a 3D point with floating-point precision, inheriting from Vector3.
Definition: mxgeometry3d.h:14
Mindscape custom string class for managing dynamic C-strings within the game engine.
Definition: mxstring.h:14
char * GetData() const
Returns a pointer to the internal character buffer.
Definition: mxstring.h:110
[AI] Defines basic fixed-width data types and platform-neutral constants for LEGO Island codebase.
unsigned long LegoU32
[AI] Unsigned 32-bit integer type for cross-platform compatibility.
Definition: legotypes.h:71
unsigned char LegoU8
[AI] Unsigned 8-bit integer type used throughout LEGO Island.
Definition: legotypes.h:47
LegoS32 LegoResult
[AI] Function result type (return code): typically SUCCESS (0) or FAILURE (-1).
Definition: legotypes.h:101
#define SUCCESS
[AI] Used to indicate a successful operation in result codes.
Definition: legotypes.h:30
unsigned short LegoU16
[AI] Unsigned 16-bit integer type for cross-platform compatibility.
Definition: legotypes.h:59
short LegoS16
[AI] Signed 16-bit integer type for cross-platform compatibility.
Definition: legotypes.h:53
float LegoFloat
[AI] Floating point type used throughout LEGO Island.
Definition: legotypes.h:77
LegoU8 LegoBool
[AI] Boolean value used throughout the codebase.
Definition: legotypes.h:89
signed int MxS32
[AI]
Definition: mxtypes.h:38
unsigned int MxU32
[AI]
Definition: mxtypes.h:32