1
1
#include " simple_buffer.h"
2
- #include < assert.h>
2
+
3
+ #include < cstring>
3
4
#include < iterator>
4
5
6
+ #include < cassert>
7
+
5
8
namespace mpegts {
6
9
7
- SimpleBuffer::SimpleBuffer ()
8
- : mPos (0 )
9
- {
10
- }
10
+ SimpleBuffer::SimpleBuffer () = default ;
11
11
12
12
SimpleBuffer::SimpleBuffer (int32_t size, int8_t value)
13
- : mPos (0 )
14
13
{
15
14
mData = std::vector<uint8_t >(size, value);
16
15
}
17
16
18
- SimpleBuffer::~SimpleBuffer ()
19
- {
20
- }
17
+ SimpleBuffer::~SimpleBuffer () = default ;
21
18
22
- void SimpleBuffer::write1Byte (int8_t val)
19
+ void SimpleBuffer::write1Byte (uint8_t val)
23
20
{
24
21
mData .push_back (val);
25
22
}
26
23
27
- void SimpleBuffer::write2Bytes (int16_t val)
24
+ void SimpleBuffer::write2Bytes (uint16_t val)
28
25
{
29
- char *p = ( char *) &val;
26
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
30
27
31
28
for (int i = 1 ; i >= 0 ; --i) {
32
29
mData .push_back (p[i]);
33
30
}
34
31
}
35
32
36
- void SimpleBuffer::write3Bytes (int32_t val)
33
+ void SimpleBuffer::write3Bytes (uint32_t val)
37
34
{
38
- char *p = ( char *) &val;
35
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
39
36
40
37
for (int i = 2 ; i >= 0 ; --i) {
41
38
mData .push_back (p[i]);
42
39
}
43
40
}
44
41
45
- void SimpleBuffer::write4Bytes (int32_t val)
42
+ void SimpleBuffer::write4Bytes (uint32_t val)
46
43
{
47
- char *p = ( char *) &val;
44
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
48
45
49
46
for (int i = 3 ; i >= 0 ; --i) {
50
47
mData .push_back (p[i]);
51
48
}
52
49
}
53
50
54
- void SimpleBuffer::write8Bytes (int64_t val)
51
+ void SimpleBuffer::write8Bytes (uint64_t val)
55
52
{
56
- char *p = ( char *) &val;
53
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
57
54
58
55
for (int i = 7 ; i >= 0 ; --i) {
59
56
mData .push_back (p[i]);
60
57
}
61
58
}
62
59
63
- void SimpleBuffer::append (const uint8_t * bytes, int size)
60
+ void SimpleBuffer::append (const uint8_t * bytes, size_t size)
64
61
{
65
62
if (!bytes || size <= 0 ) {
66
63
#ifdef DEBUG
@@ -72,7 +69,7 @@ void SimpleBuffer::append(const uint8_t* bytes, int size)
72
69
mData .insert (mData .end (), bytes, bytes + size);
73
70
}
74
71
75
- void SimpleBuffer::prepend (const uint8_t * bytes, int size)
72
+ void SimpleBuffer::prepend (const uint8_t * bytes, size_t size)
76
73
{
77
74
if (!bytes || size <= 0 ) {
78
75
#ifdef DEBUG
@@ -84,22 +81,22 @@ void SimpleBuffer::prepend(const uint8_t* bytes, int size)
84
81
mData .insert (mData .begin (), bytes, bytes + size);
85
82
}
86
83
87
- int8_t SimpleBuffer::read1Byte ()
84
+ uint8_t SimpleBuffer::read1Byte ()
88
85
{
89
86
assert (require (1 ));
90
87
91
- int8_t val = mData .at (0 + mPos );
88
+ uint8_t val = mData .at (0 + mPos );
92
89
mPos ++;
93
90
94
91
return val;
95
92
}
96
93
97
- int16_t SimpleBuffer::read2Bytes ()
94
+ uint16_t SimpleBuffer::read2Bytes ()
98
95
{
99
96
assert (require (2 ));
100
97
101
- int16_t val = 0 ;
102
- char *p = ( char *) &val;
98
+ uint16_t val = 0 ;
99
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
103
100
104
101
for (int i = 1 ; i >= 0 ; --i) {
105
102
p[i] = mData .at (0 + mPos );
@@ -109,12 +106,12 @@ int16_t SimpleBuffer::read2Bytes()
109
106
return val;
110
107
}
111
108
112
- int32_t SimpleBuffer::read3Bytes ()
109
+ uint32_t SimpleBuffer::read3Bytes ()
113
110
{
114
111
assert (require (3 ));
115
112
116
- int32_t val = 0 ;
117
- char *p = ( char *) &val;
113
+ uint32_t val = 0 ;
114
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
118
115
119
116
for (int i = 2 ; i >= 0 ; --i) {
120
117
p[i] = mData .at (0 + mPos );
@@ -124,12 +121,12 @@ int32_t SimpleBuffer::read3Bytes()
124
121
return val;
125
122
}
126
123
127
- int32_t SimpleBuffer::read4Bytes ()
124
+ uint32_t SimpleBuffer::read4Bytes ()
128
125
{
129
126
assert (require (4 ));
130
127
131
128
int32_t val = 0 ;
132
- char *p = ( char *) &val;
129
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
133
130
134
131
for (int i = 3 ; i >= 0 ; --i) {
135
132
p[i] = mData .at (0 + mPos );
@@ -139,12 +136,12 @@ int32_t SimpleBuffer::read4Bytes()
139
136
return val;
140
137
}
141
138
142
- int64_t SimpleBuffer::read8Bytes ()
139
+ uint64_t SimpleBuffer::read8Bytes ()
143
140
{
144
141
assert (require (8 ));
145
142
146
- int64_t val = 0 ;
147
- char *p = ( char *) &val;
143
+ uint64_t val = 0 ;
144
+ uint8_t *p = reinterpret_cast < uint8_t *>( &val) ;
148
145
149
146
for (int i = 7 ; i >= 0 ; --i) {
150
147
p[i] = mData .at (0 + mPos );
@@ -154,46 +151,56 @@ int64_t SimpleBuffer::read8Bytes()
154
151
return val;
155
152
}
156
153
157
- std::string SimpleBuffer::readString (int len)
154
+ std::string SimpleBuffer::readString (size_t len)
158
155
{
159
156
assert (require (len));
160
157
161
- std::string val (*( char *) &mData [ 0 ] + mPos , len);
158
+ std::string val (reinterpret_cast < char *>( &mData . at ( mPos )) , len);
162
159
mPos += len;
163
160
164
161
return val;
165
162
}
166
163
167
- void SimpleBuffer::skip (int size)
164
+ void SimpleBuffer::skip (size_t size)
168
165
{
169
166
mPos += size;
170
167
}
171
168
172
- bool SimpleBuffer::require (int required_size)
169
+ bool SimpleBuffer::require (size_t required_size) const
173
170
{
174
171
assert (required_size >= 0 );
175
172
176
173
return required_size <= mData .size () - mPos ;
177
174
}
178
175
179
- bool SimpleBuffer::empty ()
176
+ bool SimpleBuffer::empty () const
180
177
{
181
178
return mPos >= mData .size ();
182
179
}
183
180
184
- int SimpleBuffer::size ()
181
+ size_t SimpleBuffer::size () const
185
182
{
186
183
return mData .size ();
187
184
}
188
185
189
- int SimpleBuffer::pos ()
186
+ size_t SimpleBuffer::pos () const
190
187
{
191
188
return mPos ;
192
189
}
193
190
194
191
uint8_t * SimpleBuffer::data ()
195
192
{
196
- return (size () == 0 ) ? nullptr : &mData [0 ];
193
+ return mData .empty () ? nullptr : &mData [0 ];
194
+ }
195
+
196
+ uint8_t * SimpleBuffer::currentData ()
197
+ {
198
+ return (mData .empty () || mPos >= mData .size ()) ? nullptr : &mData [mPos ];
199
+ }
200
+
201
+ size_t SimpleBuffer::dataLeft () const
202
+ {
203
+ return mData .size () - mPos ;
197
204
}
198
205
199
206
void SimpleBuffer::clear ()
@@ -202,7 +209,7 @@ void SimpleBuffer::clear()
202
209
mData .clear ();
203
210
}
204
211
205
- void SimpleBuffer::setData (int pos, const uint8_t * data, int len)
212
+ void SimpleBuffer::setData (size_t pos, const uint8_t * data, size_t len)
206
213
{
207
214
if (!data) {
208
215
#ifdef DEBUG
@@ -218,9 +225,7 @@ void SimpleBuffer::setData(int pos, const uint8_t* data, int len)
218
225
return ;
219
226
}
220
227
221
- for (int i = 0 ; i < len; i++) {
222
- mData [pos + i] = data[i];
223
- }
228
+ std::memcpy (currentData (), data, len);
224
229
}
225
230
226
231
}
0 commit comments