6 #include "../exceptions.h" 8 #include <c++utilities/conversion/types.h> 9 #include <c++utilities/conversion/binaryconversion.h> 10 #include <c++utilities/io/binaryreader.h> 11 #include <c++utilities/io/binarywriter.h> 54 string EbmlElement::parsingContext()
const 65 static const string context(
"parsing EBML element header");
76 byte beg =
stream().peek(), mask = 0x80;
95 m_id = BE::toUInt32(buf);
98 beg =
stream().peek(), mask = 0x80;
125 m_dataSize = ConversionUtilities::BE::toUInt64(buf);
142 if(firstChildOffset && firstChildOffset <
totalSize()) {
189 char buff[
sizeof(uint64)] = {0};
190 int i =
static_cast<int>(
sizeof(buff)) -
dataSize();
195 stream().read(buff + i,
sizeof(buff) - i);
196 return BE::toUInt64(buff);
207 case sizeof(float32):
208 return reader().readFloat32BE();
209 case sizeof(float64):
210 return reader().readFloat64BE();
224 }
else if(
id <= 0x7FFF) {
226 }
else if(
id <= 0x3FFFFF) {
228 }
else if(
id <= 0x1FFFFFFF) {
243 }
else if(size <= 16382ul) {
245 }
else if(size <= 2097150ul) {
247 }
else if(size <= 268435454ul) {
249 }
else if(size <= 34359738366ul) {
251 }
else if(size <= 4398046511102ul) {
253 }
else if(size <= 562949953421310ul) {
255 }
else if(size <= 72057594037927934ul) {
271 *buff =
static_cast<byte
>(
id);
273 }
else if(
id <= 0x7FFF) {
274 BE::getBytes(static_cast<uint16>(
id), buff);
276 }
else if(
id <= 0x3FFFFF) {
277 BE::getBytes(static_cast<uint32>(
id << 0x8), buff);
279 }
else if(
id <= 0x1FFFFFFF) {
280 BE::getBytes(static_cast<uint32>(
id), buff);
297 *buff =
static_cast<byte
>(size | 0x80);
299 }
else if(size <= 16382ul) {
300 BE::getBytes(static_cast<uint16>(size | 0x4000), buff);
302 }
else if(size <= 2097150ul) {
303 BE::getBytes(static_cast<uint32>((size | 0x200000) << 0x08), buff);
305 }
else if(size <= 268435454ul) {
306 BE::getBytes(static_cast<uint32>(size | 0x10000000), buff);
308 }
else if(size <= 34359738366ul) {
309 BE::getBytes(static_cast<uint64>((size | 0x800000000) << 0x18), buff);
311 }
else if(size <= 4398046511102ul) {
312 BE::getBytes(static_cast<uint64>((size | 0x40000000000) << 0x10), buff);
314 }
else if(size <= 562949953421310ul) {
315 BE::getBytes(static_cast<uint64>((size | 0x2000000000000) << 0x08), buff);
317 }
else if(size <= 72057594037927934ul) {
318 BE::getBytes(static_cast<uint64>(size | 0x100000000000000), buff);
334 if(minBytes <= 1 && size < 126) {
335 *buff =
static_cast<byte
>(size | 0x80);
337 }
else if(minBytes <= 2 && size <= 16382ul) {
338 BE::getBytes(static_cast<uint16>(size | 0x4000), buff);
340 }
else if(minBytes <= 3 && size <= 2097150ul) {
341 BE::getBytes(static_cast<uint32>((size | 0x200000) << 0x08), buff);
343 }
else if(minBytes <= 4 && size <= 268435454ul) {
344 BE::getBytes(static_cast<uint32>(size | 0x10000000), buff);
346 }
else if(minBytes <= 5 && size <= 34359738366ul) {
347 BE::getBytes(static_cast<uint64>((size | 0x800000000) << 0x18), buff);
349 }
else if(minBytes <= 6 && size <= 4398046511102ul) {
350 BE::getBytes(static_cast<uint64>((size | 0x40000000000) << 0x10), buff);
352 }
else if(minBytes <= 7 && size <= 562949953421310ul) {
353 BE::getBytes(static_cast<uint64>((size | 0x2000000000000) << 0x08), buff);
355 }
else if(minBytes <= 8 && size <= 72057594037927934ul) {
356 BE::getBytes(static_cast<uint64>(size | 0x100000000000000), buff);
368 if(integer <= 0xFFul) {
370 }
else if(integer <= 0xFFFFul) {
372 }
else if(integer <= 0xFFFFFFul) {
374 }
else if(integer <= 0xFFFFFFFFul) {
376 }
else if(integer <= 0xFFFFFFFFFFul) {
378 }
else if(integer <= 0xFFFFFFFFFFFFul) {
380 }
else if(integer <= 0xFFFFFFFFFFFFFFul) {
393 if(value <= 0xFFul) {
394 *buff =
static_cast<char>(value);
396 }
else if(value <= 0xFFFFul) {
397 BE::getBytes(static_cast<uint16>(value), buff);
399 }
else if(value <= 0xFFFFFFul) {
400 BE::getBytes(static_cast<uint32>(value << 0x08), buff);
402 }
else if(value <= 0xFFFFFFFFul) {
403 BE::getBytes(static_cast<uint32>(value), buff);
405 }
else if(value <= 0xFFFFFFFFFFul) {
406 BE::getBytes(static_cast<uint64>(value << 0x18), buff);
408 }
else if(value <= 0xFFFFFFFFFFFFul) {
409 BE::getBytes(static_cast<uint64>(value << 0x10), buff);
411 }
else if(value <= 0xFFFFFFFFFFFFFFul) {
412 BE::getBytes(static_cast<uint64>(value << 0x08), buff);
415 BE::getBytes(static_cast<uint64>(value), buff);
429 if(minBytes <= 1 && value <= 0xFFul) {
430 *buff =
static_cast<char>(value);
432 }
else if(minBytes <= 2 && value <= 0xFFFFul) {
433 BE::getBytes(static_cast<uint16>(value), buff);
435 }
else if(minBytes <= 3 && value <= 0xFFFFFFul) {
436 BE::getBytes(static_cast<uint32>(value << 0x08), buff);
438 }
else if(minBytes <= 4 && value <= 0xFFFFFFFFul) {
439 BE::getBytes(static_cast<uint32>(value), buff);
441 }
else if(minBytes <= 5 && value <= 0xFFFFFFFFFFul) {
442 BE::getBytes(static_cast<uint64>(value << 0x18), buff);
444 }
else if(minBytes <= 6 && value <= 0xFFFFFFFFFFFFul) {
445 BE::getBytes(static_cast<uint64>(value << 0x10), buff);
447 }
else if(minBytes <= 7 && value <= 0xFFFFFFFFFFFFFFul) {
448 BE::getBytes(static_cast<uint64>(value << 0x08), buff);
451 BE::getBytes(static_cast<uint64>(value), buff);
467 stream.write(buff1, sizeLength);
470 stream.write(buff1, sizeLength);
471 stream.write(buff2, elementSize);
484 stream.write(buff1, sizeLength);
486 stream.write(buff1, sizeLength);
487 stream.write(content.c_str(), content.size());
501 stream.write(buff1, sizeLength);
503 stream.write(buff1, sizeLength);
504 stream.write(data, dataSize);
Contains utility classes helping to read and write streams.