#pragma once

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

#include <THC/THC.h>

#include <ATen/core/Generator.h>

namespace at {

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

  CAFFE2_API CUDAGenerator& copy(const Generator& from);
  CAFFE2_API CUDAGenerator& free();

  CAFFE2_API std::shared_ptr<CUDAGenerator> clone() const;
  CAFFE2_API uint64_t seed();
  CAFFE2_API uint64_t current_seed() const override;
  CAFFE2_API void set_current_seed(uint64_t seed) override;
  CAFFE2_API static DeviceType device_type();
  CAFFE2_API CUDAGenerator& manualSeedAll(uint64_t seed) override;
  CAFFE2_API void * unsafeGetTH();

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


private:
  CUDAGenerator* clone_impl() const override;
};

}
