Tweaks to OpenCLContext/OpenCLHandle defs

This commit is contained in:
Stephen Seo 2021-11-15 22:10:45 +09:00
parent e07691f71d
commit b794cace6e
2 changed files with 34 additions and 31 deletions

View file

@ -1,12 +1,12 @@
#include "opencl_handle.h" #include "opencl_handle.h"
std::unique_ptr<OpenCLContext> OpenCLContext::instance_ = {}; OpenCLContext::Ptr OpenCLContext::instance_ = {};
OpenCLHandle::OpenCLHandle() { OpenCLContext::OpenCLHandle::OpenCLHandle() {
// TODO // TODO
} }
OpenCLHandle::~OpenCLHandle() { OpenCLContext::CheckRefCount(); } OpenCLContext::OpenCLHandle::~OpenCLHandle() { OpenCLContext::CheckRefCount(); }
OpenCLContext::OpenCLContext() { OpenCLContext::OpenCLContext() {
// TODO // TODO
@ -16,7 +16,7 @@ OpenCLContext::~OpenCLContext() {
// TODO // TODO
} }
OpenCLHandle::Ptr OpenCLContext::GetHandle() { OpenCLContext::OpenCLHandle::Ptr OpenCLContext::GetHandle() {
if (!instance_) { if (!instance_) {
// cannot use make_unique due to private constructor // cannot use make_unique due to private constructor
instance_ = std::unique_ptr<OpenCLContext>(new OpenCLContext()); instance_ = std::unique_ptr<OpenCLContext>(new OpenCLContext());

View file

@ -3,32 +3,37 @@
#include <memory> #include <memory>
class OpenCLHandle {
public:
typedef std::shared_ptr<OpenCLHandle> Ptr;
typedef std::weak_ptr<OpenCLHandle> WeakPtr;
~OpenCLHandle();
// no copy
OpenCLHandle(const OpenCLHandle &other) = delete;
OpenCLHandle &operator=(const OpenCLHandle &other) = delete;
// allow move
OpenCLHandle(OpenCLHandle &&other) = default;
OpenCLHandle &operator=(OpenCLHandle &&other) = default;
// TODO add functions here that allow creating/deleting/using kernel function
// programs
private:
friend class OpenCLContext;
OpenCLHandle();
};
class OpenCLContext { class OpenCLContext {
public: public:
typedef std::shared_ptr<OpenCLContext> Ptr;
typedef std::weak_ptr<OpenCLContext> WeakPtr;
class OpenCLHandle {
public:
typedef std::shared_ptr<OpenCLHandle> Ptr;
typedef std::weak_ptr<OpenCLHandle> WeakPtr;
~OpenCLHandle();
// no copy
OpenCLHandle(const OpenCLHandle &other) = delete;
OpenCLHandle &operator=(const OpenCLHandle &other) = delete;
// allow move
OpenCLHandle(OpenCLHandle &&other) = default;
OpenCLHandle &operator=(OpenCLHandle &&other) = default;
// TODO add functions here that allow creating/deleting/using kernel
// function programs
private:
friend class OpenCLContext;
OpenCLHandle();
OpenCLContext::WeakPtr opencl_ptr_;
};
~OpenCLContext(); ~OpenCLContext();
// no copy // no copy
@ -42,11 +47,9 @@ class OpenCLContext {
OpenCLHandle::Ptr GetHandle(); OpenCLHandle::Ptr GetHandle();
private: private:
friend class OpenCLHandle;
OpenCLContext(); OpenCLContext();
static std::unique_ptr<OpenCLContext> instance_; static Ptr instance_;
OpenCLHandle::WeakPtr weak_handle_; OpenCLHandle::WeakPtr weak_handle_;
static void CheckRefCount(); static void CheckRefCount();