summaryrefslogtreecommitdiff
path: root/linux-x86/share/swig/ruby/std_wstring.i
blob: c5d168a0a34898547c9f01171c32372d87701f4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
%{
#if defined(__linux__)
#include <endian.h>
#if BYTE_ORDER == LITTLE_ENDIAN
#define SWIG_RUBY_ENDIAN "LE"
#elif BYTE_ORDER == BIG_ENDIAN
#define SWIG_RUBY_ENDIAN "BE"
#endif
#else
#define SWIG_RUBY_ENDIAN "LE"
#endif

#ifdef __cplusplus
extern "C" {
#endif

#ifdef HAVE_RUBY_ENCODING_H
#include "ruby/encoding.h"
#endif

/**
 *  The internal encoding of std::wstring is defined based on
 *  the size of wchar_t. If it is not appropriate for your library,
 *  SWIG_RUBY_WSTRING_ENCODING must be given when compiling.
 */
#ifndef SWIG_RUBY_WSTRING_ENCODING

#if WCHAR_MAX == 0x7fff || WCHAR_MAX == 0xffff
#define SWIG_RUBY_WSTRING_ENCODING "UTF-16" SWIG_RUBY_ENDIAN
#elif WCHAR_MAX == 0x7fffffff || WCHAR_MAX == 0xffffffff
#define SWIG_RUBY_WSTRING_ENCODING "UTF-32" SWIG_RUBY_ENDIAN
#else
#error unsupported wchar_t size. SWIG_RUBY_WSTRING_ENCODING must be given.
#endif

#endif

/**
 *  If Encoding.default_internal is nil, this encoding will be used
 *  when converting from std::wstring to String object in Ruby.
 */
#ifndef SWIG_RUBY_INTERNAL_ENCODING
#define SWIG_RUBY_INTERNAL_ENCODING "UTF-8"
#endif

static rb_encoding *swig_ruby_wstring_encoding;
static rb_encoding *swig_ruby_internal_encoding;

#ifdef __cplusplus
}
#endif
%}

%fragment("SWIG_ruby_wstring_encoding_init", "init") {
  swig_ruby_wstring_encoding  = rb_enc_find( SWIG_RUBY_WSTRING_ENCODING );
  swig_ruby_internal_encoding = rb_enc_find( SWIG_RUBY_INTERNAL_ENCODING );
}

%warnfilter(SWIGWARN_RUBY_WRONG_NAME) std::basic_string<wchar_t>;

%include <rubywstrings.swg>
%include <typemaps/std_wstring.swg>