aboutsummaryrefslogtreecommitdiff
path: root/Lib/octave/octcontainer.swg
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/octave/octcontainer.swg')
-rw-r--r--Lib/octave/octcontainer.swg42
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;
}