0001 function h = history(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 VERSION = '$Id: history.m,v 1.21 2008/03/17 09:16:36 mauro Exp $';
0034 CATEGORY = 'Constructor';
0035
0036
0037 if nargin == 2 && isa(varargin{1}, 'history') && ischar(varargin{2})
0038 if strcmp(varargin{2}, 'Params')
0039 h = plist();
0040 return
0041 elseif strcmp(varargin{2}, 'Version')
0042 h = VERSION;
0043 return
0044 elseif strcmp(varargin{2}, 'Category')
0045 h = CATEGORY;
0046 return
0047 end
0048 end
0049
0050
0051
0052 function h = init(version)
0053 h.name = 'None';
0054 h.version = version;
0055 h.plist = plist();
0056 h.inhists = [];
0057 h.invars = {};
0058 h.n = -1;
0059 h.pn = -1;
0060 h.created = time;
0061 h.consver = version;
0062 h = class(h, 'history');
0063 end
0064
0065
0066
0067
0068
0069 if nargin == 0
0070
0071 h = init(VERSION);
0072
0073 elseif nargin == 1
0074
0075
0076 if ischar(varargin{1})
0077
0078 filename = varargin{1};
0079 [path, name, ext, vers] = fileparts(filename);
0080 switch ext
0081 case '.mat'
0082 h = load(filename);
0083 h = h.a;
0084 case '.xml'
0085 root_node = xmlread(filename);
0086 h = ltpda_xmlread(root_node, 'history');
0087 otherwise
0088 error('### Unknown file type.');
0089 end
0090
0091 elseif isstruct(varargin{1})
0092
0093 h = init(VERSION);
0094
0095 hstruct = varargin{1};
0096 h.name = hstruct.name;
0097 h.version = hstruct.version;
0098 pl = hstruct.plist;
0099 if isstruct(pl)
0100 pl = plist(pl);
0101 end
0102 h.plist = pl;
0103 inh = hstruct.inhists;
0104 inhists = [];
0105 for j=1:length(inh)
0106 if isstruct(inh(j))
0107 inhists = [inhists history(inh(j))];
0108 else
0109 inhists = [inhists inh(j)];
0110 end
0111 end
0112 h.inhists = inhists;
0113 h.invars = hstruct.invars;
0114 h.n = hstruct.n;
0115 h.pn = hstruct.pn;
0116 created = hstruct.created;
0117 if isstruct(created)
0118 created = time(created);
0119 end
0120 h.created = created;
0121 h.consver = hstruct.consver;
0122
0123
0124 elseif isa(varargin{1}, 'history')
0125 h = varargin{1};
0126 h.consver = VERSION;
0127
0128
0129 elseif isa(varargin{1}, 'plist')
0130
0131 if nparams(varargin{1}) == 0
0132 h = init(VERSION);
0133 h.plist = varargin{1};
0134 else
0135 error('### Unknown history constructor method.');
0136 end
0137
0138 else
0139 error('### Unknown history constructor method.');
0140 end
0141
0142
0143 elseif nargin == 2
0144
0145 if isa(varargin{1}, 'database')
0146 h = retrieve(varargin{1}, varargin{2:end});
0147 else
0148 h = init(VERSION);
0149 h.name = varargin{1};
0150 h.version = varargin{2};
0151 end
0152
0153
0154 elseif nargin == 3
0155 if isempty(varargin{3})
0156 varargin{3} = plist();
0157 end
0158
0159 h = init(VERSION);
0160 h.name = varargin{1};
0161 h.version = varargin{2};
0162 h.plist = varargin{3};
0163
0164
0165 elseif nargin == 4
0166 if isempty(varargin{3})
0167 varargin{3} = plist();
0168 end
0169
0170 h = init(VERSION);
0171 h.name = varargin{1};
0172 h.version = varargin{2};
0173 h.plist = varargin{3};
0174 h.inhists = varargin{4};
0175
0176 else
0177 error('### Unknown number of constructor arguments.');
0178 end
0179
0180 end