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

    %EncellificationProcessor
% Data Processor that encells each input.
%
% This will buffer all input until initialized state and then start
% returning one cell per chunk for each input.
%
% See LazyTaskGraph for a general description of input and outputs.
% Specifically, this will emit a single 1 x NumOutputs cell array, where
% each cell contains the full output of the corresponding operation output.
%

%   Copyright 2016 The MathWorks, Inc.

classdef (Sealed) EncellificationProcessor < matlab.bigdata.internal.executor.DataProcessor
    % Properties overridden in the DataProcessor interface.
    properties (SetAccess = private)
        IsFinished = false;
        IsMoreInputRequired;
    end
    
    properties (SetAccess = immutable)
        % The number of outputs from the function handle.
        NumOutputs;
        
        % A map of input closure dependencies to input futures.
        InputFutureMap
        
        % The input buffer.
        InputBuffer;
    end
    
    methods (Static)
        % Create a data processor factory that can be used by the execution
        % environment to construct instances of this class.
        function factory = createFactory(numOutputs, inputFutureMap)
            
            factory = @createEncellficationProcessor;
            function dataProcessor = createEncellficationProcessor(~)
                import matlab.bigdata.internal.lazyeval.EncellificationProcessor;
                dataProcessor = EncellificationProcessor(numOutputs, inputFutureMap);
            end
        end
    end
    
    % Methods overridden in the DataProcessor interface.
    methods
        function data = process(obj, isLastOfDependencies, varargin)
            if obj.IsFinished
                data = cell(0, obj.NumOutputs);
                return;
            end
            
            isLastOfInputs = obj.InputFutureMap.mapScalars(isLastOfDependencies);
            functionInputs = obj.InputFutureMap.mapData(varargin);
            inputBuffer = obj.InputBuffer;
            inputBuffer.add(isLastOfInputs, functionInputs{:});
            
            obj.IsFinished = all(isLastOfInputs);
            if all(inputBuffer.IsBufferInitialized)
                data = num2cell(inputBuffer.getAll());
            else
                data = cell(0, obj.NumOutputs);
            end
            obj.IsMoreInputRequired = ~isLastOfDependencies;
        end
    end
    
    methods (Access = private)
        % Private constructor for factory method.
        function obj = EncellificationProcessor(numOutputs, inputFutureMap)
            import matlab.bigdata.internal.lazyeval.InputBuffer;
            obj.NumOutputs = numOutputs;
            obj.InputFutureMap = inputFutureMap;
            
            isInputSinglePartition = true(1, inputFutureMap.NumOperationInputs);
            obj.InputBuffer = InputBuffer(inputFutureMap.NumOperationInputs, isInputSinglePartition);
            
            obj.IsMoreInputRequired = true(1, inputFutureMap.NumOperationInputs);
        end
    end
end