From e8cc6d1a82485754ec14e1b70d3c73e71529a063 Mon Sep 17 00:00:00 2001 From: Yichao Yu Date: Sun, 15 Jun 2014 14:41:34 -0400 Subject: [PATCH] try using extern template --- src/c_wrapper/command_queue.cpp | 2 ++ src/c_wrapper/command_queue.h | 2 ++ src/c_wrapper/context.cpp | 2 ++ src/c_wrapper/context.h | 2 ++ src/c_wrapper/device.cpp | 2 ++ src/c_wrapper/device.h | 2 ++ src/c_wrapper/event.cpp | 3 +++ src/c_wrapper/event.h | 2 ++ src/c_wrapper/kernel.cpp | 2 ++ src/c_wrapper/kernel.h | 2 ++ src/c_wrapper/memory_map.cpp | 2 ++ src/c_wrapper/memory_map.h | 2 ++ src/c_wrapper/memory_object.cpp | 2 ++ src/c_wrapper/memory_object.h | 2 ++ src/c_wrapper/platform.cpp | 2 ++ src/c_wrapper/platform.h | 2 ++ src/c_wrapper/program.cpp | 2 ++ src/c_wrapper/program.h | 2 ++ src/c_wrapper/sampler.cpp | 2 ++ src/c_wrapper/sampler.h | 2 ++ 20 files changed, 41 insertions(+) diff --git a/src/c_wrapper/command_queue.cpp b/src/c_wrapper/command_queue.cpp index 4e2ee733..1f0eb1e6 100644 --- a/src/c_wrapper/command_queue.cpp +++ b/src/c_wrapper/command_queue.cpp @@ -6,6 +6,8 @@ namespace pyopencl { +template class clobj; + command_queue::~command_queue() { pyopencl_call_guarded_cleanup(clReleaseCommandQueue, this); diff --git a/src/c_wrapper/command_queue.h b/src/c_wrapper/command_queue.h index d7fcd08c..4ad5450a 100644 --- a/src/c_wrapper/command_queue.h +++ b/src/c_wrapper/command_queue.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ command_queue +extern template class clobj; + class command_queue : public clobj { public: PYOPENCL_DEF_CL_CLASS(COMMAND_QUEUE); diff --git a/src/c_wrapper/context.cpp b/src/c_wrapper/context.cpp index 9b16c87c..cd6e49ab 100644 --- a/src/c_wrapper/context.cpp +++ b/src/c_wrapper/context.cpp @@ -5,6 +5,8 @@ namespace pyopencl { +template class clobj; + context::~context() { pyopencl_call_guarded_cleanup(clReleaseContext, this); diff --git a/src/c_wrapper/context.h b/src/c_wrapper/context.h index 74a108a5..44ffc92a 100644 --- a/src/c_wrapper/context.h +++ b/src/c_wrapper/context.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ context +extern template class clobj; + class context : public clobj { public: PYOPENCL_DEF_CL_CLASS(CONTEXT); diff --git a/src/c_wrapper/device.cpp b/src/c_wrapper/device.cpp index 495c2152..54d1b7de 100644 --- a/src/c_wrapper/device.cpp +++ b/src/c_wrapper/device.cpp @@ -3,6 +3,8 @@ namespace pyopencl { +template class clobj; + device::~device() { if (false) { diff --git a/src/c_wrapper/device.h b/src/c_wrapper/device.h index 9e7ffd5e..402461eb 100644 --- a/src/c_wrapper/device.h +++ b/src/c_wrapper/device.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ device +extern template class clobj; + class device : public clobj { public: PYOPENCL_DEF_CL_CLASS(DEVICE); diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp index 8dffa034..d7373af4 100644 --- a/src/c_wrapper/event.cpp +++ b/src/c_wrapper/event.cpp @@ -5,6 +5,9 @@ #include "pyhelper.h" namespace pyopencl { + +template class clobj; + #if PYOPENCL_CL_VERSION >= 0x1010 class event_callback { std::function m_func; diff --git a/src/c_wrapper/event.h b/src/c_wrapper/event.h index 57517e2f..7f3d6759 100644 --- a/src/c_wrapper/event.h +++ b/src/c_wrapper/event.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ event +extern template class clobj; + class event : public clobj { public: PYOPENCL_DEF_CL_CLASS(EVENT); diff --git a/src/c_wrapper/kernel.cpp b/src/c_wrapper/kernel.cpp index b7f55ecb..5f9555e1 100644 --- a/src/c_wrapper/kernel.cpp +++ b/src/c_wrapper/kernel.cpp @@ -10,6 +10,8 @@ namespace pyopencl { +template class clobj; + kernel::~kernel() { pyopencl_call_guarded_cleanup(clReleaseKernel, this); diff --git a/src/c_wrapper/kernel.h b/src/c_wrapper/kernel.h index 5c52bdcc..5029d0c3 100644 --- a/src/c_wrapper/kernel.h +++ b/src/c_wrapper/kernel.h @@ -9,6 +9,8 @@ class device; // {{{ kernel +extern template class clobj; + class kernel : public clobj { public: PYOPENCL_DEF_CL_CLASS(KERNEL); diff --git a/src/c_wrapper/memory_map.cpp b/src/c_wrapper/memory_map.cpp index 3826074c..2dbbe02b 100644 --- a/src/c_wrapper/memory_map.cpp +++ b/src/c_wrapper/memory_map.cpp @@ -6,6 +6,8 @@ namespace pyopencl { +template class clobj; + memory_map::~memory_map() { if (!m_valid.exchange(false)) diff --git a/src/c_wrapper/memory_map.h b/src/c_wrapper/memory_map.h index 6c3d6c8d..85d90917 100644 --- a/src/c_wrapper/memory_map.h +++ b/src/c_wrapper/memory_map.h @@ -11,6 +11,8 @@ class event; // {{{ memory_map +extern template class clobj; + class memory_map : public clobj { private: mutable volatile std::atomic_bool m_valid; diff --git a/src/c_wrapper/memory_object.cpp b/src/c_wrapper/memory_object.cpp index a6945b21..b2f0f02d 100644 --- a/src/c_wrapper/memory_object.cpp +++ b/src/c_wrapper/memory_object.cpp @@ -4,6 +4,8 @@ namespace pyopencl { +template class clobj; + generic_info memory_object::get_info(cl_uint param_name) const { diff --git a/src/c_wrapper/memory_object.h b/src/c_wrapper/memory_object.h index b9eb25fb..5f1bb91b 100644 --- a/src/c_wrapper/memory_object.h +++ b/src/c_wrapper/memory_object.h @@ -8,6 +8,8 @@ namespace pyopencl { // {{{ memory_object +extern template class clobj; + class memory_object : public clobj { private: mutable volatile std::atomic_bool m_valid; diff --git a/src/c_wrapper/platform.cpp b/src/c_wrapper/platform.cpp index dbb6e096..b4b993e9 100644 --- a/src/c_wrapper/platform.cpp +++ b/src/c_wrapper/platform.cpp @@ -4,6 +4,8 @@ namespace pyopencl { +template class clobj; + generic_info platform::get_info(cl_uint param_name) const { diff --git a/src/c_wrapper/platform.h b/src/c_wrapper/platform.h index 3474c227..00c24fa8 100644 --- a/src/c_wrapper/platform.h +++ b/src/c_wrapper/platform.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ platform +extern template class clobj; + class platform : public clobj { public: using clobj::clobj; diff --git a/src/c_wrapper/program.cpp b/src/c_wrapper/program.cpp index b1f6d668..c3f67def 100644 --- a/src/c_wrapper/program.cpp +++ b/src/c_wrapper/program.cpp @@ -5,6 +5,8 @@ namespace pyopencl { +template class clobj; + program::~program() { pyopencl_call_guarded_cleanup(clReleaseProgram, this); diff --git a/src/c_wrapper/program.h b/src/c_wrapper/program.h index 21e93bd5..e4830427 100644 --- a/src/c_wrapper/program.h +++ b/src/c_wrapper/program.h @@ -9,6 +9,8 @@ class device; // {{{ program +extern template class clobj; + class program : public clobj { private: program_kind_type m_program_kind; diff --git a/src/c_wrapper/sampler.cpp b/src/c_wrapper/sampler.cpp index 0c6cb902..b961e00f 100644 --- a/src/c_wrapper/sampler.cpp +++ b/src/c_wrapper/sampler.cpp @@ -4,6 +4,8 @@ namespace pyopencl { +template class clobj; + sampler::~sampler() { pyopencl_call_guarded_cleanup(clReleaseSampler, this); diff --git a/src/c_wrapper/sampler.h b/src/c_wrapper/sampler.h index ed934f75..30b1508b 100644 --- a/src/c_wrapper/sampler.h +++ b/src/c_wrapper/sampler.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ sampler +extern template class clobj; + class sampler : public clobj { public: PYOPENCL_DEF_CL_CLASS(SAMPLER); -- GitLab