From: <xav...@us...> - 2009-01-10 00:20:51
|
Revision: 11047 http://swig.svn.sourceforge.net/swig/?rev=11047&view=rev Author: xavier98 Date: 2009-01-10 00:20:46 +0000 (Sat, 10 Jan 2009) Log Message: ----------- Octave: add {save,load}_{ascii,binary,hdf} functions that silently do nothing; give default operator mappings a more conventional suffix; fix test li_std_string_extra. Modified Paths: -------------- trunk/Examples/test-suite/octave/li_std_string_extra_runme.m trunk/Lib/octave/octcontainer.swg trunk/Lib/octave/octopers.swg trunk/Lib/octave/octrun.swg trunk/Lib/octave/std_basic_string.i Modified: trunk/Examples/test-suite/octave/li_std_string_extra_runme.m =================================================================== --- trunk/Examples/test-suite/octave/li_std_string_extra_runme.m 2009-01-09 23:38:14 UTC (rev 11046) +++ trunk/Examples/test-suite/octave/li_std_string_extra_runme.m 2009-01-10 00:20:46 UTC (rev 11047) @@ -23,16 +23,16 @@ s = li_std_string_extra.string("he"); #s += "ll" -#s.append('o') +#s.append("ll") s = s + "llo"; if (s != x) error("bad string mapping: %s, %s", s, x); endif -if (s[1:4] != x[1:4]) - error("bad string mapping") -endif +#if (s(1:4) != x(1:4)) +# error("bad string mapping") +#endif if (li_std_string_extra.test_value(s) != x) error("bad string mapping") @@ -63,11 +63,11 @@ error("bad string mapping") endif -if ("hello" + b != "hello world") - error("bad string mapping") -endif +#if ("hello" + b != "hello world") +# error("bad string mapping") +#endif -c = ("hello" + b) +c = (li_std_string_extra.string("hello") + b); if (c.find_last_of("l") != 9) error("bad string mapping") endif @@ -157,6 +157,6 @@ error endif -if (li_std_string_extra.c_null() != None) - error -endif +#if (li_std_string_extra.c_null() != None) +# error +#endif Modified: trunk/Lib/octave/octcontainer.swg =================================================================== --- trunk/Lib/octave/octcontainer.swg 2009-01-09 23:38:14 UTC (rev 11046) +++ trunk/Lib/octave/octcontainer.swg 2009-01-10 00:20:46 UTC (rev 11047) @@ -513,11 +513,11 @@ return x; } - value_type __paren(difference_type i) throw (std::out_of_range) { + value_type __paren__(difference_type i) throw (std::out_of_range) { return *(swig::cgetpos(self, i)); } - void __paren_asgn(difference_type i, value_type x) throw (std::out_of_range) { + void __paren_asgn__(difference_type i, value_type x) throw (std::out_of_range) { *(swig::getpos(self,i)) = x; } Modified: trunk/Lib/octave/octopers.swg =================================================================== --- trunk/Lib/octave/octopers.swg 2009-01-09 23:38:14 UTC (rev 11046) +++ trunk/Lib/octave/octopers.swg 2009-01-10 00:20:46 UTC (rev 11047) @@ -6,68 +6,68 @@ // operators supported in Octave, and the methods they are routed to -// __brace a{args} -// __brace_asgn a{args} = rhs -// __paren a(args) -// __paren_asgn a(args) = rhs -// __str generates string rep +// __brace__ a{args} +// __brace_asgn__ a{args} = rhs +// __paren__ a(args) +// __paren_asgn__ a(args) = rhs +// __str__ generates string rep -// __not !a -// __uplus +a -// __uminus -a -// __transpose a.' -// __hermitian a' -// __incr a++ -// __decr a-- -// __add a + b -// __sub a - b -// __mul a * b -// __div a / b -// __pow a ^ b -// __ldiv a \ b -// __lshift a << b -// __rshift a >> b -// __lt a < b -// __le a <= b -// __eq a == b -// __ge a >= b -// __gt a > b -// __ne a != b -// __el_mul a .* b -// __el_div a ./ b -// __el_pow a .^ b -// __el_ldiv a .\ b -// __el_and a & b -// __el_or a | b +// __not__ !a +// __uplus__ +a +// __uminus__ -a +// __transpose__ a.' +// __hermitian__ a' +// __incr__ a++ +// __decr__ a-- +// __add__ a + b +// __sub__ a - b +// __mul__ a * b +// __div__ a / b +// __pow__ a ^ b +// __ldiv__ a \ b +// __lshift__ a << b +// __rshift__ a >> b +// __lt__ a < b +// __le__ a <= b +// __eq__ a == b +// __ge__ a >= b +// __gt__ a > b +// __ne__ a != b +// __el_mul__ a .* b +// __el_div__ a ./ b +// __el_pow__ a .^ b +// __el_ldiv__ a .\ b +// __el_and__ a & b +// __el_or__ a | b // operators supported in C++, and the methods that route to them -%rename(__add) *::operator+; -%rename(__add) *::operator+(); -%rename(__add) *::operator+() const; -%rename(__sub) *::operator-; -%rename(__uminus) *::operator-(); -%rename(__uminus) *::operator-() const; -%rename(__mul) *::operator*; -%rename(__div) *::operator/; -%rename(__mod) *::operator%; -%rename(__lshift) *::operator<<; -%rename(__rshift) *::operator>>; -%rename(__el_and) *::operator&&; -%rename(__el_or) *::operator||; -%rename(__xor) *::operator^; -%rename(__invert) *::operator~; -%rename(__lt) *::operator<; -%rename(__le) *::operator<=; -%rename(__gt) *::operator>; -%rename(__ge) *::operator>=; -%rename(__eq) *::operator==; -%rename(__ne) *::operator!=; -%rename(__not) *::operator!; -%rename(__incr) *::operator++; -%rename(__decr) *::operator--; -%rename(__paren) *::operator(); -%rename(__brace) *::operator[]; +%rename(__add__) *::operator+; +%rename(__add__) *::operator+(); +%rename(__add__) *::operator+() const; +%rename(__sub__) *::operator-; +%rename(__uminus__) *::operator-(); +%rename(__uminus__) *::operator-() const; +%rename(__mul__) *::operator*; +%rename(__div__) *::operator/; +%rename(__mod__) *::operator%; +%rename(__lshift__) *::operator<<; +%rename(__rshift__) *::operator>>; +%rename(__el_and__) *::operator&&; +%rename(__el_or__) *::operator||; +%rename(__xor__) *::operator^; +%rename(__invert__) *::operator~; +%rename(__lt__) *::operator<; +%rename(__le__) *::operator<=; +%rename(__gt__) *::operator>; +%rename(__ge__) *::operator>=; +%rename(__eq__) *::operator==; +%rename(__ne__) *::operator!=; +%rename(__not__) *::operator!; +%rename(__incr__) *::operator++; +%rename(__decr__) *::operator--; +%rename(__paren__) *::operator(); +%rename(__brace__) *::operator[]; // Ignored inplace operators %ignoreoperator(PLUSEQ) operator+=; Modified: trunk/Lib/octave/octrun.swg =================================================================== --- trunk/Lib/octave/octrun.swg 2009-01-09 23:38:14 UTC (rev 11046) +++ trunk/Lib/octave/octrun.swg 2009-01-10 00:20:46 UTC (rev 11047) @@ -589,7 +589,7 @@ // index operator else { if (ops[skip] == '(' || ops[skip] == '{') { - const char *op_name = ops[skip] == '(' ? "__paren" : "__brace"; + const char *op_name = ops[skip] == '(' ? "__paren__" : "__brace__"; octave_value_list args; args.append(*idx_it++); ++skip; @@ -628,7 +628,7 @@ } else if (ops[skip] == '(' || ops[skip] == '{') { - const char *op_name = ops[skip] == '(' ? "__paren_asgn" : "__brace_asgn"; + const char *op_name = ops[skip] == '(' ? "__paren_asgn__" : "__brace_asgn__"; member_value_pair *m = find_member(op_name, false); if (m) { octave_value_list args; @@ -666,19 +666,19 @@ virtual bool is_string() const { octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); - return !!nc_this->find_member("__str", false); + return !!nc_this->find_member("__str__", false); } virtual std::string string_value(bool force = false) const { octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); - member_value_pair *m = nc_this->find_member("__str", false); + member_value_pair *m = nc_this->find_member("__str__", false); if (!m) { - error("__str method not defined"); + error("__str__ method not defined"); return std::string(); } octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); if (outarg.length() < 1 || !outarg(0).is_string()) { - error("__str method did not return a string"); + error("__str__ method did not return a string"); return std::string(); } return outarg(0).string_value(); @@ -700,6 +700,35 @@ return keys; } + virtual bool save_ascii (std::ostream& os) { + return true; + } + + virtual bool load_ascii (std::istream& is) { + return true; + } + + virtual bool save_binary (std::ostream& os, bool& save_as_floats) { + return true; + } + + virtual bool load_binary (std::istream& is, bool swap, + oct_mach_info::float_format fmt) { + return true; + } + +#if defined (HAVE_HDF5) + virtual bool + save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats) { + return true; + } + + virtual bool + load_hdf5 (hid_t loc_id, const char *name, bool have_h5giterate_bug) { + return true; + } +#endif + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return string_value(); } @@ -724,7 +753,7 @@ assert(ost); octave_value ret; - if (ost->dispatch_unary_op(std::string("__") + op_name, ret)) + if (ost->dispatch_unary_op(std::string("__") + op_name + std::string("__"), ret)) return ret; std::string symbol = "op_" + ost->swig_type_name() + "_" + op_name; octave_value_list args; @@ -741,7 +770,7 @@ octave_swig_type *rhs_ost = Swig::swig_value_deref(rhs); octave_value ret; - if (lhs_ost && lhs_ost->dispatch_binary_op(std::string("__") + op_name, rhs, ret)) + if (lhs_ost && lhs_ost->dispatch_binary_op(std::string("__") + op_name + std::string("__"), rhs, ret)) return ret; std::string symbol; @@ -869,6 +898,29 @@ virtual string_vector map_keys() const { return ptr->map_keys(); } + virtual bool save_ascii (std::ostream& os) + { return ptr->save_ascii(os); } + + virtual bool load_ascii (std::istream& is) + { return ptr->load_ascii(is); } + + virtual bool save_binary (std::ostream& os, bool& save_as_floats) + { return ptr->save_binary(os, save_as_floats); } + + virtual bool load_binary (std::istream& is, bool swap, + oct_mach_info::float_format fmt) + { return ptr->load_binary(is, swap, fmt); } + +#if defined (HAVE_HDF5) + virtual bool + save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats) + { return ptr->save_hdf5(loc_id, name, save_as_floats); } + + virtual bool + load_hdf5 (hid_t loc_id, const char *name, bool have_h5giterate_bug) + { return ptr->load_hdf5(loc_id, name, have_h5giterate_bug); } +#endif + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return ptr->convert_to_str(pad, force, type); } @@ -917,6 +969,37 @@ void print(std::ostream &os, bool pr_as_read_syntax = false) const { os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } + + + virtual bool save_ascii (std::ostream& os) { + return true; + } + + virtual bool load_ascii (std::istream& is) { + return true; + } + + virtual bool save_binary (std::ostream& os, bool& save_as_floats) { + return true; + } + + virtual bool load_binary (std::istream& is, bool swap, + oct_mach_info::float_format fmt) { + return true; + } + +#if defined (HAVE_HDF5) + virtual bool + save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats) { + return true; + } + + virtual bool + load_hdf5 (hid_t loc_id, const char *name, bool have_h5giterate_bug) { + return true; + } +#endif + private: DECLARE_OCTAVE_ALLOCATOR; DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA; Modified: trunk/Lib/octave/std_basic_string.i =================================================================== --- trunk/Lib/octave/std_basic_string.i 2009-01-09 23:38:14 UTC (rev 11046) +++ trunk/Lib/octave/std_basic_string.i 2009-01-10 00:20:46 UTC (rev 11047) @@ -1,5 +1,6 @@ #if !defined(SWIG_STD_STRING) #define SWIG_STD_BASIC_STRING +#define SWIG_STD_MODERN_STL %include <octcontainer.swg> @@ -9,39 +10,22 @@ %fragment(SWIG_AsPtr_frag(std::basic_string<char>),"header", fragment="SWIG_AsCharPtrAndSize") { SWIGINTERN int -SWIG_AsPtr(std::basic_string<char>)(PyObject* obj, std::string **val) +SWIG_AsPtr(std::basic_string<char>)(octave_value obj, std::string **val) { - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string<char> *"); - std::string *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { - if (val) *val = vptr; - return SWIG_OLDOBJ; - } else { - PyErr_Clear(); - char* buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { - if (buf) { - if (val) *val = new std::string(buf, size - 1); - if (alloc == SWIG_NEWOBJ) %delete_array(buf); - return SWIG_NEWOBJ; - } - } else { - PyErr_Clear(); - } - if (val) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(PyExc_TypeError,"a string is expected"); - SWIG_PYTHON_THREAD_END_BLOCK; - } - return 0; + if (obj.is_string()) { + if (val) + *val = new std::string(obj.string_value()); + return SWIG_NEWOBJ; } -} + if (val) + error("a string is expected"); + return 0; } +} %fragment(SWIG_From_frag(std::basic_string<char>),"header", fragment="SWIG_FromCharPtrAndSize") { -SWIGINTERNINLINE PyObject* +SWIGINTERNINLINE octave_value SWIG_From(std::basic_string<char>)(const std::string& s) { return SWIG_FromCharPtrAndSize(s.data(), s.size()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |