Last active
August 29, 2015 13:57
-
-
Save 3demax/9658227 to your computer and use it in GitHub Desktop.
fail
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* DO NOT EDIT. Automatically generated by valabind from toxcore */ | |
var ffi = require('ffi'), ref = require('ref'), Struct = require('ref-struct'); | |
var lib = new ffi.DynamicLibrary('libtoxcore'+ffi.LIB_EXT); | |
function Tname(T) { | |
return T.hasOwnProperty('$name') ? T.$name : T.name; | |
} | |
var types = exports.type = {}; | |
for(var i in ref.types) | |
if(i != 'Utf8String') // Try not to trip the deprecated warning. | |
types[i] = ref.types[i]; | |
types.staticCString = function staticCString(N) { | |
var r = Object.create(types.char); | |
r.name = 'char['+N+']'; | |
r.size *= N; | |
r.get = function get(buf, offset) { | |
if(buf.isNull()) | |
return null; | |
// TODO enforce maxLength of N | |
return buf.readCString(offset); | |
}; | |
r.set = function set(buf, offset, val) { | |
// TODO enforce maxLength of N | |
return buf.writeCString(val, offset); | |
}; | |
return r; | |
}; | |
var ptrCache = [], ptrCacheTo = []; | |
types.ptr = function PointerType(T) { | |
T = ref.coerceType(T); | |
if(T == types.char) | |
return types.CString; | |
var i = ptrCache.indexOf(T); | |
return i === -1 ? ptrCacheTo[ptrCache.push(T)-1] = ref.refType(T) : ptrCacheTo[i]; | |
}; | |
var refCache = [], refCacheTo = []; | |
types.ref = function ReferenceType(T) { | |
T = ref.coerceType(T); | |
var i = refCache.indexOf(T); | |
if(i !== -1) | |
return refCacheTo[i]; | |
var p = types.ptr(T), r = refCacheTo[refCache.push(T)-1] = Object.create(p); | |
r.indirection = 1; | |
r.size = ref.sizeof.pointer; | |
r.alignment = ref.alignof.pointer; | |
r.name = Tname(T)+'&'; | |
r.ffi_type = ffi.FFI_TYPES.pointer; | |
r.get = function get(buf, offset) { | |
buf = ref.get(buf, offset, p); | |
if(buf.isNull()) | |
return null; | |
return buf.deref(); | |
}; | |
r.set = function set(buf, offset, val) { | |
if(!val) | |
return ref.set(buf, offset, null, p); | |
if(!val.buffer) | |
throw new TypeError('valabind ['+r.name+']#set got a bad value'); | |
return ref.set(buf, offset, val.buffer, p); | |
}; | |
return r; | |
}; | |
types.array = function ArrayType(T, N) { | |
T = ref.coerceType(T); | |
if(T == types.char) | |
return types.staticCString(N); | |
var r = Object.create(T); | |
r.size *= N; | |
r.name = Tname(T)+'['+N+']'; | |
function ArrayType(buffer, base) { | |
this.buffer = buffer; | |
this._base = base; | |
} | |
ArrayType.prototype = []; | |
ArrayType.prototype.constructor = ArrayType; | |
for(var i = 0; i < N; i++) | |
Object.defineProperty(ArrayType.prototype, i, { | |
get: function get() { | |
return ref.get(this.buffer, this._base+T.size*i, T); | |
}, | |
set: function set(val) { | |
return ref.set(this.buffer, this._base+T.size*i, val, T); | |
}, | |
enumerable: true | |
}); | |
r.get = function get(buf, offset) { | |
return new ArrayType(buf, offset); | |
}; | |
r.set = function set(buf, offset, val) { | |
for(var i in val) { | |
if(isNaN(i = +i) || i >= N) | |
continue; | |
ref.set(buf, offset+T.size*i, val[i], T); | |
} | |
}; | |
return r; | |
}; | |
types.delegate = function DelegateType(ret, args) { | |
var p = types.ptr(types.void), r = Object.create(p); | |
r.indirection = 1; | |
r.name = Tname(ret)+'('+args.map(function(T) {return Tname(T);}).join(', ')+')'; | |
r.get = function get(buf, offset) { | |
buf = ref.get(buf, offset, p); | |
if(buf.isNull()) | |
return null; | |
return ffi.ForeignFunction(buf, ret, args); | |
}; | |
r.set = function set(buf, offset, val) { | |
return ref.set(buf, offset, ffi.Callback(ret, args, void(0), val)); | |
}; | |
return r; | |
}; | |
var defaults = { | |
forEach: function forEach(callback, thisArg) { | |
if({}.toString.call(callback) != '[object Function]') | |
throw new TypeError(callback + ' is not a function'); | |
for(var T = thisArg || T, iter = this.iterator(); iter; iter = iter.get_next()) | |
callback.call(T, iter.get_data(), iter, this); | |
} | |
}; | |
function bindings(s) { | |
function method(name, ret, args, static, more) { | |
var f = (more == 'variadic' ? ffi.VariadicForeignFunction : | |
ffi.ForeignFunction)(lib.get(name), ret, args); | |
if(static) | |
return f; | |
return function() { | |
[].unshift.call(arguments, this); | |
return f.apply(null, arguments); | |
}; | |
} | |
function define(base, n, m) { | |
var static = n[0] == '$' && ((n = n.slice(1)), true); | |
static = static || base[0] == '$' && ((base = base.slice(1)), true); | |
if(Array.isArray(m)) | |
m = method(m[0], m[1], m[2], static, m[3]); | |
static ? exports[base][n] = m : types[base].prototype[n] = m; | |
} | |
function makeGeneric(G, n) { | |
var cache = [], cacheTo = []; | |
types[n] = function() { | |
var l = arguments.length, args = [], c; | |
// Coerce all type arguments. | |
for(var i = 0; i < l; i++) | |
args[i] = ref.coerceType(arguments[i].$type || arguments[i]); | |
// Look in the cache, if the generic was already built. | |
for(var i = 0; i < cache.length; i++) { | |
if((c = cache[i]).length !== l) | |
continue; | |
for(var j = 0; j < l && c[j] === args[j]; j++); | |
if(j === l) | |
return cacheTo[i]; | |
} | |
// Create the new generic. | |
var generic = cacheTo[cache.push(args)-1] = Struct(), g = G.apply(null, args); | |
generic.$name = n+'<'+args.map(function(T) {return Tname(T);}).join(', ')+'>'; | |
// Define all the generic's propoerties. | |
for(var i in g[0]) | |
generic.defineProperty(i, g[0][i]); | |
// Insert all the generic's methods. | |
if(g[1]) | |
for(var i in g[1]) { | |
var m = g[1][i]; | |
if(Array.isArray(m)) | |
m = method(m[0], m[1], m[2], false, m[3]); | |
generic.prototype[i] = m; | |
} | |
return generic; | |
}; | |
} | |
for(var i in s) { | |
if(s[i].length) | |
makeGeneric(s[i], i); | |
else if(i[0] == '$') | |
exports[i.slice(1)] = {}; | |
else | |
exports[i] = types[i] = Struct(), types[i].$name = i; | |
} | |
for(var i in s) { | |
if(s[i].length) { | |
// TODO insert constructor | |
delete s[i]; | |
continue; | |
} | |
s[i] = s[i](); | |
if(Array.isArray(s[i])) { | |
for(var j in s[i][0]) | |
types[i].defineProperty(j, s[i][0][j]); | |
s[i] = s[i][1]; | |
} | |
} | |
for(var i in s) { | |
if('$constructor' in s[i]) { | |
var ctor = s[i].$constructor; | |
exports[i] = method(ctor[0], ctor[1], ctor[2], true, ctor[3]), exports[i].$type = types[i]; | |
delete s[i].$constructor; | |
} | |
for(var j in s[i]) | |
define(i, j, s[i][j]); | |
} | |
} | |
var _ = types; | |
bindings({ | |
/* SignalSource: function() {return [{}, { | |
delete: ['g_source_unref', _.void, [_.ref(_.SignalSource)]], | |
$constructor: ['g_unix_signal_source_new', _.ref(_.SignalSource), [_.int]] | |
}];},*/ | |
Tox: function() {return [{}, { | |
delete: ['tox_kill', _.void, [_.ref(_.Tox)]], | |
$constructor: ['tox_new', _.ref(_.Tox), [_.uint8]], | |
get_address: ['tox_get_address', _.void, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
add_friend: ['tox_add_friend', _.int, [_.ref(_.Tox), _.ptr(_.uint8), _.ptr(_.uint8)]], | |
add_friend_norequest: ['tox_add_friend_norequest', _.int32, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
tox_get_friend_number: ['tox_get_friend_number', _.int32, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
get_client_id: ['tox_get_client_id', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]], | |
del_friend: ['tox_del_friend', _.int, [_.ref(_.Tox), _.int32]], | |
get_friend_connection_status: ['tox_get_friend_connection_status', _.int, [_.ref(_.Tox), _.int32]], | |
friend_exists: ['tox_friend_exists', _.int, [_.ref(_.Tox), _.int32]], | |
send_message: ['tox_send_message', _.uint32, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]], | |
send_message_withid: ['tox_send_message_withid', _.uint32, [_.ref(_.Tox), _.int32, _.uint32, _.ptr(_.uint8)]], | |
send_action: ['tox_send_action', _.uint32, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]], | |
send_action_withid: ['tox_send_action_withid', _.uint32, [_.ref(_.Tox), _.int32, _.uint32, _.ptr(_.uint8)]], | |
set_name: ['tox_set_name', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
get_self_name: ['tox_get_self_name', _.uint16, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
get_name: ['tox_get_name', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]], | |
get_name_size: ['tox_get_name_size', _.int, [_.ref(_.Tox), _.int32]], | |
get_self_name_size: ['tox_get_self_name_size', _.int, [_.ref(_.Tox)]], | |
set_status_message: ['tox_set_status_message', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
set_user_status: ['tox_set_user_status', _.int, [_.ref(_.Tox), _.int]], | |
get_status_message_size: ['tox_get_status_message_size', _.int, [_.ref(_.Tox), _.int32]], | |
get_self_status_message_size: ['tox_get_self_status_message_size', _.int, [_.ref(_.Tox)]], | |
get_status_message: ['tox_get_status_message', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]], | |
get_self_status_message: ['tox_get_self_status_message', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
get_user_status: ['tox_get_user_status', _.int, [_.ref(_.Tox), _.int32]], | |
get_self_user_status: ['tox_get_self_user_status', _.int, [_.ref(_.Tox)]], | |
get_last_online: ['tox_get_last_online', _.uint64, [_.ref(_.Tox), _.int32]], | |
set_user_is_typing: ['tox_set_user_is_typing', _.int, [_.ref(_.Tox), _.int32, _.uint8]], | |
get_is_typing: ['tox_get_is_typing', _.int, [_.ref(_.Tox), _.int32]], | |
set_send_receipts: ['tox_set_sends_receipts', _.void, [_.ref(_.Tox), _.int32, _.int]], | |
count_friendlist: ['tox_count_friendlist', _.uint32, [_.ref(_.Tox)]], | |
get_num_online_friends: ['tox_get_num_online_friends', _.uint32, [_.ref(_.Tox)]], | |
get_friendlist: ['tox_get_friendlist', _.uint32, [_.ref(_.Tox), _.ptr(_.int)]], | |
callback_friend_request: ['tox_callback_friend_request', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.ptr(_.uint8), _.ptr(_.uint8)])]], | |
callback_friend_message: ['tox_callback_friend_message', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.ptr(_.uint8)])]], | |
callback_friend_action: ['tox_callback_friend_action', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]], | |
callback_name_change: ['tox_callback_name_change', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]], | |
callback_status_message: ['tox_callback_status_message', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]], | |
callback_user_status: ['tox_callback_user_status', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8])]], | |
callback_typing_change: ['tox_callback_typing_change', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.int])]], | |
callback_read_receipt: ['tox_callback_read_receipt', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint32])]], | |
callback_connection_status: ['tox_callback_connection_status', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8])]], | |
callback_group_invite: ['tox_callback_group_invite', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]], | |
callback_group_message: ['tox_callback_group_message', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.int, _.ptr(_.uint8)])]], | |
callback_group_action: ['tox_callback_group_action', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.int, _.ptr(_.uint8)])]], | |
callback_group_namelist_change: ['tox_callback_group_namelist_change', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.int, _.int])]], | |
add_groupchat: ['tox_add_groupchat', _.int, [_.ref(_.Tox)]], | |
del_groupchat: ['tox_del_groupchat', _.int, [_.ref(_.Tox), _.int]], | |
group_peername: ['tox_group_peername', _.int, [_.ref(_.Tox), _.int, _.int, _.ptr(_.uint8)]], | |
invite_friend: ['tox_invite_friend', _.int, [_.ref(_.Tox), _.int32, _.int]], | |
join_groupchat: ['tox_join_groupchat', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]], | |
group_message_send: ['tox_group_message_send', _.int, [_.ref(_.Tox), _.int, _.ptr(_.uint8)]], | |
group_action_send: ['tox_group_action_send', _.int, [_.ref(_.Tox), _.int, _.ptr(_.uint8)]], | |
group_number_peers: ['tox_group_number_peers', _.int, [_.ref(_.Tox), _.int]], | |
count_chatlist: ['tox_count_chatlist', _.uint32, [_.ref(_.Tox)]], | |
get_chatlist: ['tox_get_chatlist', _.uint32, [_.ref(_.Tox), _.ptr(_.int)]], | |
callback_file_send_request: ['tox_callback_file_send_request', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8, _.uint64, _.ptr(_.uint8)])]], | |
callback_file_control: ['tox_callback_file_control', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8, _.uint8, _.uint8, _.ptr(_.uint8)])]], | |
callback_file_data: ['tox_callback_file_data', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8, _.ptr(_.uint8)])]], | |
new_file_sender: ['tox_new_file_sender', _.int, [_.ref(_.Tox), _.int32, _.uint64, _.ptr(_.uint8)]], | |
file_send_control: ['tox_file_send_control', _.int, [_.ref(_.Tox), _.int32, _.uint8, _.uint8, _.uint8, _.ptr(_.uint8)]], | |
file_send_data: ['tox_file_send_data', _.int, [_.ref(_.Tox), _.int32, _.uint8, _.ptr(_.uint8)]], | |
file_data_size: ['tox_file_data_size', _.int, [_.ref(_.Tox), _.int32]], | |
file_data_remaining: ['tox_file_data_remaining', _.uint64, [_.ref(_.Tox), _.int32, _.uint8, _.uint8]], | |
bootstrap_from_address: ['tox_bootstrap_from_address', _.int, [_.ref(_.Tox), _.CString, _.uint8, _.uint16, _.ptr(_.uint8)]], | |
isconnected: ['tox_isconnected', _.int, [_.ref(_.Tox)]], | |
do: ['tox_do', _.void, [_.ref(_.Tox)]], | |
wait_prepare: ['tox_wait_prepare', _.int, [_.ref(_.Tox), _.ptr(_.uint8), _.uint16]], | |
wait_execute: ['tox_wait_execute', _.int, [_.ref(_.Tox), _.ptr(_.uint8), _.uint16]], | |
wait_cleanup: ['tox_wait_cleanup', _.void, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
size: ['tox_size', _.uint32, [_.ref(_.Tox)]], | |
save: ['tox_save', _.void, [_.ref(_.Tox), _.ptr(_.uint8)]], | |
load: ['tox_load', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]] | |
}];} | |
}); | |
exports.CollectType = {}/*types.Enum*/; | |
exports.CollectType.INVALID = 0; | |
exports.CollectType.STRING = 1; | |
exports.CollectType.STRDUP = 2; | |
exports.CollectType.BOOLEAN = 3; | |
exports.CollectType.TRISTATE = 4; | |
exports.CollectType.OPTIONAL = 65536; | |
exports.FriendAddError = {}/*types.Enum*/; | |
exports.FriendAddError.TOOLONG = -1; | |
exports.FriendAddError.NOMESSAGE = -2; | |
exports.FriendAddError.OWNKEY = -3; | |
exports.FriendAddError.ALREADYSENT = -4; | |
exports.FriendAddError.UNKNOWN = -5; | |
exports.FriendAddError.BADCHECKSUM = -6; | |
exports.FriendAddError.SETNEWNOSPAM = -7; | |
exports.FriendAddError.NOMEM = -8; | |
exports.UserStatus = {}/*types.Enum*/; | |
exports.UserStatus.NONE = 0; | |
exports.UserStatus.AWAY = 1; | |
exports.UserStatus.BUSY = 2; | |
exports.UserStatus.INVALID = 3; | |
exports.FileControlStatus = {}/*types.Enum*/; | |
exports.FileControlStatus.ACCEPT = 0; | |
exports.FileControlStatus.PAUSE = 1; | |
exports.FileControlStatus.KILL = 2; | |
exports.FileControlStatus.FINISHED = 3; | |
exports.FileControlStatus.RESUME_BROKEN = 4; | |
exports.ChatChange = {}/*types.Enum*/; | |
exports.ChatChange.PEER_ADD = 0; | |
exports.ChatChange.PEER_DEL = 1; | |
exports.ChatChange.PEER_NAME = 2; | |
var Tox = exports.Tox | |
var tox = new Tox(0) | |
console.log(tox, tox.size()) // <- point of failure |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment