www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcprefs/private/pr_datastore.m

    function varargout = pr_datastore(action,varargin)
%PR_DATASTORE Private persistent data for prefs
%
%  OUT=PR_DATASTORE(ACTION,IN) executes ACTION on the datastore
%  using any inputs IN and returns outputs OUT.
%
%  Various I/O syntax are allowed:
%
%   prefname :- String,    Name of preference
%   data     :- Variant,   Data to store/retrieve
%   flg      :- Boolean,   Normally a success indicator
%   name     :- String,    Name of preference set
%
%   PR_DATASTORE('init',[prefset])
%   PR_DATASTORE('reset')
%   flg = PR_DATASTORE('isprefset')
%   val = PR_DATASTORE('property', prop) gets a PrefsData property.
%   PR_DATASTORE('property', prop, val) sets a PrefsData property.
%   PR_DATASTORE(meth, [args]) calls a PrefsData method.

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


if ~nargin
    % No action specified
    return
end

mlock
persistent PrefsData

% Check static data is initialized
if isempty(PrefsData)
    PrefsData = mbcutils.PrefsData;
end

switch lower(action)
    case 'init'
        if nargin<2
            % Open the existing set
            openprefs = PrefsData.Name;
            if isempty(openprefs)
                openprefs = 'Default';
            end
        else
            openprefs = varargin{1};
        end

        if ~strcmp(openprefs, PrefsData.Name)
            PrefsData.Name = openprefs;
        end
    case 'unlock'
        % undocumented feature, to aid debugging
        munlock
    case 'reset'
        munlock
        clear PrefsData
    case 'isprefset'
        AllSets = PrefsData.setNames;
        if isempty(AllSets)
            % No registered sets is unusual and more likely to be because
            % the list of sets could not be accessed.  For the moment we'll
            % pretend that we know about it but it might not work when the
            % user tries to access it.
            varargout{1} = true;
        else
            varargout{1} = any(strcmp(varargin{1}, AllSets));
        end
    case 'property'
        if length(varargin)==1
            % Get a property
            varargout{1} = PrefsData.(varargin{1});
        else
            % Set a property
            PrefsData.(varargin{1}) = varargin{2};
        end
    otherwise
        % Call a PrefsData method
        [varargout{1:nargout}] = feval(action, PrefsData, varargin{:});
end