#pragma once

// @generated by aten/src/ATen/gen.py

#include <TH/TH.h>

#include <ATen/core/Generator.h>

namespace at {

class Context;
struct CPUGenerator : public Generator {
  CAFFE2_API CPUGenerator(Context * context);
  CAFFE2_API virtual ~CPUGenerator();

  CAFFE2_API virtual CPUGenerator& copy(const Generator& from) override;
  CAFFE2_API virtual CPUGenerator& free() override;

  CAFFE2_API virtual uint64_t seed() override;
  CAFFE2_API virtual uint64_t initialSeed() override;
  CAFFE2_API virtual CPUGenerator& manualSeed(uint64_t seed) override;
  CAFFE2_API virtual CPUGenerator& manualSeedAll(uint64_t seed) override;
  CAFFE2_API virtual void * unsafeGetTH() override;

//TODO(zach): figure out friends later
public:
  Context * context;
  THGenerator * generator;
};

}
