www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgrangeconstraint/cgrangeconstraint.m

    function obj = cgrangeconstraint(varargin)
%CGRANGECONSTRAINT Constructor for cgrangeconstraint class
%
%   OBJ = CGRANGECONSTRAINT(NAME, LOWERBOUND, pEXPR, UPPERBOUND) constructs
%   a new cgrangeconstraint of the form 
%
%                 LOWERBOUND <= pEXPR <= UPPERBOUND
%   
%   See also CGEXPRCONSTRAINT  

%   Copyright 2006-2007 The MathWorks, Inc.

% Create class structure
if nargin && isstruct(varargin{1})
    ISNEWOBJ = false;
    s = varargin{1};
    prnt = s.cgoptimconstraint;
    s = rmfield(s, 'cgoptimconstraint');  
else
    ISNEWOBJ = true;
    % Error if number of input arguments is 2, 3 or > 4
    if nargin > 4 || ismember(nargin, 2:3)
        error(message('mbc:cgrangeconstraint:InvalidArgument'));
    end
    
    if nargin < 1 || isempty(varargin{1})
        % This syntax is allowed only for use by the OOPS system.   The
        % object will not be constructed with valid pointers and hence will
        % not work properly.
        CreateInternalPtrs = false;
        superargs = {'RangeConstraint'};
    else
        CreateInternalPtrs = true;
        superargs = varargin(1);
    end
    
    if nargin < 4 || any(cellfun('isempty', varargin(2:3)))
        if CreateInternalPtrs
            pLowerBound = xregpointer(cgexprconstraint('RangeLowerBound', ...
                mbcpointer(1), 'ge', -inf));
            pUpperBound = xregpointer(cgexprconstraint('RangeUpperBound', ...
                mbcpointer(1), 'le', inf));
        else
            pLowerBound = xregpointer;
            pUpperBound = xregpointer;
        end
    else
        pLowerBound = xregpointer(cgexprconstraint('RangeLowerBound', varargin{3}, ...
            'ge', varargin{2}));
        pUpperBound = xregpointer(cgexprconstraint('RangeUpperBound', varargin{3}, ...
            'le', varargin{4}));
    end
    % Create internal pointers if this cannot be a system call to the
    % constructor
    if CreateInternalPtrs
        pMinVector = i_CreateInternalPtrs;
        pMaxVector = i_CreateInternalPtrs;
    else
        pMinVector = mbcpointer(1);
        pMaxVector = mbcpointer(1);
    end
    s = struct('LowerBound', pLowerBound, ...
        'UpperBound', pUpperBound, ...
        'pMinVector', pMinVector, ...
        'pMaxVector', pMaxVector,...
        'Version', 2);    
    prnt = cgoptimconstraint(superargs{:});
end

% Create the class
obj = class(s, 'cgrangeconstraint', prnt);

% Set the internal pointer names if this object has just been created. 
if ISNEWOBJ
    pSetInternalPtrsNames(obj);
end

%--------------------------------------------------------------------------
function pInternal = i_CreateInternalPtrs
%--------------------------------------------------------------------------

wvar = cgvalue;
wvar = setrange(wvar, [0 1]);
wvar = setnomvalue(wvar, 1);
pInternal = xregpointer(wvar);