0001 function pass = valid_data(data)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 pass = 1;
0015 err_str = '';
0016
0017
0018 if isnumeric(data)
0019 return;
0020 end
0021
0022
0023 if ~isstruct(data)
0024 pass = 0;
0025 err_str = [err_str '- not a struct or numeric data\n'];
0026 end
0027
0028
0029
0030 f = {'name', 'char', ...
0031 'meas', 'numeric', ...
0032 'time', 'numeric', ...
0033 'type', 'char'};
0034 for i=1:length(f)/2
0035 x=2*(i-1)+1;
0036 y=x+1;
0037 if ~isfield(data, f{x})
0038 pass = 0;
0039 err_str = [err_str '- missing required field: ' f{x} '\n'];
0040 elseif ~isa(data.(f{x}), f{y})
0041 pass = 0;
0042 err_str = [err_str '- required field ' f{x} ' is not a ' f{y}'\n'];
0043 end
0044 end
0045
0046 if ~strcmp(data.type, 'data')
0047 pass = 0;
0048 err_str = [err_str '- field "type" must be "data"\n'];
0049 end
0050
0051
0052
0053 f = {};
0054 for i=1:length(f)/2
0055 x=2*(i-1)+1;
0056 y=x+1;
0057 if isfield(data, f{x}) && ~isa(data.(f{x}), f{y})
0058 pass = 0;
0059 err_str = [err_str '- optional field ' f{x} ' is not a ' f{y}'\n'];
0060 end
0061 end
0062
0063
0064
0065 f = {'maes'};
0066 for i=1:length(f)
0067 x=i;
0068 if isfield(data, f{x})
0069 pass = 0;
0070 err_str = [err_str '- illegal field "' f{x} '" found\n'];
0071 end
0072 end
0073
0074
0075 if ~pass
0076 err_str = err_str(1:end-2);
0077 end
0078 if ( nargout == 0 ) && ~pass
0079 error(sprintf(['Reasons:\n' err_str]));
0080 end