diff --git a/build/irix_CC.mak b/build/irix_CC.mak index 5894ff51..0436ef8a 100644 --- a/build/irix_CC.mak +++ b/build/irix_CC.mak @@ -24,7 +24,7 @@ PYINC=-I/usr/local/Python-1.5.2/include/python1.5 STLPORTINC=-I$(BOOST)/boost/compatibility/cpp_c_headers STDOPTS= -WARNOPTS=-woff 1001,1234,1682 +WARNOPTS=-woff 1001,1183,1234,1682 OPTOPTS=-g CPP=CC -LANG:std -n32 -mips4 diff --git a/example/simple_vector.cpp b/example/simple_vector.cpp index 5ac0767b..8f30121b 100644 --- a/example/simple_vector.cpp +++ b/example/simple_vector.cpp @@ -30,16 +30,24 @@ namespace { // Avoid cluttering the global namespace. } }; + void raise_vector_IndexError() { + PyErr_SetString(PyExc_IndexError, "IndexError: vector index out of range"); + throw python::error_already_set(); + } + double getitem(const std::vector& vd, std::size_t key) { + if (key < 0 || key >= vd.size()) raise_vector_IndexError(); return vd[key]; } void setitem(std::vector& vd, std::size_t key, double d) { + if (key < 0 || key >= vd.size()) raise_vector_IndexError(); std::vector::iterator vditer = vd.begin(); vditer[key] = d; } void delitem(std::vector& vd, std::size_t key) { + if (key < 0 || key >= vd.size()) raise_vector_IndexError(); std::vector::iterator vditer = vd.begin(); vd.erase(&vditer[key]); } diff --git a/example/test_simple_vector.py b/example/test_simple_vector.py index a19e205b..ca38d715 100644 --- a/example/test_simple_vector.py +++ b/example/test_simple_vector.py @@ -15,6 +15,11 @@ r'''>>> import simple_vector >>> v[1] = 40 >>> print v.as_tuple() (3.0, 40.0, 5.0) + >>> for e in v: + ... print e + 3.0 + 40.0 + 5.0 >>> del v[1] >>> print v.as_tuple() (3.0, 5.0)