Fix STL wrappers to not generate <: digraphs.

For example std::vector<::X::Y> was sometimes generated, now
corrected to std::vector< ::X::Y >.
This commit is contained in:
William S Fulton 2015-12-12 14:05:05 +00:00
commit 6b4e57245d
33 changed files with 339 additions and 303 deletions

View file

@ -5,6 +5,11 @@ See the RELEASENOTES file for a summary of changes in each release.
Version 3.0.8 (in progress) Version 3.0.8 (in progress)
=========================== ===========================
2015-12-12: wsfulton
Fix STL wrappers to not generate <: digraphs.
For example std::vector<::X::Y> was sometimes generated, now
corrected to std::vector< ::X::Y >.
2015-11-25: wsfulton 2015-11-25: wsfulton
[Ruby] STL ranges and slices fixes. [Ruby] STL ranges and slices fixes.

View file

@ -60,3 +60,20 @@ int product3(const std::pair<int, int> *p) {
%} %}
// Test that the digraph <::aa::Holder> is not generated for stl containers
%include <std_pair.i>
%inline %{
namespace aa {
struct Holder {
Holder(int n = 0) : number(n) {}
int number;
};
}
%}
%template(PairTest) std::pair< ::aa::Holder, int >;
%inline %{
std::pair< ::aa::Holder, int > pair1(std::pair< ::aa::Holder, int > x) { return x; }
%}

View file

@ -108,3 +108,25 @@ const std::vector<const Struct *> & vecstructconstptr(const std::vector<const St
std::vector< swig::LANGUAGE_OBJ > LanguageVector; std::vector< swig::LANGUAGE_OBJ > LanguageVector;
} }
#endif #endif
// Test that the digraph <::aa::Holder> is not generated
%include <std_vector.i>
%inline %{
namespace aa {
struct Holder {
Holder(int n = 0) : number(n) {}
int number;
};
}
%}
#if !defined(SWIGOCTAVE)
// To fix: something different in Octave is preventing this from working
%template(VectorTest) std::vector< ::aa::Holder >;
%inline %{
std::vector< ::aa::Holder > vec1(std::vector< ::aa::Holder > x) { return x; }
%}
#endif

View file

@ -109,8 +109,7 @@ namespace std {
} }
%typemap(out) map<K,T> { %typemap(out) map<K,T> {
SCM alist = SCM_EOL; SCM alist = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$i.rbegin(); for (std::map< K, T >::reverse_iterator i=$i.rbegin(); i!=$i.rend(); ++i) {
i!=$i.rend(); ++i) {
K* key = new K(i->first); K* key = new K(i->first);
T* val = new T(i->second); T* val = new T(i->second);
SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1); SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
@ -251,8 +250,7 @@ namespace std {
} }
SCM keys() { SCM keys() {
SCM result = SCM_EOL; SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=self->rbegin(); for (std::map< K, T >::reverse_iterator i=self->rbegin(); i!=self->rend(); ++i) {
i!=self->rend(); ++i) {
K* key = new K(i->first); K* key = new K(i->first);
SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1); SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
result = scm_cons(k,result); result = scm_cons(k,result);
@ -338,8 +336,7 @@ namespace std {
} }
%typemap(out) map<K,T> { %typemap(out) map<K,T> {
SCM alist = SCM_EOL; SCM alist = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin(); for (std::map< K, T >::reverse_iterator i=$1.rbegin(); i!=$1.rend(); ++i) {
i!=$1.rend(); ++i) {
T* val = new T(i->second); T* val = new T(i->second);
SCM k = CONVERT_TO(i->first); SCM k = CONVERT_TO(i->first);
SCM x = SWIG_NewPointerObj(val,$descriptor(T *), 1); SCM x = SWIG_NewPointerObj(val,$descriptor(T *), 1);
@ -471,8 +468,7 @@ namespace std {
} }
SCM keys() { SCM keys() {
SCM result = SCM_EOL; SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=self->rbegin(); for (std::map< K, T >::reverse_iterator i=self->rbegin(); i!=self->rend(); ++i) {
i!=self->rend(); ++i) {
SCM k = CONVERT_TO(i->first); SCM k = CONVERT_TO(i->first);
result = scm_cons(k,result); result = scm_cons(k,result);
} }
@ -552,8 +548,7 @@ namespace std {
} }
%typemap(out) map<K,T> { %typemap(out) map<K,T> {
SCM alist = SCM_EOL; SCM alist = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin(); for (std::map< K, T >::reverse_iterator i=$1.rbegin(); i!=$1.rend(); ++i) {
i!=$1.rend(); ++i) {
K* key = new K(i->first); K* key = new K(i->first);
SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1); SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
SCM x = CONVERT_TO(i->second); SCM x = CONVERT_TO(i->second);
@ -683,8 +678,7 @@ namespace std {
} }
SCM keys() { SCM keys() {
SCM result = SCM_EOL; SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=self->rbegin(); for (std::map< K, T >::reverse_iterator i=self->rbegin(); i!=self->rend(); ++i) {
i!=self->rend(); ++i) {
K* key = new K(i->first); K* key = new K(i->first);
SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1); SCM k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
result = scm_cons(k,result); result = scm_cons(k,result);
@ -769,8 +763,7 @@ namespace std {
} }
%typemap(out) map<K,T> { %typemap(out) map<K,T> {
SCM alist = SCM_EOL; SCM alist = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin(); for (std::map< K, T >::reverse_iterator i=$1.rbegin(); i!=$1.rend(); ++i) {
i!=$1.rend(); ++i) {
SCM k = CONVERT_K_TO(i->first); SCM k = CONVERT_K_TO(i->first);
SCM x = CONVERT_T_TO(i->second); SCM x = CONVERT_T_TO(i->second);
SCM entry = scm_cons(k,x); SCM entry = scm_cons(k,x);
@ -895,8 +888,7 @@ namespace std {
} }
SCM keys() { SCM keys() {
SCM result = SCM_EOL; SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=self->rbegin(); for (std::map< K, T >::reverse_iterator i=self->rbegin(); i!=self->rend(); ++i) {
i!=self->rend(); ++i) {
SCM k = CONVERT_K_TO(i->first); SCM k = CONVERT_K_TO(i->first);
result = scm_cons(k,result); result = scm_cons(k,result);
} }