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.19 2008/02/13 10:13:53 ingo 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()
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();
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();
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 else
0125 h = varargin{1};
0126 h.consver = VERSION;
0127 end
0128
0129
0130 elseif nargin == 2
0131
0132 if isa(varargin{1}, 'database')
0133 h = retrieve(varargin{1}, varargin{2:end});
0134 else
0135 h = init();
0136 h.name = varargin{1};
0137 h.version = varargin{2};
0138 end
0139
0140
0141 elseif nargin == 3
0142 if isempty(varargin{3})
0143 varargin{3} = plist();
0144 end
0145
0146 h = init();
0147 h.name = varargin{1};
0148 h.version = varargin{2};
0149 h.plist = varargin{3};
0150
0151
0152 elseif nargin == 4
0153 if isempty(varargin{3})
0154 varargin{3} = plist();
0155 end
0156
0157 h = init();
0158 h.name = varargin{1};
0159 h.version = varargin{2};
0160 h.plist = varargin{3};
0161 h.inhists = varargin{4};
0162
0163 else
0164 error('### Unknown number of constructor arguments.');
0165 end
0166
0167 end