Skip to content

Commit 78c36b1

Browse files
committed
[c++/m] Add fileMode fucntion to File
Adds the fileMode function to the File entity on the c++ and the Matlab side and adds an appropriate test.
1 parent 854250a commit 78c36b1

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

+nix/File.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
check = nix_mx('File::isOpen', obj.nix_handle);
3535
end
3636

37+
function mode = file_mode(obj)
38+
mode = nix_mx('File::fileMode', obj.nix_handle);
39+
end
40+
3741
% ----------------
3842
% Block methods
3943
% ----------------

nix_mx.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ void mexFunction(int nlhs,
117117
.reg("blockCount", GETTER(nix::ndsize_t, nix::File, blockCount))
118118
.reg("sectionCount", GETTER(nix::ndsize_t, nix::File, sectionCount))
119119
.reg("isOpen", GETTER(bool, nix::File, isOpen));
120+
methods->add("File::fileMode", nixfile::fileMode);
120121

121122
classdef<nix::Block>("Block", methods)
122123
.desc(&nixblock::describe)

src/nixfile.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,21 @@ namespace nixfile {
3636
output.set(0, h);
3737
}
3838

39+
void fileMode(const extractor &input, infusor &output) {
40+
nix::File currObj = input.entity<nix::File>(1);
41+
nix::FileMode mode = currObj.fileMode();
42+
uint8_t omode;
43+
44+
switch (mode) {
45+
case nix::FileMode::ReadOnly: omode = 0; break;
46+
case nix::FileMode::ReadWrite: omode = 1; break;
47+
case nix::FileMode::Overwrite: omode = 2; break;
48+
default: throw std::invalid_argument("unknown open mode");
49+
}
50+
51+
output.set(0, omode);
52+
}
53+
3954
mxArray *describe(const nix::File &fd) {
4055
struct_builder sb({ 1 }, { "format", "version", "location", "createdAt", "updatedAt" });
4156
sb.set(fd.format());

src/nixfile.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ namespace nixfile {
1515

1616
void open(const extractor &input, infusor &output);
1717

18+
void fileMode(const extractor &input, infusor &output);
19+
1820
mxArray *describe(const nix::File &f);
1921

2022
} // namespace nixfile

tests/TestFile.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
funcs{end+1} = @test_read_write;
1616
funcs{end+1} = @test_overwrite;
1717
funcs{end+1} = @test_is_open;
18+
funcs{end+1} = @test_file_mode;
1819
funcs{end+1} = @test_create_block;
1920
funcs{end+1} = @test_block_count;
2021
funcs{end+1} = @test_create_section;
@@ -50,6 +51,21 @@
5051
assert(f.is_open());
5152
end
5253

54+
%% Test: File is open
55+
function [] = test_file_mode( varargin )
56+
testFile = fullfile(pwd,'tests','testRW.h5');
57+
f = nix.File(testFile, nix.FileMode.ReadOnly);
58+
assert(f.file_mode() == nix.FileMode.ReadOnly);
59+
60+
clear f;
61+
f = nix.File(testFile, nix.FileMode.ReadWrite);
62+
assert(f.file_mode() == nix.FileMode.ReadWrite);
63+
64+
clear f;
65+
f = nix.File(testFile, nix.FileMode.Overwrite);
66+
assert(f.file_mode() == nix.FileMode.Overwrite);
67+
end
68+
5369
%% Test: Create Block
5470
function [] = test_create_block( varargin )
5571
test_file = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.Overwrite);

0 commit comments

Comments
 (0)