-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathParameters.m
71 lines (65 loc) · 2.77 KB
/
Parameters.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
classdef Parameters < NumericParameters
properties
fileName = ''
end
methods
function oneParamArr = generateOneParameterArr(p)
propNames = ['fileName'; properties(NumericParameters)];
numParams = numel(propNames);
% Allocate oneParamArr
oneParamArr(numParams) = OneParameter();
% Place non-numeric fileName in oneParamArr
oneParamArr(1) = OneParameter('fileName', p.fileName, false);
% Extra element in front of paramVec is unused value for
% fileName
paramVec = [0, p.toVector()];
% Add numeric values to oneParamArr
for i = 2:numParams
typ = NumericParameters.parameterType(propNames{i});
if typ.isIntegerType()
valueStr = sprintf('%d', paramVec(i));
else
valueStr = sprintf('%g', paramVec(i));
end
oneParamArr(i) = OneParameter(propNames{i}, valueStr, false);
oneParamArr(i).subtype = typ;
oneParamArr(i).description = NumericParameters.parameterDescription(propNames{i});
end
end
function status = update(p, oneParamArr)
status = '';
% Force oneParamArr to be a column vector to facilitate removal
% of fileName parameter.
oneParamArr = oneParamArr(:);
% Find fileName parameter
fileNameIndex = find(strcmp('fileName', {oneParamArr.name}));
if numel(fileNameIndex) ~= 1
error('[Parameters.update] fileName parameter found %d times', numel(fileNameIndex));
end
fileName = oneParamArr(fileNameIndex).value;
% Remove file name parameter
oneParamArr = [oneParamArr(1:(fileNameIndex-1)); oneParamArr((fileNameIndex+1):end)];
status = updateNumeric(p, oneParamArr);
% Do not update filename of p unless update of numeric parameters
% was successful
if isempty(status)
p.fileName = fileName;
end
end
function str = toString(p)
propNames = properties(Parameters);
propNm = propNames{1};
str = sprintf('Parameters[%s=%s', propNm, p.(propNm));
for i = 2:numel(propNames)
propNm = propNames{i};
typ = NumericParameters.parameterType(propNm);
if typ.isIntegerType()
str = sprintf('%s,%s=%d', str, propNm, p.(propNm));
else
str = sprintf('%s,%s=%f', str, propNm, p.(propNm));
end
end
str = sprintf('%s]', str);
end
end
end