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,6 +3,11 @@
#include <memory> #include <memory>
class OpenCLContext {
public:
typedef std::shared_ptr<OpenCLContext> Ptr;
typedef std::weak_ptr<OpenCLContext> WeakPtr;
class OpenCLHandle { class OpenCLHandle {
public: public:
typedef std::shared_ptr<OpenCLHandle> Ptr; typedef std::shared_ptr<OpenCLHandle> Ptr;
@ -18,17 +23,17 @@ class OpenCLHandle {
OpenCLHandle(OpenCLHandle &&other) = default; OpenCLHandle(OpenCLHandle &&other) = default;
OpenCLHandle &operator=(OpenCLHandle &&other) = default; OpenCLHandle &operator=(OpenCLHandle &&other) = default;
// TODO add functions here that allow creating/deleting/using kernel function // TODO add functions here that allow creating/deleting/using kernel
// programs // function programs
private: private:
friend class OpenCLContext; friend class OpenCLContext;
OpenCLHandle(); OpenCLHandle();
OpenCLContext::WeakPtr opencl_ptr_;
}; };
class OpenCLContext {
public:
~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();