gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/+matlab/+bigdata/+internal/+lazyeval/FilterOperation.m

    %FilterOperation
% An operation that filters slices based on a partitioned logical array.

% Copyright 2015-2016 The MathWorks, Inc.

classdef (Sealed) FilterOperation < matlab.bigdata.internal.lazyeval.Operation
    
    properties (SetAccess = immutable)
        % A FunctionHandle pointing to the internal filterFunction method.
        % We hold this so that submission stack information is captured.
        FunctionHandle;
    end
    
    methods
        % The main constructor.
        %
        % Here, numFilteredInputs is the number of inputs excluding the
        % filter itself.
        function obj = FilterOperation(numFilteredInputs)
            numInputs = numFilteredInputs + 1;
            numOutputs = numFilteredInputs;
            supportsPreview = true;
            obj = obj@matlab.bigdata.internal.lazyeval.Operation(numInputs, numOutputs, supportsPreview);
            obj.FunctionHandle = matlab.bigdata.internal.FunctionHandle(@filterFunction);
        end
    end
    
    % Methods overridden in the Operation interface.
    methods
        function task = createExecutionTasks(obj, taskDependencies, inputFutureMap, isInputReplicated)
            import matlab.bigdata.internal.executor.ExecutionTask;
            import matlab.bigdata.internal.lazyeval.ChunkwiseProcessor;
            
            isBroadcast = arrayfun(@(x)x.OutputPartitionStrategy.IsBroadcast, taskDependencies);
            if any(isBroadcast) && ~all(isBroadcast)
                obj.FunctionHandle.throwAsFunction(MException(message('MATLAB:bigdata:array:IncompatibleTallStrictSize')));
            end
            
            allowTallDimExpansion = false;
            processorFactory = ChunkwiseProcessor.createFactory(...
                obj.FunctionHandle, obj.NumOutputs, inputFutureMap, isInputReplicated, [], allowTallDimExpansion);
            
            task = ExecutionTask.createSimpleTask(taskDependencies, processorFactory);
        end
    end
end

function varargout = filterFunction(subs, varargin)
varargout = cell(size(varargin));

for ii = 1:numel(varargin)
    trailingColons = repmat({':'}, 1, ndims(varargin{ii}) - 1);
    varargout{ii} = subsref(varargin{ii}, substruct('()', [{subs}, trailingColons]));
end
end