diff options
Diffstat (limited to 'Lib/octave/octcontainer.swg')
-rw-r--r-- | Lib/octave/octcontainer.swg | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/Lib/octave/octcontainer.swg b/Lib/octave/octcontainer.swg index 310a849d9..97a345eba 100644 --- a/Lib/octave/octcontainer.swg +++ b/Lib/octave/octcontainer.swg @@ -11,12 +11,6 @@ * be the case. * ----------------------------------------------------------------------------- */ -%{ -#include <climits> -#include <iostream> -%} - - #if !defined(SWIG_NO_EXPORT_ITERATOR_METHODS) # if !defined(SWIG_EXPORT_ITERATOR_METHODS) # define SWIG_EXPORT_ITERATOR_METHODS SWIG_EXPORT_ITERATOR_METHODS @@ -64,7 +58,6 @@ namespace swig { %fragment("OctSequence_Base","header",fragment="<stddef.h>") { -%#include <functional> namespace std { template <> @@ -73,7 +66,11 @@ namespace std { bool operator()(const octave_value& v, const octave_value& w) const { +%#if SWIG_OCTAVE_PREREQ(7,0,0) + octave_value res = octave::binary_op(octave_value::op_le,v,w); +%#else octave_value res = do_binary_op(octave_value::op_le,v,w); +%#endif return res.is_true(); } }; @@ -109,7 +106,7 @@ namespace swig { template <class Sequence, class Difference> inline typename Sequence::iterator - getpos(Sequence* self, Difference i) { + getpos(Sequence* self, Difference i) { typename Sequence::iterator pos = self->begin(); std::advance(pos, check_index(i,self->size())); return pos; @@ -117,7 +114,7 @@ namespace swig { template <class Sequence, class Difference> inline typename Sequence::const_iterator - cgetpos(const Sequence* self, Difference i) { + cgetpos(const Sequence* self, Difference i) { typename Sequence::const_iterator pos = self->begin(); std::advance(pos, check_index(i,self->size())); return pos; @@ -143,25 +140,29 @@ namespace swig { template <class Sequence, class Difference, class InputSeq> inline void - setslice(Sequence* self, Difference i, Difference j, const InputSeq& v) { + setslice(Sequence* self, Difference i, Difference j, const InputSeq& is) { typename Sequence::size_type size = self->size(); typename Sequence::size_type ii = swig::check_index(i, size, true); typename Sequence::size_type jj = swig::slice_index(j, size); if (jj < ii) jj = ii; size_t ssize = jj - ii; - if (ssize <= v.size()) { + if (ssize <= is.size()) { + // expanding/staying the same size typename Sequence::iterator sb = self->begin(); - typename InputSeq::const_iterator vmid = v.begin(); + typename InputSeq::const_iterator vmid = is.begin(); std::advance(sb,ii); std::advance(vmid, jj - ii); - self->insert(std::copy(v.begin(), vmid, sb), vmid, v.end()); + self->insert(std::copy(is.begin(), vmid, sb), vmid, is.end()); } else { + // shrinking typename Sequence::iterator sb = self->begin(); typename Sequence::iterator se = self->begin(); std::advance(sb,ii); std::advance(se,jj); self->erase(sb,se); - self->insert(sb, v.begin(), v.end()); + sb = self->begin(); + std::advance(sb,ii); + self->insert(sb, is.begin(), is.end()); } } @@ -205,7 +206,7 @@ namespace swig return swig::as<T>(item); } catch (const std::exception& e) { char msg[1024]; - sprintf(msg, "in sequence element %d ", _index); + SWIG_snprintf(msg, sizeof(msg), "in sequence element %d ", _index); if (!Octave_Error_Occurred()) { %type_error(swig::type_name<T>()); } @@ -576,8 +577,17 @@ namespace swig { } else { return octseq.check() ? SWIG_OK : SWIG_ERROR; } - } catch (std::exception& e) { + } +%#if SWIG_OCTAVE_PREREQ(6,0,0) + catch (octave::execution_exception& exec) { + } +%#endif + catch (std::exception& e) { +%#if SWIG_OCTAVE_PREREQ(6,0,0) + if (seq) // Know that octave is not in an error state +%#else if (seq&&!error_state) +%#endif error("swig type error: %s",e.what()); return SWIG_ERROR; } |