Use std/std_vector.i instead of a poor copy in c/std_vector.i
At the very least, this gives us a working vector<bool> and allows "li_std_vector" unit test to pass. It is also just nice to reuse the existing typemaps instead of having another copy of them. As C doesn't have UTL, some parts of std_vector.i had to be excluded from it however.
This commit is contained in:
parent
29563ec98e
commit
d89a95a48c
7 changed files with 27 additions and 60 deletions
|
|
@ -17,7 +17,7 @@ int main() {
|
||||||
printf("size=%d\ncapacity=%d\n\n", Vint_size(vint), Vint_capacity(vint));
|
printf("size=%d\ncapacity=%d\n\n", Vint_size(vint), Vint_capacity(vint));
|
||||||
|
|
||||||
for (i = 0; i < Vint_size(vint); i++)
|
for (i = 0; i < Vint_size(vint); i++)
|
||||||
printf("%d%c", Vint_at(vint, i), i+1 == Vint_size(vint) ? '\n' : ',');
|
printf("%d%c", Vint_get(vint, i), i+1 == Vint_size(vint) ? '\n' : ',');
|
||||||
|
|
||||||
Vint_clear(vint);
|
Vint_clear(vint);
|
||||||
Vint_reserve(vint, 100);
|
Vint_reserve(vint, 100);
|
||||||
|
|
@ -32,7 +32,7 @@ int main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < VA_size(va); i++) {
|
for (i = 0; i < VA_size(va); i++) {
|
||||||
A *a = VA_at(va, i);
|
A *a = VA_get(va, i);
|
||||||
printf("%s %d\n", A_name_get(a), A_value_get(a));
|
printf("%s %d\n", A_name_get(a), A_value_get(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,6 @@ FAILING_CPP_TESTS := \
|
||||||
li_std_map \
|
li_std_map \
|
||||||
li_std_pair \
|
li_std_pair \
|
||||||
li_std_pair_using \
|
li_std_pair_using \
|
||||||
li_std_vector \
|
|
||||||
li_windows \
|
li_windows \
|
||||||
member_funcptr_galore \
|
member_funcptr_galore \
|
||||||
member_pointer \
|
member_pointer \
|
||||||
|
|
|
||||||
1
Lib/c/std_alloc.i
Normal file
1
Lib/c/std_alloc.i
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
%include <std/std_alloc.i>
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
%include <typemaps/fragments.swg>
|
||||||
|
%include <typemaps/swigmacros.swg>
|
||||||
|
%include <std/std_common.i>
|
||||||
|
|
||||||
%include <std_except.i>
|
%include <std_except.i>
|
||||||
|
|
||||||
%apply size_t { std::size_t };
|
%apply size_t { std::size_t };
|
||||||
|
|
|
||||||
1
Lib/c/std_container.i
Normal file
1
Lib/c/std_container.i
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
%include <std/std_container.i>
|
||||||
|
|
@ -1,58 +1,13 @@
|
||||||
/* -----------------------------------------------------------------------------
|
// Wrap const and non-const at() methods as set() and get(), this is simpler to use from C and more clear.
|
||||||
* See the LICENSE file for information on copyright, usage and redistribution
|
%define %swig_vector_methods(Type...)
|
||||||
* of SWIG, and the README file for authors - http://www.swig.org/release.html.
|
%extend {
|
||||||
*
|
void set(size_type n, const value_type& val) { self->at(n) = val; }
|
||||||
* std_vector.i
|
value_type get(size_type n) const { return self->at(n); }
|
||||||
* ----------------------------------------------------------------------------- */
|
}
|
||||||
|
%enddef
|
||||||
|
|
||||||
%include <std_common.i>
|
%define %swig_vector_methods_val(Type...)
|
||||||
|
%swig_vector_methods(Type...)
|
||||||
%{
|
%enddef
|
||||||
#include <vector>
|
|
||||||
#include <stdexcept>
|
|
||||||
%}
|
|
||||||
|
|
||||||
namespace std {
|
|
||||||
|
|
||||||
template<class T> class vector {
|
|
||||||
public:
|
|
||||||
typedef size_t size_type;
|
|
||||||
typedef T value_type;
|
|
||||||
typedef const value_type& const_reference;
|
|
||||||
vector();
|
|
||||||
vector(size_type n);
|
|
||||||
size_type size() const;
|
|
||||||
size_type capacity() const;
|
|
||||||
void reserve(size_type n);
|
|
||||||
bool empty() const;
|
|
||||||
void clear();
|
|
||||||
void push_back(const value_type& x);
|
|
||||||
const_reference at(size_type i);
|
|
||||||
};
|
|
||||||
|
|
||||||
%define specialize_std_vector(T)
|
|
||||||
template<> class vector<T> {
|
|
||||||
public:
|
|
||||||
typedef size_t size_type;
|
|
||||||
typedef T value_type;
|
|
||||||
vector();
|
|
||||||
vector(size_type n);
|
|
||||||
size_type size() const;
|
|
||||||
size_type capacity() const;
|
|
||||||
void reserve(size_type n);
|
|
||||||
bool empty() const;
|
|
||||||
void clear();
|
|
||||||
void push_back(T x) { this->push_back(x); }
|
|
||||||
T at(size_type i) { return this->at(i); }
|
|
||||||
};
|
|
||||||
%enddef
|
|
||||||
|
|
||||||
specialize_std_vector(int);
|
|
||||||
specialize_std_vector(bool);
|
|
||||||
/*specialize_std_vector(long);
|
|
||||||
specialize_std_vector(char);
|
|
||||||
specialize_std_vector(double);
|
|
||||||
specialize_std_vector(int*);
|
|
||||||
specialize_std_vector(char*);*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
%include <std/std_vector.i>
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ namespace std {
|
||||||
typedef const _Tp& const_reference;
|
typedef const _Tp& const_reference;
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
#ifndef SWIGC
|
||||||
%traits_swigtype(_Tp);
|
%traits_swigtype(_Tp);
|
||||||
%traits_enum(_Tp);
|
%traits_enum(_Tp);
|
||||||
|
|
||||||
|
|
@ -85,6 +86,7 @@ namespace std {
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector< _Tp, _Alloc >);
|
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector< _Tp, _Alloc >);
|
||||||
|
#endif // !SWIGC
|
||||||
|
|
||||||
#ifdef %swig_vector_methods
|
#ifdef %swig_vector_methods
|
||||||
// Add swig/language extra methods
|
// Add swig/language extra methods
|
||||||
|
|
@ -110,6 +112,7 @@ namespace std {
|
||||||
typedef value_type const_reference;
|
typedef value_type const_reference;
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
#ifndef SWIGC
|
||||||
%traits_swigtype(_Tp);
|
%traits_swigtype(_Tp);
|
||||||
|
|
||||||
%fragment(SWIG_Traits_frag(std::vector< _Tp*, _Alloc >), "header",
|
%fragment(SWIG_Traits_frag(std::vector< _Tp*, _Alloc >), "header",
|
||||||
|
|
@ -126,6 +129,7 @@ namespace std {
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector< _Tp*, _Alloc >);
|
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector< _Tp*, _Alloc >);
|
||||||
|
#endif // !SWIGC
|
||||||
|
|
||||||
#ifdef %swig_vector_methods_val
|
#ifdef %swig_vector_methods_val
|
||||||
// Add swig/language extra methods
|
// Add swig/language extra methods
|
||||||
|
|
@ -150,6 +154,7 @@ namespace std {
|
||||||
typedef value_type const_reference;
|
typedef value_type const_reference;
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
#ifndef SWIGC
|
||||||
%traits_swigtype(_Tp);
|
%traits_swigtype(_Tp);
|
||||||
|
|
||||||
%fragment(SWIG_Traits_frag(std::vector< _Tp const*, _Alloc >), "header",
|
%fragment(SWIG_Traits_frag(std::vector< _Tp const*, _Alloc >), "header",
|
||||||
|
|
@ -166,6 +171,7 @@ namespace std {
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector< _Tp const*, _Alloc >);
|
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector< _Tp const*, _Alloc >);
|
||||||
|
#endif // !SWIGC
|
||||||
|
|
||||||
#ifdef %swig_vector_methods_val
|
#ifdef %swig_vector_methods_val
|
||||||
// Add swig/language extra methods
|
// Add swig/language extra methods
|
||||||
|
|
@ -191,6 +197,7 @@ namespace std {
|
||||||
typedef value_type const_reference;
|
typedef value_type const_reference;
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
#ifndef SWIGC
|
||||||
%traits_swigtype(bool);
|
%traits_swigtype(bool);
|
||||||
|
|
||||||
%fragment(SWIG_Traits_frag(std::vector<bool, _Alloc >), "header",
|
%fragment(SWIG_Traits_frag(std::vector<bool, _Alloc >), "header",
|
||||||
|
|
@ -207,7 +214,7 @@ namespace std {
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<bool, _Alloc >);
|
%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<bool, _Alloc >);
|
||||||
|
#endif // !SWIGC
|
||||||
|
|
||||||
#ifdef %swig_vector_methods_val
|
#ifdef %swig_vector_methods_val
|
||||||
// Add swig/language extra methods
|
// Add swig/language extra methods
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue