From 99558d96c4668d06935ffde71bcb0805cc7f3d06 Mon Sep 17 00:00:00 2001 From: Alexander Luzgarev Date: Tue, 12 Mar 2019 18:54:24 +0100 Subject: [PATCH] Support logical arrays --- MatFileHandler.Tests/MatFileReaderHdfTests.cs | 18 ++++++++++++++++++ .../test-data/hdf/logical.mat | Bin 0 -> 1920 bytes MatFileHandler/HdfFileReader.cs | 7 +++++++ 3 files changed, 25 insertions(+) create mode 100644 MatFileHandler.Tests/test-data/hdf/logical.mat diff --git a/MatFileHandler.Tests/MatFileReaderHdfTests.cs b/MatFileHandler.Tests/MatFileReaderHdfTests.cs index 3727358..a58e88a 100644 --- a/MatFileHandler.Tests/MatFileReaderHdfTests.cs +++ b/MatFileHandler.Tests/MatFileReaderHdfTests.cs @@ -204,6 +204,24 @@ namespace MatFileHandler.Tests Assert.That(structure["y", 1, 2].IsEmpty, Is.True); } + /// + /// Test reading a logical array. + /// + [Test] + public void TestLogical() + { + var matFile = ReadHdfTestFile("logical"); + var array = matFile["logical_"].Value; + var logicalArray = array as IArrayOf; + Assert.That(logicalArray, Is.Not.Null); + Assert.That(logicalArray[0, 0], Is.True); + Assert.That(logicalArray[0, 1], Is.True); + Assert.That(logicalArray[0, 2], Is.False); + Assert.That(logicalArray[1, 0], Is.False); + Assert.That(logicalArray[1, 1], Is.True); + Assert.That(logicalArray[1, 2], Is.True); + } + private static void CheckComplexLimits(IArrayOf> array, T[] limits) where T : struct { diff --git a/MatFileHandler.Tests/test-data/hdf/logical.mat b/MatFileHandler.Tests/test-data/hdf/logical.mat new file mode 100644 index 0000000000000000000000000000000000000000..edbc3c247f0875538ab3e5dacdacc0c08c674178 GIT binary patch literal 1920 zcmeHHPfx;74DSZ&LLfoB7*9QVK(Zks?!*KPBo2u#(Sr#tW9X8>62QAR^_%!n{5XCC zeQ&Qd@y|g|9;D0iYx~;1zP|Rkj(6-F;(lcpUB}xQM{!ujLF_Na$!ucdpmpBs*K1{L z%|d?>jxd?p=-r0s`ZKhuXf^Cw-L`62HLU~ewvYC39^8ZzAFYaMVgF$OBStzPRbOo`L!qY*w3K9Ro$@∋{W`_}Z0DVJIv^~0 zKSpwcMpkhKE0*}LD$wmX19{*JIyLvxGxZr4BTlZPz>kM4b6+-D@k`XeNc-2IKpJeP z5j0&XG8B)~_$n7ue>qjkLv`>9#nma0L35FTRbi*8p%FeMVJAuYj$iIC^I(!(5Gw|V zM_at#!yxwObGfh~emSa?E>Jxn4^5$!`jX(^{i5k&I0}Pg6sD^HMX{Y4HB2=ehmp+S Vtbfv$NviAskPprVOZ-s<-T*z~Tt)x@ literal 0 HcmV?d00001 diff --git a/MatFileHandler/HdfFileReader.cs b/MatFileHandler/HdfFileReader.cs index 8181b2f..f5af339 100644 --- a/MatFileHandler/HdfFileReader.cs +++ b/MatFileHandler/HdfFileReader.cs @@ -24,6 +24,7 @@ namespace MatFileHandler MSingle, MDouble, MCell, + MLogical, } internal class HdfArray : IArray @@ -440,6 +441,8 @@ namespace MatFileHandler { case "canonical empty": return HdfMatlabClass.MEmpty; + case "logical": + return HdfMatlabClass.MLogical; case "char": return HdfMatlabClass.MChar; case "int8": @@ -598,6 +601,8 @@ namespace MatFileHandler { case HdfMatlabClass.MEmpty: return HdfArray.Empty(); + case HdfMatlabClass.MLogical: + return ReadNumericalArray(datasetId, dims, arrayType); case HdfMatlabClass.MChar: return ReadCharArray(datasetId, dims); case HdfMatlabClass.MInt8: @@ -651,6 +656,7 @@ namespace MatFileHandler { case HdfMatlabClass.MInt8: case HdfMatlabClass.MUInt8: + case HdfMatlabClass.MLogical: return 1; case HdfMatlabClass.MInt16: case HdfMatlabClass.MUInt16: @@ -675,6 +681,7 @@ namespace MatFileHandler case HdfMatlabClass.MInt8: return H5T.NATIVE_INT8; case HdfMatlabClass.MUInt8: + case HdfMatlabClass.MLogical: return H5T.NATIVE_UINT8; case HdfMatlabClass.MInt16: return H5T.NATIVE_INT16;