summaryrefslogtreecommitdiff
path: root/Examples/test-suite/cpp11_std_unique_ptr.i
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2022-07-02 16:06:32 +0100
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2022-07-02 16:17:18 +0100
commit299880e6a658934d39ae3b53159a3b61f1051c16 (patch)
treeb532cccf91de7a90601555e15092c5d5350f58f6 /Examples/test-suite/cpp11_std_unique_ptr.i
parent1993b334a6583aaec1ce28000c3b3a1ae0406d5d (diff)
downloadswig-299880e6a658934d39ae3b53159a3b61f1051c16.tar.gz
Add std::unique support
Simple copy of current auto_ptr support (just suppport for functions returning std::unique_ptr). Closes #1722
Diffstat (limited to 'Examples/test-suite/cpp11_std_unique_ptr.i')
-rw-r--r--Examples/test-suite/cpp11_std_unique_ptr.i53
1 files changed, 53 insertions, 0 deletions
diff --git a/Examples/test-suite/cpp11_std_unique_ptr.i b/Examples/test-suite/cpp11_std_unique_ptr.i
new file mode 100644
index 000000000..518d9be6e
--- /dev/null
+++ b/Examples/test-suite/cpp11_std_unique_ptr.i
@@ -0,0 +1,53 @@
+%module cpp11_std_unique_ptr
+
+#if defined(SWIGCSHARP) || defined(SWIGJAVA) || defined(SWIGPYTHON) || defined(SWIGRUBY)
+
+%include "std_unique_ptr.i"
+
+%unique_ptr(Klass)
+
+%inline %{
+#include <memory>
+#include <string>
+#include "swig_examples_lock.h"
+
+class Klass {
+public:
+ explicit Klass(const char* label) :
+ m_label(label)
+ {
+ SwigExamples::Lock lock(critical_section);
+ total_count++;
+ }
+
+ const char* getLabel() const { return m_label.c_str(); }
+
+ ~Klass()
+ {
+ SwigExamples::Lock lock(critical_section);
+ total_count--;
+ }
+
+ static int getTotal_count() { return total_count; }
+
+private:
+ static SwigExamples::CriticalSection critical_section;
+ static int total_count;
+
+ std::string m_label;
+};
+
+SwigExamples::CriticalSection Klass::critical_section;
+int Klass::total_count = 0;
+
+%}
+
+%inline %{
+
+std::unique_ptr<Klass> makeKlassUniquePtr(const char* label) {
+ return std::unique_ptr<Klass>(new Klass(label));
+}
+
+%}
+
+#endif