6 #include "../exceptions.h" 8 #include <c++utilities/conversion/types.h> 9 #include <c++utilities/conversion/stringconversion.h> 10 #include <c++utilities/conversion/binaryconversion.h> 11 #include <c++utilities/io/binaryreader.h> 12 #include <c++utilities/io/binarywriter.h> 13 #include <c++utilities/misc/memory.h> 55 string EbmlElement::parsingContext()
const 66 static const string context(
"parsing EBML element header");
78 byte beg, mask = 0x80;
98 m_id = BE::toUInt32(buf);
129 m_dataSize = ConversionUtilities::BE::toUInt64(buf);
196 char buff[
sizeof(uint64)] = {0};
197 int i =
static_cast<int>(
sizeof(buff)) -
dataSize();
202 stream().read(buff + i,
sizeof(buff) - i);
203 return BE::toUInt64(buff);
214 case sizeof(float32):
215 return reader().readFloat32BE();
216 case sizeof(float64):
217 return reader().readFloat64BE();
231 }
else if(
id <= 0x7FFF) {
233 }
else if(
id <= 0x3FFFFF) {
235 }
else if(
id <= 0x1FFFFFFF) {
250 }
else if(size <= 16382ul) {
252 }
else if(size <= 2097150ul) {
254 }
else if(size <= 268435454ul) {
256 }
else if(size <= 34359738366ul) {
258 }
else if(size <= 4398046511102ul) {
260 }
else if(size <= 562949953421310ul) {
262 }
else if(size <= 72057594037927934ul) {
278 *buff =
static_cast<byte
>(
id);
280 }
else if(
id <= 0x7FFF) {
281 BE::getBytes(static_cast<uint16>(
id), buff);
283 }
else if(
id <= 0x3FFFFF) {
284 BE::getBytes(static_cast<uint32>(
id << 0x8), buff);
286 }
else if(
id <= 0x1FFFFFFF) {
287 BE::getBytes(static_cast<uint32>(
id), buff);
304 *buff =
static_cast<byte
>(size | 0x80);
306 }
else if(size <= 16382ul) {
307 BE::getBytes(static_cast<uint16>(size | 0x4000), buff);
309 }
else if(size <= 2097150ul) {
310 BE::getBytes(static_cast<uint32>((size | 0x200000) << 0x08), buff);
312 }
else if(size <= 268435454ul) {
313 BE::getBytes(static_cast<uint32>(size | 0x10000000), buff);
315 }
else if(size <= 34359738366ul) {
316 BE::getBytes(static_cast<uint64>((size | 0x800000000) << 0x18), buff);
318 }
else if(size <= 4398046511102ul) {
319 BE::getBytes(static_cast<uint64>((size | 0x40000000000) << 0x10), buff);
321 }
else if(size <= 562949953421310ul) {
322 BE::getBytes(static_cast<uint64>((size | 0x2000000000000) << 0x08), buff);
324 }
else if(size <= 72057594037927934ul) {
325 BE::getBytes(static_cast<uint64>(size | 0x100000000000000), buff);
341 if(minBytes <= 1 && size < 126) {
342 *buff =
static_cast<byte
>(size | 0x80);
344 }
else if(minBytes <= 2 && size <= 16382ul) {
345 BE::getBytes(static_cast<uint16>(size | 0x4000), buff);
347 }
else if(minBytes <= 3 && size <= 2097150ul) {
348 BE::getBytes(static_cast<uint32>((size | 0x200000) << 0x08), buff);
350 }
else if(minBytes <= 4 && size <= 268435454ul) {
351 BE::getBytes(static_cast<uint32>(size | 0x10000000), buff);
353 }
else if(minBytes <= 5 && size <= 34359738366ul) {
354 BE::getBytes(static_cast<uint64>((size | 0x800000000) << 0x18), buff);
356 }
else if(minBytes <= 6 && size <= 4398046511102ul) {
357 BE::getBytes(static_cast<uint64>((size | 0x40000000000) << 0x10), buff);
359 }
else if(minBytes <= 7 && size <= 562949953421310ul) {
360 BE::getBytes(static_cast<uint64>((size | 0x2000000000000) << 0x08), buff);
362 }
else if(minBytes <= 8 && size <= 72057594037927934ul) {
363 BE::getBytes(static_cast<uint64>(size | 0x100000000000000), buff);
375 if(integer <= 0xFFul) {
377 }
else if(integer <= 0xFFFFul) {
379 }
else if(integer <= 0xFFFFFFul) {
381 }
else if(integer <= 0xFFFFFFFFul) {
383 }
else if(integer <= 0xFFFFFFFFFFul) {
385 }
else if(integer <= 0xFFFFFFFFFFFFul) {
387 }
else if(integer <= 0xFFFFFFFFFFFFFFul) {
400 if(value <= 0xFFul) {
401 *buff =
static_cast<char>(value);
403 }
else if(value <= 0xFFFFul) {
404 BE::getBytes(static_cast<uint16>(value), buff);
406 }
else if(value <= 0xFFFFFFul) {
407 BE::getBytes(static_cast<uint32>(value << 0x08), buff);
409 }
else if(value <= 0xFFFFFFFFul) {
410 BE::getBytes(static_cast<uint32>(value), buff);
412 }
else if(value <= 0xFFFFFFFFFFul) {
413 BE::getBytes(static_cast<uint64>(value << 0x18), buff);
415 }
else if(value <= 0xFFFFFFFFFFFFul) {
416 BE::getBytes(static_cast<uint64>(value << 0x10), buff);
418 }
else if(value <= 0xFFFFFFFFFFFFFFul) {
419 BE::getBytes(static_cast<uint64>(value << 0x08), buff);
422 BE::getBytes(static_cast<uint64>(value), buff);
436 if(minBytes <= 1 && value <= 0xFFul) {
437 *buff =
static_cast<char>(value);
439 }
else if(minBytes <= 2 && value <= 0xFFFFul) {
440 BE::getBytes(static_cast<uint16>(value), buff);
442 }
else if(minBytes <= 3 && value <= 0xFFFFFFul) {
443 BE::getBytes(static_cast<uint32>(value << 0x08), buff);
445 }
else if(minBytes <= 4 && value <= 0xFFFFFFFFul) {
446 BE::getBytes(static_cast<uint32>(value), buff);
448 }
else if(minBytes <= 5 && value <= 0xFFFFFFFFFFul) {
449 BE::getBytes(static_cast<uint64>(value << 0x18), buff);
451 }
else if(minBytes <= 6 && value <= 0xFFFFFFFFFFFFul) {
452 BE::getBytes(static_cast<uint64>(value << 0x10), buff);
454 }
else if(minBytes <= 7 && value <= 0xFFFFFFFFFFFFFFul) {
455 BE::getBytes(static_cast<uint64>(value << 0x08), buff);
458 BE::getBytes(static_cast<uint64>(value), buff);
474 stream.write(buff1, sizeLength);
477 stream.write(buff1, sizeLength);
478 stream.write(buff2, elementSize);
491 stream.write(buff1, sizeLength);
493 stream.write(buff1, sizeLength);
494 stream.write(content.c_str(), content.size());
508 stream.write(buff1, sizeLength);
510 stream.write(buff1, sizeLength);
511 stream.write(data, dataSize);
Contains utility classes helping to read and write streams.