Fix objects parsing #6

Merged
mahalex merged 7 commits from fix-objects-parsing into master 2019-03-03 15:58:34 +00:00
3 changed files with 59 additions and 0 deletions
Showing only changes of commit 8fa9d12470 - Show all commits

View File

@ -434,6 +434,21 @@ namespace MatFileHandler.Tests
Assert.That(str[3], Is.EqualTo("æøå"));
}
/// <summary>
/// Test duration objects.
/// </summary>
[Test]
public void TestDuration()
{
var matFile = GetTests("good")["duration"];
var d = matFile["d"].Value as IMatObject;
var duration = new DurationAdapter(d);
Assert.That(duration.Dimensions, Is.EquivalentTo(new[] { 1, 3 }));
Assert.That(duration[0], Is.EqualTo(TimeSpan.FromTicks(12345678L)));
Assert.That(duration[1], Is.EqualTo(new TimeSpan(0, 2, 4)));
Assert.That(duration[2], Is.EqualTo(new TimeSpan(1, 3, 5)));
}
private static AbstractTestDataFactory<IMatFile> GetTests(string factoryName) =>
new MatTestDataFactory(Path.Combine(TestDirectory, factoryName));

Binary file not shown.

View File

@ -0,0 +1,44 @@
// Copyright 2017-2018 Alexander Luzgarev
using System;
namespace MatFileHandler
{
/// <summary>
/// A better interface for using duration objects.
/// </summary>
public class DurationAdapter
{
private readonly int[] dimensions;
private readonly double[] data;
/// <summary>
/// Initializes a new instance of the <see cref="DurationAdapter"/> class.
/// </summary>
/// <param name="array">Source duration object.</param>
public DurationAdapter(IArray array)
{
var matObject = array as IMatObject;
if (matObject?.ClassName != "duration")
{
throw new ArgumentException("The object provided is not a duration.");
}
var dataObject = matObject["millis", 0];
data = dataObject.ConvertToDoubleArray();
dimensions = dataObject.Dimensions;
}
/// <summary>
/// Gets duration array dimensions.
/// </summary>
public int[] Dimensions => dimensions;
/// <summary>
/// Gets duration object at given position.
/// </summary>
/// <param name="list">Indices.</param>
/// <returns>Value.</returns>
public TimeSpan this[params int[] list] => TimeSpan.FromTicks((long)(10000.0 * data[Dimensions.DimFlatten(list)]));
}
}