blob: 7c6ab1a63c09480f03c0df1e8103e03a88d6e577 [file] [log] [blame]
#pragma once
// The InputBuffer class accumulates a list of Variables for use by a
// function. It implements logic to avoid modifying the passed
// values in-place (adding an input twice will accumulate the result).
// This behaviour needed and used only in backward graphs.
#include <Python.h>
#include <vector>
#include <utility>
#include <memory>
#include <THPP/THPP.h>
#include "torch/csrc/autograd/variable.h"
namespace torch { namespace autograd {
struct InputBuffer {
explicit InputBuffer(size_t size);
InputBuffer(const InputBuffer& other) = delete;
InputBuffer(InputBuffer&& other) = default;
// Accumulates the variable at a specified index.
void add(size_t idx, std::shared_ptr<Variable>&& var);
int device() const;
// Returns the inputs as a list of variables. Destroys given InputBuffer.
static std::vector<std::shared_ptr<Variable>> variables(InputBuffer&& buffer);
private:
// (Variable, version at save)
std::vector<std::pair<std::shared_ptr<Variable>, int>> buffer;
};
}} // namespace torch::autograd