www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/@cgddnode/loadobj.m

    function obj = loadobj(obj)
%LOADOBJ Load-time fixing of object
%
%  OBJ = LOADOBJ(OBJ)
%  

%  Copyright 2000-2004 The MathWorks, Inc. and Ford Global Technologies, Inc.


if isstruct(obj)
    if ~isfield(obj, 'version')
        % Upgrade from version 1
        obj.ptrlist = unique(obj.aliasind);
        obj.numsymvars = length(obj.eqnlist);
        
        % Register a post-load action to upgrade the value objects
        h = mbcloadrecorder('current');
        h.add({@i_update_to_v2, address(obj.cgcontainer), ...
            obj.alias, obj.aliasind, obj.eqnlist}, ...
            '01-Aug-2002');
        
        % Remove old fields
        obj = mv_rmfield(obj, 'alias');
        obj = mv_rmfield(obj, 'aliasind');
        obj = mv_rmfield(obj, 'eqnlist');
         
        obj.version = 2;
    end
    
    obj = cgddnode(obj);
end




function i_update_to_v2(src, evt, pDD, sAlias, pAlias, sEqnList)

% Several update actions required
% (1) Put aliases into the value objects
% (2) Convert "constant" values into cgconstvalue's
% (3) Fix the cgsymvalues to work correctly

nAlias = length(pAlias);
pSyms = [];
for n = 1:nAlias
    valobj = pAlias(n).info;
    valobj = pAlias(n).addalias(sAlias{n});
    if issymvalue(valobj)
        % Register for fixing after all constants have been made
        pSyms = [pSyms, pAlias(n)];
    elseif ~isconstant(valobj)
        % Check the value isn't a constant really
        rng = getrange(valobj);
        if (rng(2)-rng(1)) == 0
            % Construct a constant object in this value's place
            const = cgconstvalue;
            valobj = copybaseinfo(valobj, const);
        end
    end
    pAlias(n).info = valobj;
end

% Fix formulae
for n = 1:length(pSyms)
    valobj = pSyms(n).info;
    % Fix the formulae
    symind = getequation(valobj);
    sEqn = sEqnList{symind};
    [nul, sEqn] = strtok(sEqn, '=');
    sEqn = sEqn(2:end);
    valobj = setequation(valobj, sEqn, pDD);
    pSyms(n).info = valobj;
end

% Force node name to be "Variable dictionary"
dd = pDD.info;
dd.cgcontainer = name(dd.cgcontainer, 'Variable Dictionary');
xregpointer(dd);