mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Fix up the SWIG wrapper for GncOptionDBPtr.
Thanks to Flexo@stackoverflow for https://stackoverflow.com/questions/27693812/how-to-handle-unique-ptrs-with-swig 5 years later, why isn't this in SWIG yet?
This commit is contained in:
parent
4146251cc7
commit
0a13b4c518
@ -1,7 +1,42 @@
|
|||||||
/*
|
/*
|
||||||
* Temporary swig interface file while developing C++ options.
|
* Temporary swig interface file while developing C++ options.
|
||||||
|
*
|
||||||
|
* unique_ptr SWIG wrapper from https://stackoverflow.com/questions/27693812/how-to-handle-unique-ptrs-with-swig
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
namespace std {
|
||||||
|
%feature("novaluewrapper") unique_ptr;
|
||||||
|
template <typename Type>
|
||||||
|
struct unique_ptr {
|
||||||
|
typedef Type* pointer;
|
||||||
|
|
||||||
|
explicit unique_ptr( pointer Ptr );
|
||||||
|
unique_ptr (unique_ptr&& Right);
|
||||||
|
template<class Type2, Class Del2> unique_ptr( unique_ptr<Type2, Del2>&& Right );
|
||||||
|
unique_ptr( const unique_ptr& Right) = delete;
|
||||||
|
|
||||||
|
|
||||||
|
pointer operator-> () const;
|
||||||
|
pointer release ();
|
||||||
|
void reset (pointer __p=pointer());
|
||||||
|
void swap (unique_ptr &__u);
|
||||||
|
pointer get () const;
|
||||||
|
operator bool () const;
|
||||||
|
|
||||||
|
~unique_ptr();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
%define wrap_unique_ptr(Name, Type)
|
||||||
|
%template(Name) std::unique_ptr<Type>;
|
||||||
|
%newobject std::unique_ptr<Type>::release;
|
||||||
|
|
||||||
|
%typemap(out) std::unique_ptr<Type> %{
|
||||||
|
$result = SWIG_NewPointerObj(new $1_ltype(std::move($1)), $&1_descriptor, SWIG_POINTER_OWN);
|
||||||
|
%}
|
||||||
|
|
||||||
|
%enddef
|
||||||
|
|
||||||
%module sw_gnc_optiondb
|
%module sw_gnc_optiondb
|
||||||
%{
|
%{
|
||||||
#include <libguile.h>
|
#include <libguile.h>
|
||||||
@ -15,4 +50,6 @@ extern "C" SCM scm_init_sw_gnc_optiondb_module(void);
|
|||||||
%ignore OptionUIItem;
|
%ignore OptionUIItem;
|
||||||
%ignore GncOption;
|
%ignore GncOption;
|
||||||
|
|
||||||
|
wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
|
||||||
|
|
||||||
%include "gnc-optiondb.hpp"
|
%include "gnc-optiondb.hpp"
|
||||||
|
@ -37,10 +37,9 @@
|
|||||||
|
|
||||||
(define (test-gnc-make-text-option)
|
(define (test-gnc-make-text-option)
|
||||||
(test-begin "test-gnc-test-string-option")
|
(test-begin "test-gnc-test-string-option")
|
||||||
(let* ((option-db (new-GncOptionDB))
|
(let* ((option-db (gnc-option-db-new))
|
||||||
(string-opt (gnc-register-string-option option-db "foo" "bar" "baz"
|
(string-opt (gnc-register-string-option option-db "foo" "bar" "baz"
|
||||||
"Phony Option" "waldo")))
|
"Phony Option" "waldo")))
|
||||||
(test-equal (GncOptionDB-lookup-option option-db "foo" "bar") "waldo")
|
(test-equal (GncOptionDB-lookup-option (GncOptionDBPtr-get option-db) "foo" "bar") "waldo"))
|
||||||
(delete-GncOptionDB option-db))
|
|
||||||
|
|
||||||
(test-end "test-gnc-make-string-option"))
|
(test-end "test-gnc-make-string-option"))
|
||||||
|
Loading…
Reference in New Issue
Block a user