std::map ready for prime time (hopefully)

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4510 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Luigi Ballabio 2003-03-11 15:38:02 +00:00
commit 471f1d43d8
6 changed files with 95 additions and 134 deletions

View file

@ -1,5 +1,10 @@
Version 1.3.18 (In progress)
============================
03/11/2003: luigi
Support for std::map.
(a) Integration with scripting language (a la std::vector) for
Python, Ruby, MzScheme, and Guile;
(b) Simple wrapper for other languages
03/10/2003: beazley
Fixed problem with escape sequences in string and character constants. SWIG
wasn't parsing certain octal codes correctly.

View file

@ -263,23 +263,16 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
SCM keys() {
SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
K* key = new K(i->first);
T* val = &(i->second);
VALUE entry = rb_ary_new2(2);
VALUE k = SWIG_NewPointerObj((void *) key,k_type,1);
VALUE x = SWIG_NewPointerObj((void *) val,t_type,0);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
SCM k = SWIG_MakePtr(key,$descriptor(K *));
result = gh_cons(k,result);
}
return result;
}
*/
}
};
@ -490,21 +483,15 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
T* val = &(i->second);
VALUE entry = rb_ary_new2(2);
VALUE k = CONVERT_TO(i->first);
VALUE x = SWIG_NewPointerObj((void *) val,t_type,0);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
SCM keys() {
SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
SCM k = CONVERT_TO(i->first);
result = gh_cons(k,result);
}
return result;
}
*/
}
};
%enddef
@ -708,21 +695,16 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
SCM keys() {
SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
K* key = new K(i->first);
VALUE entry = rb_ary_new2(2);
VALUE k = SWIG_NewPointerObj((void *) key,k_type,1);
VALUE x = CONVERT_TO(i->second);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
SCM k = SWIG_MakePtr(key,$descriptor(K *));
result = gh_cons(k,result);
}
return result;
}
*/
}
};
%enddef
@ -925,17 +907,15 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
VALUE entry = rb_ary_new2(2);
rb_ary_store(entry,0,CONVERT_K_TO(i->first));
rb_ary_store(entry,1,CONVERT_T_TO(i->second));
rb_yield(entry);
SCM keys() {
SCM result = SCM_EOL;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
SCM k = CONVERT_K_TO(i->first);
result = gh_cons(k,result);
}
return result;
}
*/
}
};
%enddef

View file

@ -263,23 +263,16 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
Scheme_Object* keys() {
Scheme_Object* result = scheme_null;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
K* key = new K(i->first);
T* val = &(i->second);
VALUE entry = rb_ary_new2(2);
VALUE k = SWIG_NewPointerObj((void *) key,k_type,1);
VALUE x = SWIG_NewPointerObj((void *) val,t_type,0);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
Scheme_Object* k = SWIG_MakePtr(key,$descriptor(K *));
result = scheme_make_pair(k,result);
}
return result;
}
*/
}
};
@ -490,21 +483,15 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
T* val = &(i->second);
VALUE entry = rb_ary_new2(2);
VALUE k = CONVERT_TO(i->first);
VALUE x = SWIG_NewPointerObj((void *) val,t_type,0);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
Scheme_Object* keys() {
Scheme_Object* result = scheme_null;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
Scheme_Object* k = CONVERT_TO(i->first);
result = scheme_make_pair(k,result);
}
return result;
}
*/
}
};
%enddef
@ -708,21 +695,16 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
Scheme_Object* keys() {
Scheme_Object* result = scheme_null;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
K* key = new K(i->first);
VALUE entry = rb_ary_new2(2);
VALUE k = SWIG_NewPointerObj((void *) key,k_type,1);
VALUE x = CONVERT_TO(i->second);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
Scheme_Object* k = SWIG_MakePtr(key,$descriptor(K *));
result = scheme_make_pair(k,result);
}
return result;
}
*/
}
};
%enddef
@ -925,17 +907,15 @@ namespace std {
std::map<K,T >::iterator i = self->find(key);
return i != self->end();
}
/*
void each() {
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
VALUE entry = rb_ary_new2(2);
rb_ary_store(entry,0,CONVERT_K_TO(i->first));
rb_ary_store(entry,1,CONVERT_T_TO(i->second));
rb_yield(entry);
Scheme_Object* keys() {
Scheme_Object* result = scheme_null;
for (std::map<K,T >::reverse_iterator i=$1.rbegin();
i!=$1.rend(); ++i) {
Scheme_Object* k = CONVERT_K_TO(i->first);
result = scheme_make_pair(k,result);
}
return result;
}
*/
}
};
%enddef

View file

@ -274,32 +274,30 @@ namespace std {
}
PyObject* keys() {
PyObject* keyList = PyList_New(self->size());
swig_type_info* type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
K* ptr = new K(i->first);
PyList_SetItem(keyList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(K *),1));
}
return keyList;
}
PyObject* values() {
PyObject* valueList = PyList_New(self->size());
swig_type_info* type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
T* ptr = new T(i->second);
PyList_SetItem(valueList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(T *),1));
}
return valueList;
}
PyObject* items() {
PyObject* itemList = PyList_New(self->size());
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
@ -308,10 +306,10 @@ namespace std {
PyObject* item = PyTuple_New(2);
PyTuple_SetItem(item,0,
SWIG_NewPointerObj((void *) k_ptr,
k_type,1));
$descriptor(K *),1));
PyTuple_SetItem(item,1,
SWIG_NewPointerObj((void *) t_ptr,
t_type,1));
$descriptor(T *),1));
PyList_SetItem(itemList,j,item);
}
return itemList;
@ -324,13 +322,13 @@ namespace std {
PyObject* __iter__() {
%#if PY_VERSION_HEX >= 0x02020000
PyObject* keyList = PyList_New(self->size());
swig_type_info* type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
K* ptr = new K(i->first);
PyList_SetItem(keyList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(K *),1));
}
PyObject* iter = PyObject_GetIter(keyList);
Py_DECREF(keyList);
@ -551,19 +549,18 @@ namespace std {
}
PyObject* values() {
PyObject* valueList = PyList_New(self->size());
swig_type_info* type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
T* ptr = new T(i->second);
PyList_SetItem(valueList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(T *),1));
}
return valueList;
}
PyObject* items() {
PyObject* itemList = PyList_New(self->size());
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
@ -573,7 +570,7 @@ namespace std {
CONVERT_TO(i->first));
PyTuple_SetItem(item,1,
SWIG_NewPointerObj((void *) t_ptr,
t_type,1));
$descriptor(T *),1));
PyList_SetItem(itemList,j,item);
}
return itemList;
@ -799,13 +796,13 @@ namespace std {
}
PyObject* keys() {
PyObject* keyList = PyList_New(self->size());
swig_type_info* type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
K* ptr = new K(i->first);
PyList_SetItem(keyList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(K *),1));
}
return keyList;
}
@ -821,7 +818,6 @@ namespace std {
}
PyObject* items() {
PyObject* itemList = PyList_New(self->size());
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
@ -829,7 +825,7 @@ namespace std {
PyObject* item = PyTuple_New(2);
PyTuple_SetItem(item,0,
SWIG_NewPointerObj((void *) k_ptr,
k_type,1));
$descriptor(K *),1));
PyTuple_SetItem(item,1,
CONVERT_TO(i->second));
PyList_SetItem(itemList,j,item);
@ -844,13 +840,13 @@ namespace std {
PyObject* __iter__() {
%#if PY_VERSION_HEX >= 0x02020000
PyObject* keyList = PyList_New(self->size());
swig_type_info* type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
K* ptr = new K(i->first);
PyList_SetItem(keyList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(K *),1));
}
PyObject* iter = PyObject_GetIter(keyList);
Py_DECREF(keyList);

View file

@ -217,38 +217,38 @@ namespace std {
}
VALUE keys() {
VALUE keyList = rb_ary_new2(self->size());
swig_type_info* type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
K* ptr = new K(i->first);
rb_ary_store(keyList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(K *),1));
}
return keyList;
}
VALUE values() {
VALUE valueList = rb_ary_new2(self->size());
swig_type_info* type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
T* ptr = new T(i->second);
rb_ary_store(valueList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(T *),1));
}
return valueList;
}
void each() {
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
K* key = new K(i->first);
T* val = &(i->second);
VALUE entry = rb_ary_new2(2);
VALUE k = SWIG_NewPointerObj((void *) key,k_type,1);
VALUE x = SWIG_NewPointerObj((void *) val,t_type,0);
VALUE k = SWIG_NewPointerObj((void *) key,
$descriptor(K *),1);
VALUE x = SWIG_NewPointerObj((void *) val,
$descriptor(T *),0);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
@ -431,24 +431,24 @@ namespace std {
}
VALUE values() {
VALUE valueList = rb_ary_new2(self->size());
swig_type_info* type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
T* ptr = new T(i->second);
rb_ary_store(valueList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(T *),1));
}
return valueList;
}
void each() {
swig_type_info* t_type = SWIG_TypeQuery(#T " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
T* val = &(i->second);
VALUE entry = rb_ary_new2(2);
VALUE k = CONVERT_TO(i->first);
VALUE x = SWIG_NewPointerObj((void *) val,t_type,0);
VALUE x = SWIG_NewPointerObj((void *) val,
$descriptor(T *),0);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);
rb_yield(entry);
@ -619,13 +619,13 @@ namespace std {
}
VALUE keys() {
VALUE keyList = rb_ary_new2(self->size());
swig_type_info* type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
unsigned int j;
for (i=self->begin(), j=0; i!=self->end(); ++i, ++j) {
K* ptr = new K(i->first);
rb_ary_store(keyList,j,
SWIG_NewPointerObj((void *) ptr,type,1));
SWIG_NewPointerObj((void *) ptr,
$descriptor(K *),1));
}
return keyList;
}
@ -640,12 +640,12 @@ namespace std {
return valueList;
}
void each() {
swig_type_info* k_type = SWIG_TypeQuery(#K " *");
std::map<K,T >::iterator i;
for (i=self->begin(); i!=self->end(); ++i) {
K* key = new K(i->first);
VALUE entry = rb_ary_new2(2);
VALUE k = SWIG_NewPointerObj((void *) key,k_type,1);
VALUE k = SWIG_NewPointerObj((void *) key,
$descriptor(K *),1);
VALUE x = CONVERT_TO(i->second);
rb_ary_store(entry,0,k);
rb_ary_store(entry,1,x);

View file

@ -203,10 +203,10 @@ namespace std {
throw std::out_of_range("vector index out of range");
}
void each() {
swig_type_info* type = SWIG_TypeQuery(#T " *");
for (unsigned int i=0; i<self->size(); i++) {
T* x = &((*self)[i]);
rb_yield(SWIG_NewPointerObj((void *) x, type, 0));
rb_yield(SWIG_NewPointerObj((void *) x,
$descriptor(T *), 0));
}
}
}