aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChad Austin <chad@imvu.com>2013-04-10 23:59:51 -0700
committerJukka Jylänki <jujjyl@gmail.com>2013-04-18 20:08:09 +0300
commit6a4574cfe44b75f8cfaa916a08b402f99baf6cc7 (patch)
treeb9bb8c88e5ce73bddcd96da4897eab07d91ed59c /src
parentbcf017994524b515274344dcf667dc03b8153448 (diff)
Add support for returning std::wstring
Diffstat (limited to 'src')
-rwxr-xr-xsrc/embind/embind.js31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js
index 42250601..576a519e 100755
--- a/src/embind/embind.js
+++ b/src/embind/embind.js
@@ -317,12 +317,12 @@ function __embind_register_float(rawType, name) {
});
}
-function __embind_register_cstring(rawType, name) {
+function __embind_register_std_string(rawType, name) {
name = Pointer_stringify(name);
registerType(rawType, {
name: name,
fromWireType: function(value) {
- var length = HEAP32[value >> 2];
+ var length = HEAPU32[value >> 2];
var a = new Array(length);
for (var i = 0; i < length; ++i) {
a[i] = String.fromCharCode(HEAPU8[value + 4 + i]);
@@ -334,7 +334,7 @@ function __embind_register_cstring(rawType, name) {
// assumes 4-byte alignment
var length = value.length;
var ptr = _malloc(4 + length);
- HEAP32[ptr >> 2] = length;
+ HEAPU32[ptr >> 2] = length;
for (var i = 0; i < length; ++i) {
HEAPU8[ptr + 4 + i] = value.charCodeAt(i);
}
@@ -344,6 +344,31 @@ function __embind_register_cstring(rawType, name) {
});
}
+function __embind_register_std_wstring(rawType, charSize, name) {
+ name = Pointer_stringify(name);
+ var HEAP, shift;
+ if (charSize == 2) {
+ HEAP = HEAPU16;
+ shift = 1;
+ } else if (charSize == 4) {
+ HEAP = HEAPU32;
+ shift = 2;
+ }
+ registerType(rawType, {
+ name: name,
+ fromWireType: function(value) {
+ var length = HEAPU32[value >> 2];
+ var a = new Array(length);
+ var start = (value + 4) >> shift;
+ for (var i = 0; i < length; ++i) {
+ a[i] = String.fromCharCode(HEAP[start + i]);
+ }
+ _free(value);
+ return a.join('');
+ },
+ });
+}
+
function __embind_register_emval(rawType, name) {
name = Pointer_stringify(name);
registerType(rawType, {