#include "opencl_handle.h"
-std::unique_ptr<OpenCLContext> OpenCLContext::instance_ = {};
+OpenCLContext::Ptr OpenCLContext::instance_ = {};
-OpenCLHandle::OpenCLHandle() {
+OpenCLContext::OpenCLHandle::OpenCLHandle() {
// TODO
}
-OpenCLHandle::~OpenCLHandle() { OpenCLContext::CheckRefCount(); }
+OpenCLContext::OpenCLHandle::~OpenCLHandle() { OpenCLContext::CheckRefCount(); }
OpenCLContext::OpenCLContext() {
// TODO
// TODO
}
-OpenCLHandle::Ptr OpenCLContext::GetHandle() {
+OpenCLContext::OpenCLHandle::Ptr OpenCLContext::GetHandle() {
if (!instance_) {
// cannot use make_unique due to private constructor
instance_ = std::unique_ptr<OpenCLContext>(new OpenCLContext());
#include <memory>
-class OpenCLHandle {
+class OpenCLContext {
public:
- typedef std::shared_ptr<OpenCLHandle> Ptr;
- typedef std::weak_ptr<OpenCLHandle> WeakPtr;
+ typedef std::shared_ptr<OpenCLContext> Ptr;
+ typedef std::weak_ptr<OpenCLContext> WeakPtr;
- ~OpenCLHandle();
+ class OpenCLHandle {
+ public:
+ typedef std::shared_ptr<OpenCLHandle> Ptr;
+ typedef std::weak_ptr<OpenCLHandle> WeakPtr;
- // no copy
- OpenCLHandle(const OpenCLHandle &other) = delete;
- OpenCLHandle &operator=(const OpenCLHandle &other) = delete;
+ ~OpenCLHandle();
- // allow move
- OpenCLHandle(OpenCLHandle &&other) = default;
- OpenCLHandle &operator=(OpenCLHandle &&other) = default;
+ // no copy
+ OpenCLHandle(const OpenCLHandle &other) = delete;
+ OpenCLHandle &operator=(const OpenCLHandle &other) = delete;
- // TODO add functions here that allow creating/deleting/using kernel function
- // programs
+ // allow move
+ OpenCLHandle(OpenCLHandle &&other) = default;
+ OpenCLHandle &operator=(OpenCLHandle &&other) = default;
- private:
- friend class OpenCLContext;
+ // TODO add functions here that allow creating/deleting/using kernel
+ // function programs
- OpenCLHandle();
-};
+ private:
+ friend class OpenCLContext;
+
+ OpenCLHandle();
+
+ OpenCLContext::WeakPtr opencl_ptr_;
+ };
-class OpenCLContext {
- public:
~OpenCLContext();
// no copy
OpenCLHandle::Ptr GetHandle();
private:
- friend class OpenCLHandle;
-
OpenCLContext();
- static std::unique_ptr<OpenCLContext> instance_;
+ static Ptr instance_;
OpenCLHandle::WeakPtr weak_handle_;
static void CheckRefCount();