sources/network/bytestream.h

changeset 5
146825d63b9a
child 9
e7a09ceb4505
equal deleted inserted replaced
4:ec5387e121fa 5:146825d63b9a
1 #pragma once
2 #include "../main.h"
3
4 class String;
5
6 enum { MAX_NETWORK_STRING = 0x800 };
7
8 // TODO: Make able to handle big-endian too
9 class Bytestream
10 {
11 public:
12 static bool sink;
13
14 Bytestream (unsigned long length = 0x800);
15 Bytestream (const unsigned char* data, unsigned long length);
16 Bytestream (const Vector<unsigned char>& bytes);
17 ~Bytestream();
18
19 inline METHOD allocated_size() const -> unsigned long;
20 inline METHOD bytes_left() const -> unsigned long;
21 METHOD clear() -> void;
22 inline METHOD data() -> unsigned char*;
23 inline METHOD data() const -> const unsigned char*;
24 METHOD grow_to_fit (unsigned long bytes) -> void;
25 inline METHOD position() const -> unsigned long;
26 METHOD read (unsigned char* buffer, unsigned long length, bool* ok = &sink) -> void;
27 METHOD read_byte (bool* ok = &sink) -> char;
28 METHOD read_short (bool* ok = &sink) -> short int;
29 METHOD read_long (bool* ok = &sink) -> long int;
30 METHOD read_string (bool* ok = &sink) -> String;
31 METHOD read_float (bool* ok = &sink) -> float;
32 METHOD resize (unsigned long length) -> void;
33 inline METHOD rewind() -> void;
34 inline METHOD seek (unsigned long pos) -> void;
35 METHOD write (const unsigned char* val, unsigned int length) -> void;
36 METHOD write_buffer (const Bytestream& other) -> void;
37 METHOD write_buffer (const Vector<unsigned char>& other) -> void;
38 METHOD write_byte (char val) -> void;
39 METHOD write_double (double val) -> void;
40 METHOD write_float (float val) -> void;
41 METHOD write_long (long int val) -> void;
42 METHOD write_short (short int val) -> void;
43 METHOD write_string (const String& val) -> void;
44 inline METHOD written_length() const -> unsigned long;
45
46 inline METHOD operator[] (unsigned long idx) -> unsigned char&;
47 inline METHOD operator[] (unsigned long idx) const -> unsigned char;
48
49 private:
50 unsigned char* m_data;
51 unsigned char* m_cursor;
52 unsigned long m_allocatedSize;
53 unsigned long m_writtenLength;
54
55 METHOD init (const unsigned char* data, unsigned long length) -> void;
56 METHOD write (unsigned char val) -> void;
57 inline METHOD space_left() const -> unsigned long;
58 };
59
60 // -------------------------------------------------------------------------------------------------
61 //
62 inline METHOD
63 Bytestream::allocated_size() const -> unsigned long
64 {
65 return m_allocatedSize;
66 }
67
68 // -------------------------------------------------------------------------------------------------
69 //
70 inline METHOD
71 Bytestream::written_length() const -> unsigned long
72 {
73 return m_writtenLength;
74 }
75
76 // -------------------------------------------------------------------------------------------------
77 //
78 inline METHOD
79 Bytestream::operator[] (unsigned long idx) -> unsigned char&
80 {
81 return m_data[idx];
82 }
83
84 // -------------------------------------------------------------------------------------------------
85 //
86 inline METHOD
87 Bytestream::operator[] (unsigned long idx) const -> unsigned char
88 {
89 return m_data[idx];
90 }
91
92 // -------------------------------------------------------------------------------------------------
93 //
94 inline METHOD
95 Bytestream::position() const -> unsigned long
96 {
97 return m_cursor - m_data;
98 }
99
100 // -------------------------------------------------------------------------------------------------
101 //
102 inline METHOD
103 Bytestream::seek (unsigned long pos) -> void
104 {
105 m_cursor = m_data + pos;
106 }
107
108 // -------------------------------------------------------------------------------------------------
109 //
110 inline METHOD
111 Bytestream::rewind() -> void
112 {
113 m_cursor = m_data;
114 }
115
116 // -------------------------------------------------------------------------------------------------
117 //
118 inline METHOD
119 Bytestream::bytes_left() const -> unsigned long
120 {
121 return (m_writtenLength - (m_cursor - &m_data[0]));
122 }
123
124 // -------------------------------------------------------------------------------------------------
125 //
126 inline METHOD
127 Bytestream::space_left() const -> unsigned long
128 {
129 return (m_allocatedSize - m_writtenLength);
130 }
131
132 // -------------------------------------------------------------------------------------------------
133 //
134 inline METHOD
135 Bytestream::data() -> unsigned char*
136 {
137 return m_data;
138 }
139
140 // -------------------------------------------------------------------------------------------------
141 //
142 inline METHOD
143 Bytestream::data() const -> const unsigned char*
144 {
145 return m_data;
146 }

mercurial