www.gusucode.com > datastoreio工具箱 matlab源码程序 > datastoreio/+matlab/+io/+datastore/+splitter/WholeFileCustomReadSplitter.m

    classdef WholeFileCustomReadSplitter < matlab.io.datastore.splitter.WholeFileSplitter
% WHOLEFILECUSTOMREADSPLITTER Splitter for creating full file splits with custom reader.
%
% See also - matlab.io.datastore.ImageDatastore

%   Copyright 2015 The MathWorks, Inc.

    properties (Hidden)
        % Custom read function
        ReadFcn;
    end

    methods (Static, Hidden)
        function splitter = create(files, fileSizes, includeSubfolders)
            import matlab.io.datastore.splitter.WholeFileSplitter;
            import matlab.io.datastore.splitter.WholeFileCustomReadSplitter;
            narginchk(1,3);
            switch nargin
                case 1
                    fileSizes = [];
                    includeSubfolders = false;
                case 2
                    includeSubfolders = false;
            end
            % Use WholeFileSplitter to create splits.
            splits = WholeFileSplitter.createArgs(files, fileSizes, includeSubfolders);
            splitter = WholeFileCustomReadSplitter(splits);
        end
        function splitter = createFromSplits(splits)
            import matlab.io.datastore.splitter.WholeFileSplitter;
            import matlab.io.datastore.splitter.WholeFileCustomReadSplitter;
            % Use WholeFileSplitter to create splits.
            splits = WholeFileSplitter.createFromSplitsArgs(splits);
            splitter = WholeFileCustomReadSplitter(splits);
        end
    end

    methods (Access = protected)
        function splitter = WholeFileCustomReadSplitter(splits)
            splitter@matlab.io.datastore.splitter.WholeFileSplitter(splits);
        end
    end

    methods (Hidden)
        % Return a reader for the ii-th split.
        function rdr = createReader(splitter, ii)
            rdr = matlab.io.datastore.splitreader.WholeFileCustomReadSplitReader;
            rdr.ReadFcn = splitter.ReadFcn;
            rdr.Split = splitter.Splits(ii);
        end

        % Create Splitter from existing Splits
        %
        % Splits passed as input must be of identical in structure to the
        % splits used by this Spltiter class.
        function splitterCopy = createCopyWithSplits(splitter, splits)
            splitterCopy = splitter.createFromSplits(splits);
            splitterCopy.ReadFcn = splitter.ReadFcn;
        end

        function setSplitsWithInfo(splitter, splitsSetterFcn, varargin)
            % Set any additional information to each of the splits.
            %
            % This is useful, when each of the splits need any additional metadata needed
            % for later computation, but not necessary during construction.
            %
            % splitsSetterFcn needs to be a function handle, that can take atleast 1 input argument.
            %  - The first input argument will be the splits.
            %  - Any additional input arguments in varargin are passed to splitsSetterFcn.
            if ~isa(splitsSetterFcn, 'function_handle') || nargin(splitsSetterFcn) == 0
                msg = 'Input must be a function handle';
                error('MATLAB:datastoreio:wholefilecustomreadsplitter:invalidSplitsSetFcn', msg);
            end
            splitter.Splits = splitsSetterFcn(splitter.Splits, varargin{:});
        end
    end
end