#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 {
  CUDAGenerator(Context * context);
  CAFFE2_API virtual ~CUDAGenerator();

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

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

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

};

}
