Rewrite DataExtraction

This commit is contained in:
Alexander Luzgarev 2019-10-05 10:27:37 +02:00
parent b842bc7be1
commit 1b465c2857
2 changed files with 1116 additions and 130 deletions

View File

@ -33,8 +33,8 @@ namespace MatFileHandler
DataElement data, DataElement data,
DataElement imaginaryData) DataElement imaginaryData)
{ {
var realParts = DataExtraction.GetDataAsDouble(data).ToArrayLazily(); var realParts = DataExtraction.GetDataAsDouble(data);
var imaginaryParts = DataExtraction.GetDataAsDouble(imaginaryData).ToArrayLazily(); var imaginaryParts = DataExtraction.GetDataAsDouble(imaginaryData);
if (realParts == null) if (realParts == null)
{ {
throw new HandlerException("Couldn't read sparse array."); throw new HandlerException("Couldn't read sparse array.");
@ -111,7 +111,7 @@ namespace MatFileHandler
{ {
if (flags.Variable.HasFlag(Variable.IsLogical)) if (flags.Variable.HasFlag(Variable.IsLogical))
{ {
var data = DataExtraction.GetDataAsUInt8(realData).ToArrayLazily().Select(x => x != 0).ToArray(); var data = DataExtraction.GetDataAsUInt8(realData).Select(x => x != 0).ToArray();
return new MatNumericalArrayOf<bool>(flags, dimensions, name, data); return new MatNumericalArrayOf<bool>(flags, dimensions, name, data);
} }
switch (flags.Class) switch (flags.Class)
@ -163,7 +163,7 @@ namespace MatFileHandler
string name, string name,
MiNum<byte> dataElement) MiNum<byte> dataElement)
{ {
var data = dataElement?.Data; var data = dataElement.Data;
return new MatCharArrayOf<byte>(flags, dimensions, name, data, Encoding.UTF8.GetString(data)); return new MatCharArrayOf<byte>(flags, dimensions, name, data, Encoding.UTF8.GetString(data));
} }
@ -172,25 +172,25 @@ namespace MatFileHandler
switch (arrayType) switch (arrayType)
{ {
case ArrayType.MxDouble: case ArrayType.MxDouble:
return DataExtraction.GetDataAsDouble(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsDouble(data) as T[];
case ArrayType.MxSingle: case ArrayType.MxSingle:
return DataExtraction.GetDataAsSingle(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsSingle(data) as T[];
case ArrayType.MxInt8: case ArrayType.MxInt8:
return DataExtraction.GetDataAsInt8(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsInt8(data) as T[];
case ArrayType.MxUInt8: case ArrayType.MxUInt8:
return DataExtraction.GetDataAsUInt8(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsUInt8(data) as T[];
case ArrayType.MxInt16: case ArrayType.MxInt16:
return DataExtraction.GetDataAsInt16(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsInt16(data) as T[];
case ArrayType.MxUInt16: case ArrayType.MxUInt16:
return DataExtraction.GetDataAsUInt16(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsUInt16(data) as T[];
case ArrayType.MxInt32: case ArrayType.MxInt32:
return DataExtraction.GetDataAsInt32(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsInt32(data) as T[];
case ArrayType.MxUInt32: case ArrayType.MxUInt32:
return DataExtraction.GetDataAsUInt32(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsUInt32(data) as T[];
case ArrayType.MxInt64: case ArrayType.MxInt64:
return DataExtraction.GetDataAsInt64(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsInt64(data) as T[];
case ArrayType.MxUInt64: case ArrayType.MxUInt64:
return DataExtraction.GetDataAsUInt64(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsUInt64(data) as T[];
default: default:
throw new NotSupportedException(); throw new NotSupportedException();
} }
@ -200,12 +200,12 @@ namespace MatFileHandler
{ {
if (isLogical) if (isLogical)
{ {
return DataExtraction.GetDataAsUInt8(data).ToArrayLazily().Select(x => x != 0).ToArray() as T[]; return DataExtraction.GetDataAsUInt8(data).Select(x => x != 0).ToArray() as T[];
} }
switch (data) switch (data)
{ {
case MiNum<double> _: case MiNum<double> _:
return DataExtraction.GetDataAsDouble(data).ToArrayLazily() as T[]; return DataExtraction.GetDataAsDouble(data) as T[];
default: default:
throw new NotSupportedException(); throw new NotSupportedException();
} }

File diff suppressed because it is too large Load Diff