public ulong EncodeSizeWithLength(int value, int length) { var v = VInt.EncodeSize((ulong)value, length); Assert.AreEqual(length, v.Length); return(v.EncodedValue); }
public ulong EncodeSize(int value, int expectedLength) { var v = VInt.EncodeSize((ulong)value); Assert.AreEqual(expectedLength, v.Length); return(v.EncodedValue); }
public void CreatesSizeOrIdFromEncodedValue(ulong value, int expectedLength) { var v = VInt.EncodeSize(value); Assert.IsFalse(v.IsReserved); Assert.AreEqual(value, v.Value); Assert.AreEqual(expectedLength, v.Length); }
public void EncodeSizeWithLength(int value, int length, ulong expectedResult) { var v = VInt.EncodeSize((ulong)value, length); Assert.Equal(length, v.Length); Assert.Equal(expectedResult, v.EncodedValue); }
public void EncodeSizeWithLengthException(int value, int length, ulong expectedResult) { Assert.Throws(typeof(ArgumentException), () => { var v = VInt.EncodeSize((ulong)value, length); Assert.Equal(length, v.Length); Assert.Equal(expectedResult, v.EncodedValue); }); }
public void EncodeSizeWithIncorrectLength(int value, int length) { Assert.Throws <ArgumentException>(() => VInt.EncodeSize((ulong)value, length)); }
private void WriteData() { var reader = new EbmlReader(new MemoryStream(_oldSegmentInfoData), _oldSegmentInfoData.Length); // prepare writing part var infoStream = new MemoryStream(); var infoWriter = new EbmlWriter(infoStream); var writeMap = new[] { new { Id = MatroskaDtd.Segment.Info.Title.Identifier, Value = _title }, new { Id = MatroskaDtd.Segment.Info.WritingApp.Identifier, Value = _writingApp }, }; // enter the Segment block reader.ReadNext(); reader.EnterContainer(); while (reader.ReadNext()) { if (!writeMap.Any(arg => arg.Id == reader.ElementId)) { // copying data as is var buffer = new byte[reader.ElementSize]; reader.ReadBinary(buffer, 0, (int)reader.ElementSize); infoWriter.Write(reader.ElementId, buffer); } } // write title/app in case it was not present! foreach (var e in writeMap.Where(arg => !string.IsNullOrEmpty(arg.Value))) { infoWriter.WriteUtf(e.Id, e.Value); } var outStream = new MemoryStream(_dataLength); var writer = new EbmlWriter(outStream); writer.Write(MatroskaDtd.Segment.Info.Identifier, infoStream.ToArray()); var extraByteCount = _dataLength - outStream.Position; if (extraByteCount != 0) { var extraHLen = StandardDtd.Void.Identifier.Length + 2; var blankDataLen = (int)(extraByteCount - extraHLen); if (blankDataLen < 0) { throw new InvalidOperationException(string.Format("Not enough space to put the new data, {0} bytes to feet", -blankDataLen)); } writer.WriteElementHeader(StandardDtd.Void.Identifier, VInt.EncodeSize((ulong)blankDataLen, 2)); writer.Write(new byte[blankDataLen], 0, blankDataLen); } if (outStream.Length != _dataLength) { throw new InvalidOperationException("Failed to prepare modified data - block length mismatch"); } _stream.Position = _dataStart; _stream.Write(outStream.ToArray(), 0, _dataLength); }