diff options
Diffstat (limited to 'share/swig/2.0.11/allegrocl/std_string.i')
-rw-r--r-- | share/swig/2.0.11/allegrocl/std_string.i | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/share/swig/2.0.11/allegrocl/std_string.i b/share/swig/2.0.11/allegrocl/std_string.i new file mode 100644 index 0000000..cbcd250 --- /dev/null +++ b/share/swig/2.0.11/allegrocl/std_string.i @@ -0,0 +1,209 @@ +/* ----------------------------------------------------------------------------- + * std_string.i + * + * SWIG typemaps for std::string + * ----------------------------------------------------------------------------- */ + +// ------------------------------------------------------------------------ +// std::string is typemapped by value +// This can prevent exporting methods which return a string +// in order for the user to modify it. +// However, I think I'll wait until someone asks for it... +// ------------------------------------------------------------------------ + +// %include <exception.i> +%warnfilter(404) std::string; +%warnfilter(404) std::wstring; + +%{ +#include <string> +%} + +// %include <std_vector.i> + +// %naturalvar std::string; +// %naturalvar std::wstring; + +namespace std { + typedef unsigned long size_t; + typedef signed long ptrdiff_t; + + template <class charT> class basic_string { + public: + typedef charT *pointer; + typedef charT &reference; + typedef const charT &const_reference; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + basic_string(); + basic_string( charT *str ); + size_type size(); + charT operator []( int pos ) const; + charT *c_str() const; + basic_string<charT> &operator = ( const basic_string &ws ); + basic_string<charT> &operator = ( const charT *str ); + basic_string<charT> &append( const basic_string<charT> &other ); + basic_string<charT> &append( const charT *str ); + void push_back( charT c ); + void clear(); + void reserve( size_type t ); + void resize( size_type n, charT c = charT() ); + int compare( const basic_string<charT> &other ) const; + int compare( const charT *str ) const; + basic_string<charT> &insert( size_type pos, + const basic_string<charT> &str ); + size_type find( const basic_string<charT> &other, int pos = 0 ) const; + size_type find( charT c, int pos = 0 ) const; + %extend { + bool operator == ( const basic_string<charT> &other ) const { + return self->compare( other ) == 0; + } + bool operator != ( const basic_string<charT> &other ) const { + return self->compare( other ) != 0; + } + bool operator < ( const basic_string<charT> &other ) const { + return self->compare( other ) == -1; + } + bool operator > ( const basic_string<charT> &other ) const { + return self->compare( other ) == 1; + } + bool operator <= ( const basic_string<charT> &other ) const { + return self->compare( other ) != 1; + } + bool operator >= ( const basic_string<charT> &other ) const { + return self->compare( other ) != -1; + } + + } + }; + + %template(string) basic_string<char>; + %template(wstring) basic_string<wchar_t>; + + %apply char * { string }; + %apply wchar_t * { wstring }; + + typedef basic_string<char> string; + typedef basic_string<wchar_t> wstring; + + // automatically convert constant std::strings to cl:strings + %typemap(ctype) string "char *"; + %typemap(in) string "$1.assign($input);"; + %typemap(out) string "$result = (char *)(&$1)->c_str();"; + %typemap(lisptype) string "cl:string"; + %typemap(lout) string "(cl::setq ACL_ffresult $body)"; + + %typemap(ctype) const string *"char *"; + %typemap(in) const string * "$1.assign($input);"; + %typemap(out) const string * "$result = (char *)($1)->c_str();"; + %typemap(lisptype) const string * "cl:string"; + %typemap(lout) const string * "(cl::setq ACL_ffresult $body)"; + + %typemap(ctype) wstring "wchar_t *"; + %typemap(in) wstring "$1.assign($input);"; + %typemap(out) wstring "$result = (wchar_t *)(&$1)->c_str();"; + %typemap(lisptype) wstring "cl:string"; + %typemap(lout) wstring "(cl::setq ACL_ffresult (excl:native-to-string $body +:external-format #+little-endian :fat-le #-little-endian :fat))"; + + %typemap(ctype) const wstring *"char *"; + %typemap(in) const wstring * "$1.assign($input);"; + %typemap(out) const wstring * "$result = (char *)($1)->c_str();"; + %typemap(lisptype) const wstring * "cl:string"; + %typemap(lout) const wstring * "(cl::setq ACL_ffresult $body)"; + + /* Overloading check */ +// %typemap(in) string { +// if (caml_ptr_check($input)) +// $1.assign((char *)caml_ptr_val($input,0), +// caml_string_len($input)); +// else +// SWIG_exception(SWIG_TypeError, "string expected"); +// } + +// %typemap(in) const string & ($*1_ltype temp) { +// if (caml_ptr_check($input)) { +// temp.assign((char *)caml_ptr_val($input,0), +// caml_string_len($input)); +// $1 = &temp; +// } else { +// SWIG_exception(SWIG_TypeError, "string expected"); +// } +// } + +// %typemap(in) string & ($*1_ltype temp) { +// if (caml_ptr_check($input)) { +// temp.assign((char *)caml_ptr_val($input,0), +// caml_string_len($input)); +// $1 = &temp; +// } else { +// SWIG_exception(SWIG_TypeError, "string expected"); +// } +// } + +// %typemap(in) string * ($*1_ltype *temp) { +// if (caml_ptr_check($input)) { +// temp = new $*1_ltype((char *)caml_ptr_val($input,0), +// caml_string_len($input)); +// $1 = temp; +// } else { +// SWIG_exception(SWIG_TypeError, "string expected"); +// } +// } + +// %typemap(free) string * ($*1_ltype *temp) { +// delete temp; +// } + +// %typemap(argout) string & { +// caml_list_append(swig_result,caml_val_string_len((*$1).c_str(), +// (*$1).size())); +// } + +// %typemap(directorout) string { +// $result.assign((char *)caml_ptr_val($input,0), +// caml_string_len($input)); +// } + +// %typemap(out) string { +// $result = caml_val_string_len($1.c_str(),$1.size()); +// } + +// %typemap(out) string * { +// $result = caml_val_string_len((*$1).c_str(),(*$1).size()); +// } +} + +// #ifdef ENABLE_CHARPTR_ARRAY +// char **c_charptr_array( const std::vector <string > &str_v ); + +// %{ +// SWIGEXT char **c_charptr_array( const std::vector <string > &str_v ) { +// char **out = new char *[str_v.size() + 1]; +// out[str_v.size()] = 0; +// for( int i = 0; i < str_v.size(); i++ ) { +// out[i] = (char *)str_v[i].c_str(); +// } +// return out; +// } +// %} +// #endif + +// #ifdef ENABLE_STRING_VECTOR +// %template (StringVector) std::vector<string >; + +// %insert(ml) %{ +// (* Some STL convenience items *) + +// let string_array_to_vector sa = +// let nv = _new_StringVector C_void in +// array_to_vector nv (fun x -> C_string x) sa ; nv + +// let c_string_array ar = +// _c_charptr_array (string_array_to_vector ar) +// %} + +// %insert(mli) %{ +// val c_string_array: string array -> c_obj +// %} +// #endif |