std::string and std::wstring example.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4324 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
9c3c115a11
commit
277a7e01e8
5 changed files with 106 additions and 0 deletions
22
SWIG/Examples/ocaml/std_string/Makefile
Normal file
22
SWIG/Examples/ocaml/std_string/Makefile
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
TOP = ../..
|
||||
SWIG = $(TOP)/../swig -I/usr/include/g++-3
|
||||
SRCS =
|
||||
TARGET = example
|
||||
INTERFACE = example.i
|
||||
PROGFILE = runme.ml
|
||||
|
||||
default:: static
|
||||
|
||||
all::
|
||||
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
||||
TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' ocaml_cpp
|
||||
|
||||
static::
|
||||
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
||||
PROGFILE='$(PROGFILE)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \
|
||||
ocaml_static_cpp
|
||||
|
||||
clean::
|
||||
$(MAKE) -f $(TOP)/Makefile TARGET='$(TARGET)' ocaml_clean
|
||||
|
||||
check: all
|
||||
13
SWIG/Examples/ocaml/std_string/README
Normal file
13
SWIG/Examples/ocaml/std_string/README
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
This example shows how to use both std::string and std::wstring in Ocaml,
|
||||
and also demonstrates that one might use this to make a locale-obedient
|
||||
Ocaml program.
|
||||
|
||||
These are two sample runs; note that the output is different based on the
|
||||
locale chosen to perform the conversion to wchar_t.
|
||||
|
||||
bash-2.05a$ ./example ja_JP.EUC-JP
|
||||
the original string contains 2
|
||||
the new string contains 1 : [ 29494; ]
|
||||
bash-2.05a$ ./example en_US
|
||||
the original string contains 2
|
||||
the new string contains 2 : [ 205; 177; ]
|
||||
36
SWIG/Examples/ocaml/std_string/example.h
Normal file
36
SWIG/Examples/ocaml/std_string/example.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/* File : example.h -- stolen from the guile std_vector example */
|
||||
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <numeric>
|
||||
#include <stdlib.h>
|
||||
#include <locale.h>
|
||||
|
||||
std::string from_wstring_with_locale( const std::wstring source,
|
||||
const std::string locale ) {
|
||||
const char *current_locale = setlocale( LC_CTYPE, locale.c_str() );
|
||||
int required_chars = wcstombs( NULL, source.c_str(), 0 );
|
||||
std::string s;
|
||||
char *temp_chars = new char[required_chars + 1];
|
||||
temp_chars[0] = 0;
|
||||
wcstombs( temp_chars, source.c_str(), required_chars + 1 );
|
||||
s = temp_chars;
|
||||
delete [] temp_chars;
|
||||
setlocale( LC_CTYPE, current_locale );
|
||||
return s;
|
||||
}
|
||||
|
||||
std::wstring to_wstring_with_locale( const std::string source,
|
||||
const std::string locale ) {
|
||||
const char *current_locale = setlocale( LC_CTYPE, locale.c_str() );
|
||||
int required_chars = mbstowcs( NULL, source.c_str(), 0 );
|
||||
std::wstring s;
|
||||
wchar_t *temp_chars = new wchar_t[required_chars + 1];
|
||||
temp_chars[0] = 0;
|
||||
mbstowcs( temp_chars, source.c_str(), required_chars + 1 );
|
||||
s = temp_chars;
|
||||
delete [] temp_chars;
|
||||
setlocale( LC_CTYPE, current_locale );
|
||||
return s;
|
||||
}
|
||||
12
SWIG/Examples/ocaml/std_string/example.i
Normal file
12
SWIG/Examples/ocaml/std_string/example.i
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
/* -*- C++ -*- */
|
||||
/* File : example.i -- stolen from the guile std_vector example */
|
||||
%module example
|
||||
|
||||
%{
|
||||
#include "example.h"
|
||||
%}
|
||||
|
||||
%include stl.i
|
||||
|
||||
/* Let's just grab the original header file here */
|
||||
%include "example.h"
|
||||
23
SWIG/Examples/ocaml/std_string/runme.ml
Normal file
23
SWIG/Examples/ocaml/std_string/runme.ml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
(* This example was mostly lifted from the guile example directory *)
|
||||
|
||||
open Example
|
||||
|
||||
let y = new_string (C_string "\205\177")
|
||||
let z = _to_wstring_with_locale (C_list [ y ; new_string (C_string Sys.argv.(1)) ])
|
||||
|
||||
let _ =
|
||||
begin
|
||||
print_string "the original string contains " ;
|
||||
print_int (get_int ((invoke y) "size" C_void)) ;
|
||||
print_newline () ;
|
||||
|
||||
print_string "the new string contains " ;
|
||||
print_int (get_int ((invoke z) "size" C_void)) ;
|
||||
print_string " : [ " ;
|
||||
for i = 0 to pred (get_int ((invoke z) "size" C_void)) do
|
||||
print_int (get_int ((invoke z) "[]" (C_int i))) ;
|
||||
print_string "; " ;
|
||||
done ;
|
||||
print_string "]" ;
|
||||
print_newline () ;
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue