www.gusucode.com > mbcexpr 工具箱 matlab 源码程序 > mbcexpr/@cgslparser/shareNormaliser.m

    function [pNorm,IsNew] = shareNormaliser(obj,b,normaliserName,pInput)
%shareNormaliser share normaliser 
%    [pNorm,IsNew] = shareNormaliser(obj,normaliserName,pInput)

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

% find normalizer in project
ptr = findItem(obj.Project.info,'Type','Normalizer','Name',normaliserName);
if isempty(ptr)
   % look in PointerList for normalizer created in this parse
   plist = obj.PointerList(~isnull(obj.PointerList));
   InPointerList = strcmp(pveceval(plist,@getname),normaliserName) & parrayeval(plist,@(t) isa(t,'cgnormaliser'),{},@false);
   if nnz(InPointerList) 
       ptr = plist(InPointerList);
       ptr = ptr(1);
   end
end
pNorm = mbcpointer(1);
IsNew = true;
if ~isempty(ptr) 
    if strcmp(charlist(pInput.info,true),charlist(info(ptr.getinputs),true))
        % normaliser has same inputs
        pNorm = ptr;
        IsNew = false;
    else
        msg = sprintf('The normalizer %s is used by other features or in other parts of this feature. The inputs to %s have been redefined.',...
            normaliserName,normaliserName);
        hilite_system( b );
        resp = questdlg([msg,' Do you want to create a new normalizer, reconnect this normalizer with new connections, or cancel?'],...
            'Normalizer Definition',...
            'New Normalizer','Reconnect','Cancel','New Normalizer');
        hilite_system( b, 'none');
        switch resp
            case 'New Normalizer'
                IsNew = true;
                fprintf('Duplicate normalizer %s\n',normaliserName)
            case 'Reconnect'
                % rewire existing normaliser inputs
                pNorm = ptr;
                pNorm.info = setX(pNorm.info,pInput);
                IsNew = false;
            case 'Cancel'
                obj.assert(msg,b)
        end
        
    end
end