Skip to content
Snippets Groups Projects
Forked from Eclipse Projects / aidge / aidge_core
1581 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
OperatorImpl.hpp 2.32 KiB
/********************************************************************************
 * Copyright (c) 2023 CEA-List
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

#ifndef AIDGE_OPERATORIMPL_H_
#define AIDGE_OPERATORIMPL_H_

#include <cstddef>
#include <vector>
#include <memory>
#include "aidge/utils/Types.h"
#include "aidge/data/Elts.hpp"

namespace Aidge {
class Operator;

class OperatorImpl {
public:
    OperatorImpl(const Operator& op);
    virtual void forward();
    virtual void backward();

    /**
     * @brief Minimum amount of data from a specific input required by the
     * implementation to be run.
     *
     * @param inputIdx Index of the input analysed.
     * @return std::size_t
     */
    virtual Elts_t getNbRequiredData(const IOIndex_t inputIdx) const;

    // Amount of input data that cannot be overwritten during the execution.
    virtual Elts_t getNbRequiredProtected(const IOIndex_t inputIdx) const;

    // Memory required at an output for a given input size.
    virtual Elts_t getRequiredMemory(const IOIndex_t outputIdx, const std::vector<DimSize_t> &inputsSize) const;

    /**
     * @brief Total amount of consumed data from a specific input.
     *
     * @param inputIdx Index of the input analysed.
     * @return DimSize_t
     */
    virtual Elts_t getNbConsumedData(const IOIndex_t inputIdx) const;

    /**
     * @brief Total amount of produced data ready to be used on a specific output.
     *
     * @param outputIdx Index of the output analysed.
     * @return DimSize_t
     */
    virtual Elts_t getNbProducedData(const IOIndex_t outputIdx) const;

    /**
     * @brief Update the Consummer Producer system by simulating the consumption and production of i/o
     *
     */
    virtual void updateConsummerProducer();

    /**
     * @brief Reset the Consummer Producer system.
     *
     */
    virtual void resetConsummerProducer();

    virtual ~OperatorImpl() = default;

protected:
    const Operator &mOp;
    std::vector<Elts_t> mNbConsumedData;
    std::vector<Elts_t> mNbProducedData;
};
} // namespace Aidge

#endif /* AIDGE_OPERATORIMPL_H_ */