diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2022-07-02 16:06:32 +0100 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2022-07-02 16:17:18 +0100 |
commit | 299880e6a658934d39ae3b53159a3b61f1051c16 (patch) | |
tree | b532cccf91de7a90601555e15092c5d5350f58f6 /Examples/test-suite/cpp11_std_unique_ptr.i | |
parent | 1993b334a6583aaec1ce28000c3b3a1ae0406d5d (diff) | |
download | swig-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.i | 53 |
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 |