PageRenderTime 26ms CodeModel.GetById 24ms app.highlight 1ms RepoModel.GetById 0ms app.codeStats 1ms

/trunk/Lib/ocaml/std_string.i

#
Swig | 126 lines | 90 code | 22 blank | 14 comment | 0 complexity | 03fc892ed0263f6ceed48e011c77cad5 MD5 | raw file
  1/* -----------------------------------------------------------------------------
  2 * std_string.i
  3 *
  4 * SWIG typemaps for std::string
  5 * ----------------------------------------------------------------------------- */
  6
  7// ------------------------------------------------------------------------
  8// std::string is typemapped by value
  9// This can prevent exporting methods which return a string
 10// in order for the user to modify it.
 11// However, I think I'll wait until someone asks for it...
 12// ------------------------------------------------------------------------
 13
 14%{
 15#include <string>
 16#include <vector>
 17%}
 18  
 19%include <exception.i>
 20%include <std_vector.i>
 21
 22namespace std {
 23
 24%naturalvar string;
 25%naturalvar wstring;
 26  
 27class string;
 28class wstring;
 29  
 30/* Overloading check */
 31%typemap(in) string {
 32  /* %typemap(in) string */
 33  if (caml_ptr_check($input))
 34    $1.assign((char *)caml_ptr_val($input,0), caml_string_len($input));
 35  else
 36    SWIG_exception(SWIG_TypeError, "string expected");
 37}
 38
 39%typemap(in) const string & (std::string temp) {
 40  /* %typemap(in) const string & */
 41  if (caml_ptr_check($input)) {
 42    temp.assign((char *)caml_ptr_val($input,0), caml_string_len($input));
 43    $1 = &temp;
 44  } else {
 45    SWIG_exception(SWIG_TypeError, "string expected");
 46  }
 47}
 48
 49%typemap(in) string & (std::string temp) {
 50  /* %typemap(in) string & */
 51  if (caml_ptr_check($input)) {
 52    temp.assign((char *)caml_ptr_val($input,0), caml_string_len($input));
 53    $1 = &temp;
 54  } else {
 55    SWIG_exception(SWIG_TypeError, "string expected");
 56  }
 57}
 58
 59%typemap(in) string * (std::string *temp) {
 60  /* %typemap(in) string * */
 61  if (caml_ptr_check($input)) {
 62    temp = new std::string((char *)caml_ptr_val($input,0), caml_string_len($input));
 63    $1 = temp;
 64  } else {
 65    SWIG_exception(SWIG_TypeError, "string expected");
 66  }
 67}
 68
 69%typemap(free) string * (std::string *temp) {
 70  delete temp;
 71}
 72
 73%typemap(argout) string & {
 74  /* %typemap(argout) string & */
 75  swig_result =	caml_list_append(swig_result,caml_val_string_len((*$1).c_str(), (*$1).size()));
 76}
 77
 78%typemap(directorout) string {
 79  /* %typemap(directorout) string */
 80	$result.assign((char *)caml_ptr_val($input,0), caml_string_len($input));
 81}
 82
 83%typemap(out) string {
 84  /* %typemap(out) string */
 85  $result = caml_val_string_len($1.c_str(),$1.size());
 86}
 87
 88%typemap(out) string * {
 89  /* %typemap(out) string * */
 90	$result = caml_val_string_len((*$1).c_str(),(*$1).size());
 91}
 92}
 93
 94#ifdef ENABLE_CHARPTR_ARRAY
 95char **c_charptr_array( const std::vector <std::string > &str_v );
 96
 97%{
 98  SWIGEXT char **c_charptr_array( const std::vector <std::string > &str_v ) {
 99    char **out = new char *[str_v.size() + 1];
100    out[str_v.size()] = 0;
101    for( int i = 0; i < str_v.size(); i++ ) {
102      out[i] = (char *)str_v[i].c_str();
103    }
104    return out;
105  }
106%}
107#endif
108
109#ifdef ENABLE_STRING_VECTOR
110%template (StringVector) std::vector<std::string >;
111
112%insert(ml) %{
113  (* Some STL convenience items *)
114
115  let string_array_to_vector sa = 
116    let nv = _new_StringVector C_void in
117      array_to_vector nv (fun x -> C_string x) sa ; nv
118	
119  let c_string_array ar = 
120    _c_charptr_array (string_array_to_vector ar)
121%}
122
123%insert(mli) %{
124  val c_string_array: string array -> c_obj
125%}
126#endif