CFFI work

This commit is contained in:
Joshua Granick
2015-09-01 14:25:41 -07:00
parent 14d1ae7abe
commit d099750327
12 changed files with 729 additions and 797 deletions

View File

@@ -46,6 +46,9 @@ This product bundles libogg 1.3.0, which is available under a
This product bundles LZMA SDK 4.65, which is available under
public domain. For details, see [project/lib/lzma/](project/lzma).
This product bundles libnfd, which is available under a
"zlib" (BSD-style) license. For details, see [project/lib/nfd/](project/lib).
This product bundles OpenAL-Soft 1.15.1, which is available under an
"LGPLv3" license. For details, see [project/lib/openal/](project/lib). It also bundles
an OpenAL-Soft derivative for Android under [project/lib/openal-android/](project/lib).
@@ -91,12 +94,6 @@ https://github.com/haxenme/nme
project/src/utils/LZMA.cpp
tools/utils/JavaExternGenerator.hx
The following files were developed in collaboration with Sven Bergström
and the snow project, which is available under an "MIT" license. For
details, see https://github.com/underscorediscovery/snow
project/src/audio/openal/OpenALBindings.cpp
The typed array implementation was developed in collaboration with Sven Bergström
and the hxtypedarray project, which is available under an "MIT" license.
For details, see https://github.com/underscorediscovery/hxtypedarray

View File

@@ -2,7 +2,7 @@ package lime.audio;
import lime.audio.openal.AL;
import lime.utils.ByteArray;
import lime.utils.ArrayBufferView;
class ALAudioContext {
@@ -79,7 +79,7 @@ class ALAudioContext {
}
public function bufferData (buffer:Int, format:Int, data:ByteArray, size:Int, freq:Int):Void {
public function bufferData (buffer:Int, format:Int, data:ArrayBufferView, size:Int, freq:Int):Void {
AL.bufferData (buffer, format, data, size, freq);
@@ -408,7 +408,7 @@ class ALAudioContext {
}
public function getSourcefv (source:Int, param:Int):Array<Float> {
public function getSourcefv (source:Int, param:Int, count:Int = 1):Array<Float> {
return AL.getSourcefv (source, param);

View File

@@ -6,7 +6,7 @@ import lime.audio.openal.AL;
import lime.net.URLLoader;
import lime.net.URLRequest;
import lime.utils.ByteArray;
import lime.utils.Float32Array;
import lime.utils.UInt8Array;
#if (js && html5)
import js.html.Audio;
@@ -26,7 +26,7 @@ class AudioBuffer {
public var bitsPerSample:Int;
public var channels:Int;
public var data:ByteArray;
public var data:UInt8Array;
public var id:UInt;
public var sampleRate:Int;
@@ -88,7 +88,7 @@ class AudioBuffer {
var audioBuffer = new AudioBuffer ();
audioBuffer.bitsPerSample = data.bitsPerSample;
audioBuffer.channels = data.channels;
audioBuffer.data = ByteArray.fromBytes (@:privateAccess new Bytes (data.data.length, data.data.b));
audioBuffer.data = new UInt8Array (@:privateAccess new Bytes (data.data.length, data.data.b));
audioBuffer.sampleRate = data.sampleRate;
return audioBuffer;
@@ -128,7 +128,7 @@ class AudioBuffer {
var audioBuffer = new AudioBuffer ();
audioBuffer.bitsPerSample = data.bitsPerSample;
audioBuffer.channels = data.channels;
audioBuffer.data = ByteArray.fromBytes (@:privateAccess new Bytes (data.data.length, data.data.b));
audioBuffer.data = new UInt8Array (@:privateAccess new Bytes (data.data.length, data.data.b));
audioBuffer.sampleRate = data.sampleRate;
return audioBuffer;

View File

@@ -1,8 +1,17 @@
package lime.audio.openal;
import lime.system.System;
import lime.utils.ByteArray;
import lime.utils.ArrayBufferView;
#if ((haxe_ver >= 3.2) && cpp)
import cpp.Float32;
#else
typedef Float32 = Float;
#end
#if !macro
@:build(lime.system.CFFI.build())
#end
class AL {
@@ -72,10 +81,12 @@ class AL {
public static inline var EXPONENT_DISTANCE_CLAMPED:Int = 0xD006;
public static function bufferData (buffer:Int, format:Int, data:ByteArray, size:Int, freq:Int):Void {
public static function bufferData (buffer:Int, format:Int, data:ArrayBufferView, size:Int, freq:Int):Void {
#if ((cpp || neko) && lime_openal)
lime_al_buffer_data (buffer, format, data.getByteBuffer (), size, freq);
lime_al_buffer_data (buffer, format, data.buffer, size, freq);
#elseif (nodejs && lime_openal)
lime_al_buffer_data (buffer, format, data, size, freq);
#elseif (nodejs && lime_openal)
lime_al_buffer_data (buffer, format, data, size, freq);
#end
@@ -276,7 +287,7 @@ class AL {
public static function getBooleanv (param:Int, count:Int = 1):Array<Bool> {
#if ((cpp || neko || nodejs) && lime_openal)
return lime_al_get_booleanv (param, count);
return lime_al_get_booleanv (param, 1);
#else
return null;
#end
@@ -522,7 +533,11 @@ class AL {
public static function getProcAddress (fname:String):Dynamic {
#if ((cpp || neko || nodejs) && lime_openal)
return lime_al_get_proc_address (fname);
#else
return null;
#end
}
@@ -560,10 +575,10 @@ class AL {
}
public static function getSourcefv (source:Int, param:Int):Array<Float> {
public static function getSourcefv (source:Int, param:Int, count:Int = 1):Array<Float> {
#if ((cpp || neko || nodejs) && lime_openal)
return lime_al_get_sourcefv (source, param);
return lime_al_get_sourcefv (source, param, count);
#else
return null;
#end
@@ -879,83 +894,83 @@ class AL {
#if ((cpp || neko || nodejs) && lime_openal)
private static var lime_al_buffer_data = System.load ("lime", "lime_al_buffer_data", 5);
private static var lime_al_bufferf = System.load ("lime", "lime_al_bufferf", 3);
private static var lime_al_buffer3f = System.load ("lime", "lime_al_buffer3f", 5);
private static var lime_al_bufferfv = System.load ("lime", "lime_al_bufferfv", 3);
private static var lime_al_bufferi = System.load ("lime", "lime_al_bufferi", 3);
private static var lime_al_buffer3i = System.load ("lime", "lime_al_buffer3i", 5);
private static var lime_al_bufferiv = System.load ("lime", "lime_al_bufferiv", 3);
private static var lime_al_delete_buffer = System.load ("lime", "lime_al_delete_buffer", 1);
private static var lime_al_delete_buffers = System.load ("lime", "lime_al_delete_buffers", 2);
private static var lime_al_delete_source = System.load ("lime", "lime_al_delete_source", 1);
private static var lime_al_delete_sources = System.load ("lime", "lime_al_delete_sources", 2);
private static var lime_al_disable = System.load ("lime", "lime_al_disable", 1);
private static var lime_al_distance_model = System.load ("lime", "lime_al_distance_model", 1);
private static var lime_al_doppler_factor = System.load ("lime", "lime_al_doppler_factor", 1);
private static var lime_al_doppler_velocity = System.load ("lime", "lime_al_doppler_velocity", 1);
private static var lime_al_enable = System.load ("lime", "lime_al_enable", 1);
private static var lime_al_gen_source = System.load ("lime", "lime_al_gen_source", 0);
private static var lime_al_gen_sources = System.load ("lime", "lime_al_gen_sources", 1);
private static var lime_al_gen_buffer = System.load ("lime", "lime_al_gen_buffer", 0);
private static var lime_al_gen_buffers = System.load ("lime", "lime_al_gen_buffers", 1);
private static var lime_al_get_buffer3f = System.load ("lime", "lime_al_get_buffer3f", 2);
private static var lime_al_get_buffer3i = System.load ("lime", "lime_al_get_buffer3i", 2);
private static var lime_al_get_bufferf = System.load ("lime", "lime_al_get_bufferf", 2);
private static var lime_al_get_bufferfv = System.load ("lime", "lime_al_get_bufferfv", 3);
private static var lime_al_get_bufferi = System.load ("lime", "lime_al_get_bufferi", 2);
private static var lime_al_get_bufferiv = System.load ("lime", "lime_al_get_bufferiv", 3);
private static var lime_al_get_boolean = System.load ("lime", "lime_al_get_boolean", 1);
private static var lime_al_get_booleanv = System.load ("lime", "lime_al_get_booleanv", 2);
private static var lime_al_get_double = System.load ("lime", "lime_al_get_double", 1);
private static var lime_al_get_doublev = System.load ("lime", "lime_al_get_doublev", 2);
private static var lime_al_get_enum_value = System.load ("lime", "lime_al_get_enum_value", 1);
private static var lime_al_get_error = System.load ("lime", "lime_al_get_error", 0);
private static var lime_al_get_float = System.load ("lime", "lime_al_get_float", 1);
private static var lime_al_get_floatv = System.load ("lime", "lime_al_get_floatv", 2);
private static var lime_al_get_integer = System.load ("lime", "lime_al_get_integer", 1);
private static var lime_al_get_integerv = System.load ("lime", "lime_al_get_integerv", 2);
private static var lime_al_get_listenerf = System.load ("lime", "lime_al_get_listenerf", 1);
private static var lime_al_get_listener3f = System.load ("lime", "lime_al_get_listener3f", 1);
private static var lime_al_get_listenerfv = System.load ("lime", "lime_al_get_listenerfv", 2);
private static var lime_al_get_listeneri = System.load ("lime", "lime_al_get_listeneri", 1);
private static var lime_al_get_listener3i = System.load ("lime", "lime_al_get_listener3i", 1);
private static var lime_al_get_listeneriv = System.load ("lime", "lime_al_get_listeneriv", 2);
private static var lime_al_get_proc_address = System.load ("lime", "lime_al_get_proc_address", 1);
private static var lime_al_get_source3f = System.load ("lime", "lime_al_get_source3f", 2);
private static var lime_al_get_source3i = System.load ("lime", "lime_al_get_source3i", 2);
private static var lime_al_get_sourcef = System.load ("lime", "lime_al_get_sourcef", 2);
private static var lime_al_get_sourcefv = System.load ("lime", "lime_al_get_sourcefv", 2);
private static var lime_al_get_sourcei = System.load ("lime", "lime_al_get_sourcei", 2);
private static var lime_al_get_sourceiv = System.load ("lime", "lime_al_get_sourceiv", 3);
private static var lime_al_get_string = System.load ("lime", "lime_al_get_string", 1);
private static var lime_al_is_buffer = System.load ("lime", "lime_al_is_buffer", 1);
private static var lime_al_is_enabled = System.load ("lime", "lime_al_is_enabled", 1);
private static var lime_al_is_extension_present = System.load ("lime", "lime_al_is_extension_present", 1);
private static var lime_al_is_source = System.load ("lime", "lime_al_is_source", 1);
private static var lime_al_listener3f = System.load ("lime", "lime_al_listener3f", 4);
private static var lime_al_listener3i = System.load ("lime", "lime_al_listener3i", 4);
private static var lime_al_listenerf = System.load ("lime", "lime_al_listenerf", 2);
private static var lime_al_listenerfv = System.load ("lime", "lime_al_listenerfv", 2);
private static var lime_al_listeneri = System.load ("lime", "lime_al_listeneri", 2);
private static var lime_al_listeneriv = System.load ("lime", "lime_al_listeneriv", 2);
private static var lime_al_source_play = System.load ("lime", "lime_al_source_play", 1);
private static var lime_al_source_playv = System.load ("lime", "lime_al_source_playv", 2);
private static var lime_al_source_stop = System.load ("lime", "lime_al_source_stop", 1);
private static var lime_al_source_stopv = System.load ("lime", "lime_al_source_stopv", 2);
private static var lime_al_source_rewind = System.load ("lime", "lime_al_source_rewind", 1);
private static var lime_al_source_rewindv = System.load ("lime", "lime_al_source_rewindv", 2);
private static var lime_al_source_pause = System.load ("lime", "lime_al_source_pause", 1);
private static var lime_al_source_pausev = System.load ("lime", "lime_al_source_pausev", 2);
private static var lime_al_source_queue_buffers = System.load ("lime", "lime_al_source_queue_buffers", 3);
private static var lime_al_source_unqueue_buffers = System.load ("lime", "lime_al_source_unqueue_buffers", 2);
private static var lime_al_source3f = System.load ("lime", "lime_al_source3f", 5);
private static var lime_al_source3i = System.load ("lime", "lime_al_source3i", 5);
private static var lime_al_sourcef = System.load ("lime", "lime_al_sourcef", 3);
private static var lime_al_sourcefv = System.load ("lime", "lime_al_sourcefv", 3);
private static var lime_al_sourcei = System.load ("lime", "lime_al_sourcei", 3);
private static var lime_al_sourceiv = System.load ("lime", "lime_al_sourceiv", 3);
private static var lime_al_speed_of_sound = System.load ("lime", "lime_al_speed_of_sound", 1);
@:cffi private static function lime_al_buffer_data (buffer:Int, format:Int, data:Dynamic, size:Int, freq:Int):Void;
@:cffi private static function lime_al_buffer3f (buffer:Int, param:Int, value1:Float32, value2:Float32, value3:Float32):Void;
@:cffi private static function lime_al_buffer3i (buffer:Int, param:Int, value1:Int, value2:Int, value3:Int):Void;
@:cffi private static function lime_al_bufferf (buffer:Int, param:Int, value:Float32):Void;
@:cffi private static function lime_al_bufferfv (buffer:Int, param:Int, values:Dynamic):Void;
@:cffi private static function lime_al_bufferi (buffer:Int, param:Int, value:Int):Void;
@:cffi private static function lime_al_bufferiv (buffer:Int, param:Int, values:Dynamic):Void;
@:cffi private static function lime_al_delete_buffer (buffer:Int):Void;
@:cffi private static function lime_al_delete_buffers (n:Int, buffers:Dynamic):Void;
@:cffi private static function lime_al_delete_source (source:Int):Void;
@:cffi private static function lime_al_delete_sources (n:Int, sources:Dynamic):Void;
@:cffi private static function lime_al_disable (capability:Int):Void;
@:cffi private static function lime_al_distance_model (distanceModel:Int):Void;
@:cffi private static function lime_al_doppler_factor (value:Float32):Void;
@:cffi private static function lime_al_doppler_velocity (value:Float32):Void;
@:cffi private static function lime_al_enable (capability:Int):Void;
@:cffi private static function lime_al_gen_source ():Int;
@:cffi private static function lime_al_gen_sources (n:Int):Dynamic;
@:cffi private static function lime_al_get_boolean (param:Int):Bool;
@:cffi private static function lime_al_get_booleanv (param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_gen_buffer ():Int;
@:cffi private static function lime_al_gen_buffers (n:Int):Dynamic;
@:cffi private static function lime_al_get_buffer3f (buffer:Int, param:Int):Dynamic;
@:cffi private static function lime_al_get_buffer3i (buffer:Int, param:Int):Dynamic;
@:cffi private static function lime_al_get_bufferf (buffer:Int, param:Int):Float32;
@:cffi private static function lime_al_get_bufferfv (buffer:Int, param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_bufferi (buffer:Int, param:Int):Int;
@:cffi private static function lime_al_get_bufferiv (buffer:Int, param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_double (param:Int):Float;
@:cffi private static function lime_al_get_doublev (param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_enum_value (ename:String):Int;
@:cffi private static function lime_al_get_error ():Int;
@:cffi private static function lime_al_get_float (param:Int):Float32;
@:cffi private static function lime_al_get_floatv (param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_integer (param:Int):Int;
@:cffi private static function lime_al_get_integerv (param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_listener3f (param:Int):Dynamic;
@:cffi private static function lime_al_get_listener3i (param:Int):Dynamic;
@:cffi private static function lime_al_get_listenerf (param:Int):Float32;
@:cffi private static function lime_al_get_listenerfv (param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_listeneri (param:Int):Int;
@:cffi private static function lime_al_get_listeneriv (param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_proc_address (fname:String):Float;
@:cffi private static function lime_al_get_source3f (source:Int, param:Int):Dynamic;
@:cffi private static function lime_al_get_source3i (source:Int, param:Int):Dynamic;
@:cffi private static function lime_al_get_sourcef (source:Int, param:Int):Float32;
@:cffi private static function lime_al_get_sourcefv (source:Int, param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_sourcei (source:Int, param:Int):Int;
@:cffi private static function lime_al_get_sourceiv (source:Int, param:Int, count:Int):Dynamic;
@:cffi private static function lime_al_get_string (param:Int):String;
@:cffi private static function lime_al_is_buffer (buffer:Int):Bool;
@:cffi private static function lime_al_is_enabled (capability:Int):Bool;
@:cffi private static function lime_al_is_extension_present (extname:String):Bool;
@:cffi private static function lime_al_is_source (source:Int):Bool;
@:cffi private static function lime_al_listener3f (param:Int, value1:Float32, value2:Float32, value3:Float32):Void;
@:cffi private static function lime_al_listener3i (param:Int, value1:Int, value2:Int, value3:Int):Void;
@:cffi private static function lime_al_listenerf (param:Int, value1:Float32):Void;
@:cffi private static function lime_al_listenerfv (param:Int, values:Dynamic):Void;
@:cffi private static function lime_al_listeneri (param:Int, value1:Int):Void;
@:cffi private static function lime_al_listeneriv (param:Int, values:Dynamic):Void;
@:cffi private static function lime_al_source_pause (source:Int):Void;
@:cffi private static function lime_al_source_pausev (n:Int, sources:Dynamic):Void;
@:cffi private static function lime_al_source_play (source:Int):Void;
@:cffi private static function lime_al_source_playv (n:Int, sources:Dynamic):Void;
@:cffi private static function lime_al_source_queue_buffers (source:Int, nb:Int, buffers:Dynamic):Void;
@:cffi private static function lime_al_source_rewind (source:Int):Void;
@:cffi private static function lime_al_source_rewindv (n:Int, sources:Dynamic):Void;
@:cffi private static function lime_al_source_stop (source:Int):Void;
@:cffi private static function lime_al_source_stopv (n:Int, sources:Dynamic):Void;
@:cffi private static function lime_al_source_unqueue_buffers (source:Int, nb:Int):Dynamic;
@:cffi private static function lime_al_source3f (source:Int, param:Int, value1:Float32, value2:Float32, value3:Float32):Void;
@:cffi private static function lime_al_source3i (source:Int, param:Int, value1:Int, value2:Int, value3:Int):Void;
@:cffi private static function lime_al_sourcef (source:Int, param:Int, value:Float32):Void;
@:cffi private static function lime_al_sourcefv (source:Int, param:Int, values:Dynamic):Void;
@:cffi private static function lime_al_sourcei (source:Int, param:Int, value:Int):Void;
@:cffi private static function lime_al_sourceiv (source:Int, param:Int, values:Dynamic):Void;
@:cffi private static function lime_al_speed_of_sound (speed:Float32):Void;
#end

View File

@@ -1,7 +1,9 @@
package lime.audio.openal;
import lime.system.System;
#if !macro
@:build(lime.system.CFFI.build())
#end
class ALC {
@@ -197,18 +199,18 @@ class ALC {
#if ((cpp || neko || nodejs) && lime_openal)
private static var lime_alc_close_device = System.load ("lime", "lime_alc_close_device", 1);
private static var lime_alc_create_context = System.load ("lime", "lime_alc_create_context", 2);
private static var lime_alc_destroy_context = System.load ("lime", "lime_alc_destroy_context", 1);
private static var lime_alc_get_contexts_device = System.load ("lime", "lime_alc_get_contexts_device", 1);
private static var lime_alc_get_current_context = System.load ("lime", "lime_alc_get_current_context", 0);
private static var lime_alc_get_error = System.load ("lime", "lime_alc_get_error", 1);
private static var lime_alc_get_integerv = System.load ("lime", "lime_alc_get_integerv", 3);
private static var lime_alc_get_string = System.load ("lime", "lime_alc_get_string", 2);
private static var lime_alc_make_context_current = System.load ("lime", "lime_alc_make_context_current", 1);
private static var lime_alc_open_device = System.load ("lime", "lime_alc_open_device", 1);
private static var lime_alc_process_context = System.load ("lime", "lime_alc_process_context", 1);
private static var lime_alc_suspend_context = System.load ("lime", "lime_alc_suspend_context", 1);
@:cffi private static function lime_alc_close_device (device:Float):Bool;
@:cffi private static function lime_alc_create_context (device:Float, attrlist:Dynamic):Float;
@:cffi private static function lime_alc_destroy_context (context:Float):Void;
@:cffi private static function lime_alc_get_contexts_device (context:Float):Float;
@:cffi private static function lime_alc_get_current_context ():Float;
@:cffi private static function lime_alc_get_error (device:Float):Int;
@:cffi private static function lime_alc_get_integerv (device:Float, param:Int, size:Int):Dynamic;
@:cffi private static function lime_alc_get_string (device:Float, param:Int):String;
@:cffi private static function lime_alc_make_context_current (context:Float):Bool;
@:cffi private static function lime_alc_open_device (devicename:String):Float;
@:cffi private static function lime_alc_process_context (context:Float):Void;
@:cffi private static function lime_alc_suspend_context (context:Float):Void;
#end

View File

@@ -3,7 +3,6 @@ package lime.graphics.opengl;
import lime.utils.ArrayBuffer;
import lime.utils.ArrayBufferView;
import lime.utils.ByteArray;
import lime.utils.Float32Array;
import lime.utils.IMemoryRange;
import lime.utils.Int32Array;

View File

@@ -1,7 +1,9 @@
package lime.net.curl;
import lime.system.System;
#if !macro
@:build(lime.system.CFFI.build())
#end
abstract CURL(Float) from Float to Float {
@@ -18,7 +20,7 @@ abstract CURL(Float) from Float to Float {
public static function getDate (date:String, now:Int):Int {
#if ((cpp || neko || nodejs) && lime_curl)
return lime_curl_getdate (date, now);
return cast lime_curl_getdate (date, cast now);
#else
return 0;
#end
@@ -57,7 +59,7 @@ abstract CURL(Float) from Float to Float {
}
public static function versionInfo (type:CURLVersion):String {
public static function versionInfo (type:CURLVersion):Dynamic {
#if ((cpp || neko || nodejs) && lime_curl)
return lime_curl_version_info (cast (type, Int));
@@ -76,11 +78,11 @@ abstract CURL(Float) from Float to Float {
#if ((cpp || neko || nodejs) && lime_curl)
private static var lime_curl_getdate = System.load ("lime", "lime_curl_getdate", 2);
private static var lime_curl_global_cleanup = System.load ("lime", "lime_curl_global_cleanup", 0);
private static var lime_curl_global_init = System.load ("lime", "lime_curl_global_init", 1);
private static var lime_curl_version = System.load ("lime", "lime_curl_version", 0);
private static var lime_curl_version_info = System.load ("lime", "lime_curl_easy_cleanup", 1);
@:cffi private static function lime_curl_getdate (date:String, now:Float):Float;
@:cffi private static function lime_curl_global_cleanup ():Void;
@:cffi private static function lime_curl_global_init (flags:Int):Int;
@:cffi private static function lime_curl_version ():String;
@:cffi private static function lime_curl_version_info (type:Int):Dynamic;
#end

View File

@@ -2,7 +2,10 @@ package lime.net.curl;
import lime.net.curl.CURL;
import lime.system.System;
#if !macro
@:build(lime.system.CFFI.build())
#end
class CURLEasy {
@@ -150,24 +153,19 @@ class CURLEasy {
#if ((cpp || neko || nodejs) && lime_curl)
private static var lime_curl_easy_cleanup = System.load ("lime", "lime_curl_easy_cleanup", 1);
private static var lime_curl_easy_duphandle = System.load ("lime", "lime_curl_easy_duphandle", 1);
private static var lime_curl_easy_escape = System.load ("lime", "lime_curl_easy_escape", 3);
private static var lime_curl_easy_getinfo = System.load ("lime", "lime_curl_easy_getinfo", 2);
private static var lime_curl_easy_init = System.load ("lime", "lime_curl_easy_init", 0);
private static var lime_curl_easy_pause = System.load ("lime", "lime_curl_easy_pause", 2);
private static var lime_curl_easy_perform = System.load ("lime", "lime_curl_easy_perform", 1);
private static var lime_curl_easy_recv = System.load ("lime", "lime_curl_easy_recv", 4);
private static var lime_curl_easy_reset = System.load ("lime", "lime_curl_easy_reset", 1);
private static var lime_curl_easy_send = System.load ("lime", "lime_curl_easy_send", 4);
private static var lime_curl_easy_setopt = System.load ("lime", "lime_curl_easy_setopt", 3);
private static var lime_curl_easy_strerror = System.load ("lime", "lime_curl_easy_strerror", 1);
private static var lime_curl_easy_unescape = System.load ("lime", "lime_curl_easy_unescape", 4);
private static var lime_curl_getdate = System.load ("lime", "lime_curl_getdate", 2);
private static var lime_curl_global_cleanup = System.load ("lime", "lime_curl_global_cleanup", 0);
private static var lime_curl_global_init = System.load ("lime", "lime_curl_global_init", 1);
private static var lime_curl_version = System.load ("lime", "lime_curl_version", 0);
private static var lime_curl_version_info = System.load ("lime", "lime_curl_easy_cleanup", 1);
@:cffi private static function lime_curl_easy_cleanup (handle:Float):Void;
@:cffi private static function lime_curl_easy_duphandle (handle:Float):Float;
@:cffi private static function lime_curl_easy_escape (curl:Float, url:String, length:Int):String;
@:cffi private static function lime_curl_easy_getinfo (curl:Float, info:Int):Dynamic;
@:cffi private static function lime_curl_easy_init ():Float;
@:cffi private static function lime_curl_easy_pause (handle:Float, bitmask:Int):Int;
@:cffi private static function lime_curl_easy_perform (easy_handle:Float):Int;
@:cffi private static function lime_curl_easy_recv (curl:Float, buffer:Dynamic, buflen:Int, n:Int):Int;
@:cffi private static function lime_curl_easy_reset (curl:Float):Void;
@:cffi private static function lime_curl_easy_send (curl:Float, buffer:Dynamic, buflen:Int, n:Int):Int;
@:cffi private static function lime_curl_easy_setopt (handle:Float, option:Int, parameter:Dynamic):Int;
@:cffi private static function lime_curl_easy_strerror (errornum:Int):String;
@:cffi private static function lime_curl_easy_unescape (curl:Float, url:String, inlength:Int, outlength:Int):String;
#end

View File

@@ -1,6 +1,11 @@
package lime.system;
#if !macro
@:build(lime.system.CFFI.build())
#end
class JNI {
@@ -183,17 +188,22 @@ class JNI {
#if (cpp || neko || nodejs)
private static var lime_jni_create_field = System.load ("lime", "lime_jni_create_field", 4);
private static var lime_jni_create_method = System.load ("lime", "lime_jni_create_method", 5);
private static var lime_jni_get_env = System.load ("lime", "lime_jni_get_env", 0);
private static var lime_jni_call_member = System.load ("lime", "lime_jni_call_member", 3);
private static var lime_jni_call_static = System.load ("lime", "lime_jni_call_static", 2);
@:cffi private static function lime_jni_create_field (className:String, field:String, signature:String, isStatic:Bool):Dynamic;
@:cffi private static function lime_jni_create_method (className:String, method:String, signature:String, isStatic:Bool, quiet:Bool):Dynamic;
@:cffi private static function lime_jni_get_env ():Float;
@:cffi private static function lime_jni_call_member (jniMethod:Dynamic, jniObject:Dynamic, args:Dynamic):Dynamic;
@:cffi private static function lime_jni_call_static (jniMethod:Dynamic, args:Dynamic):Dynamic;
#end
}
#if !macro
@:build(lime.system.CFFI.build())
#end
class JNIMemberField {
@@ -236,14 +246,19 @@ class JNIMemberField {
#if (cpp || neko || nodejs)
private static var lime_jni_get_member = System.load ("lime", "lime_jni_get_member", 2);
private static var lime_jni_set_member = System.load ("lime", "lime_jni_set_member", 3);
@:cffi private static function lime_jni_get_member (jniField:Dynamic, jniObject:Dynamic):Dynamic;
@:cffi private static function lime_jni_set_member (jniField:Dynamic, jniObject:Dynamic, value:Dynamic):Void;
#end
}
#if !macro
@:build(lime.system.CFFI.build())
#end
class JNIStaticField {
@@ -286,14 +301,19 @@ class JNIStaticField {
#if (cpp || neko || nodejs)
private static var lime_jni_get_static = System.load ("lime", "lime_jni_get_static", 1);
private static var lime_jni_set_static = System.load ("lime", "lime_jni_set_static", 2);
@:cffi private static function lime_jni_get_static (jniField:Dynamic):Dynamic;
@:cffi private static function lime_jni_set_static (jniField:Dynamic, value:Dynamic):Void;
#end
}
#if !macro
@:build(lime.system.CFFI.build())
#end
class JNIMethod {
@@ -367,8 +387,8 @@ class JNIMethod {
#if (cpp || neko || nodejs)
private static var lime_jni_call_member = System.load ("lime", "lime_jni_call_member", 3);
private static var lime_jni_call_static = System.load ("lime", "lime_jni_call_static", 2);
@:cffi private static function lime_jni_call_member (jniMethod:Dynamic, jniObject:Dynamic, args:Dynamic):Dynamic;
@:cffi private static function lime_jni_call_static (jniMethod:Dynamic, args:Dynamic):Dynamic;
#end

File diff suppressed because it is too large Load Diff

View File

@@ -1,42 +1,38 @@
#include <curl/curl.h>
#include <hx/CFFI.h>
#include <hx/CFFIPrime.h>
#include <string.h>
namespace lime {
value lime_curl_easy_cleanup (value handle) {
void lime_curl_easy_cleanup (double handle) {
curl_easy_cleanup ((CURL*)(intptr_t)val_float (handle));
return alloc_null ();
curl_easy_cleanup ((CURL*)(intptr_t)handle);
}
value lime_curl_easy_duphandle (value handle) {
double lime_curl_easy_duphandle (double handle) {
return alloc_float ((intptr_t)curl_easy_duphandle ((CURL*)(intptr_t)val_float (handle)));
return (intptr_t)curl_easy_duphandle ((CURL*)(intptr_t)handle);
}
value lime_curl_easy_escape (value curl, value url, value length) {
HxString lime_curl_easy_escape (double curl, HxString url, int length) {
char* result = curl_easy_escape ((CURL*)(intptr_t)val_float (curl), val_string (url), val_int (length));
value str = alloc_string (result);
curl_free (result);
return str;
char* result = curl_easy_escape ((CURL*)(intptr_t)curl, url.__s, length);
return HxString (result);
}
value lime_curl_easy_getinfo (value curl, value info) {
value lime_curl_easy_getinfo (double curl, int info) {
CURLcode code = CURLE_OK;
CURL* handle = (CURL*)(intptr_t)val_float (curl);
CURLINFO type = (CURLINFO)val_int (info);
CURL* handle = (CURL*)(intptr_t)curl;
CURLINFO type = (CURLINFO)info;
switch (type) {
@@ -102,13 +98,15 @@ namespace lime {
case CURLINFO_CERTINFO:
case CURLINFO_TLS_SESSION:
// todo
// TODO
break;
case CURLINFO_NONE:
case CURLINFO_LASTONE:
// ignore
break;
@@ -119,47 +117,48 @@ namespace lime {
}
value lime_curl_easy_init () {
double lime_curl_easy_init () {
return alloc_float ((intptr_t)curl_easy_init ());
return (intptr_t)curl_easy_init ();
}
value lime_curl_easy_pause (value handle, value bitmask) {
int lime_curl_easy_pause (double handle, int bitmask) {
return alloc_int ((int)curl_easy_pause ((CURL*)(intptr_t)val_float (handle), val_int (bitmask)));
return curl_easy_pause ((CURL*)(intptr_t)handle, bitmask);
}
value lime_curl_easy_perform (value easy_handle) {
int lime_curl_easy_perform (double easy_handle) {
return alloc_int ((int)curl_easy_perform ((CURL*)(intptr_t)val_float (easy_handle)));
return curl_easy_perform ((CURL*)(intptr_t)easy_handle);
}
value lime_curl_easy_recv (value curl, value buffer, value buflen, value n) {
int lime_curl_easy_recv (double curl, value buffer, int buflen, int n) {
// todo
return alloc_null ();
// TODO
return 0;
}
value lime_curl_easy_reset (value curl) {
void lime_curl_easy_reset (double curl) {
curl_easy_reset ((CURL*)(intptr_t)val_float (curl));
return alloc_null ();
curl_easy_reset ((CURL*)(intptr_t)curl);
}
value lime_curl_easy_send (value curl, value buffer, value buflen, value n) {
int lime_curl_easy_send (double curl, value buffer, int buflen, int n) {
// todo
return alloc_null ();
// TODO
return 0;
}
@@ -179,6 +178,7 @@ namespace lime {
}
static size_t read_callback (void *buffer, size_t size, size_t nmemb, void *userp) {
AutoGCRoot* callback = (AutoGCRoot*)userp;
@@ -195,6 +195,7 @@ namespace lime {
}
static size_t progress_callback (void *userp, double dltotal, double dlnow, double ultotal, double ulnow) {
AutoGCRoot* callback = (AutoGCRoot*)userp;
@@ -211,11 +212,11 @@ namespace lime {
}
value lime_curl_easy_setopt (value handle, value option, value parameter) {
int lime_curl_easy_setopt (double handle, int option, value parameter) {
CURLcode code = CURLE_OK;
CURL* curl = (CURL*)(intptr_t)val_float (handle);
CURLoption type = (CURLoption)val_int (option);
CURL* curl = (CURL*)(intptr_t)handle;
CURLoption type = (CURLoption)option;
switch (type) {
@@ -494,30 +495,23 @@ namespace lime {
}
return alloc_int (code);
return code;
}
value lime_curl_easy_strerror (value errornum) {
HxString lime_curl_easy_strerror (int errornum) {
const char* result = curl_easy_strerror ((CURLcode)val_int (errornum));
value str = alloc_string (result);
curl_free ((void*)result);
return str;
const char* result = curl_easy_strerror ((CURLcode)errornum);
return HxString (result);
}
value lime_curl_easy_unescape (value curl, value url, value inlength, value outlength) {
HxString lime_curl_easy_unescape (double curl, HxString url, int inlength, int outlength) {
int length = val_int (outlength);
char* result = curl_easy_unescape ((CURL*)(intptr_t)val_float (curl), val_string (url), val_int (inlength), &length);
value str = alloc_string (result);
curl_free (result);
return str;
char* result = curl_easy_unescape ((CURL*)(intptr_t)curl, url.__s, inlength, &outlength);
return HxString (result);
}
@@ -527,25 +521,24 @@ namespace lime {
//lime_curl_formget;
value lime_curl_getdate (value datestring, value now) {
double lime_curl_getdate (HxString datestring, double now) {
time_t time = (time_t)val_float (now);
return alloc_float (curl_getdate (val_string (datestring), &time));
time_t time = (time_t)now;
return curl_getdate (datestring.__s, &time);
}
value lime_curl_global_cleanup () {
void lime_curl_global_cleanup () {
curl_global_cleanup ();
return alloc_null ();
}
value lime_curl_global_init (value flags) {
int lime_curl_global_init (int flags) {
return alloc_int (curl_global_init (val_int (flags)));
return curl_global_init (flags);
}
@@ -573,46 +566,43 @@ namespace lime {
//lime_curl_slist_free_all
value lime_curl_version () {
HxString lime_curl_version () {
char* result = curl_version ();
value str = alloc_string (result);
curl_free (result);
return str;
return HxString (result);
}
value lime_curl_version_info (value type) {
value lime_curl_version_info (int type) {
curl_version_info_data* data = curl_version_info ((CURLversion)val_int (type));
curl_version_info_data* data = curl_version_info ((CURLversion)type);
//todo
// TODO
return alloc_null ();
}
DEFINE_PRIM (lime_curl_easy_cleanup, 1);
DEFINE_PRIM (lime_curl_easy_duphandle, 1);
DEFINE_PRIM (lime_curl_easy_escape, 3);
DEFINE_PRIM (lime_curl_easy_getinfo, 2);
DEFINE_PRIM (lime_curl_easy_init, 0);
DEFINE_PRIM (lime_curl_easy_pause, 2);
DEFINE_PRIM (lime_curl_easy_perform, 1);
DEFINE_PRIM (lime_curl_easy_recv, 4);
DEFINE_PRIM (lime_curl_easy_reset, 1);
DEFINE_PRIM (lime_curl_easy_send, 4);
DEFINE_PRIM (lime_curl_easy_setopt, 3);
DEFINE_PRIM (lime_curl_easy_strerror, 1);
DEFINE_PRIM (lime_curl_easy_unescape, 4);
DEFINE_PRIM (lime_curl_getdate, 2);
DEFINE_PRIM (lime_curl_global_cleanup, 0);
DEFINE_PRIM (lime_curl_global_init, 1);
DEFINE_PRIM (lime_curl_version, 0);
DEFINE_PRIM (lime_curl_version_info, 1);
DEFINE_PRIME1v (lime_curl_easy_cleanup);
DEFINE_PRIME1 (lime_curl_easy_duphandle);
DEFINE_PRIME3 (lime_curl_easy_escape);
DEFINE_PRIME2 (lime_curl_easy_getinfo);
DEFINE_PRIME0 (lime_curl_easy_init);
DEFINE_PRIME2 (lime_curl_easy_pause);
DEFINE_PRIME1 (lime_curl_easy_perform);
DEFINE_PRIME4 (lime_curl_easy_recv);
DEFINE_PRIME1v (lime_curl_easy_reset);
DEFINE_PRIME4 (lime_curl_easy_send);
DEFINE_PRIME3 (lime_curl_easy_setopt);
DEFINE_PRIME1 (lime_curl_easy_strerror);
DEFINE_PRIME4 (lime_curl_easy_unescape);
DEFINE_PRIME2 (lime_curl_getdate);
DEFINE_PRIME0v (lime_curl_global_cleanup);
DEFINE_PRIME1 (lime_curl_global_init);
DEFINE_PRIME0 (lime_curl_version);
DEFINE_PRIME1 (lime_curl_version_info);
}

View File

@@ -1,6 +1,6 @@
#include <system/JNI.h>
#include <utils/Object.h>
#include <hx/CFFI.h>
#include <hx/CFFIPrime.h>
#include <jni.h>
#include <pthread.h>
#include <android/log.h>
@@ -470,7 +470,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_init_callback, 1);
DEFINE_PRIME1 (lime_jni_init_callback);
struct JavaHaxeReference {
@@ -1113,7 +1113,7 @@ namespace lime {
struct JNIField : public lime::Object {
JNIField (value inClass, value inField, value inSignature, bool inStatic) {
JNIField (HxString inClass, HxString inField, HxString inSignature, bool inStatic) {
JNIEnv *env = (JNIEnv*)JNI::GetEnv ();
JNIInit (env);
@@ -1122,10 +1122,10 @@ namespace lime {
mField = 0;
mFieldType = JNIType (jniVoid, 0);
const char *field = val_string (inField);
const char *field = inField.__s;
mClass = FindClass (val_string (inClass));
const char *signature = val_string (inSignature);
mClass = FindClass (inClass.__s);
const char *signature = inSignature.__s;
if (mClass) {
@@ -1450,9 +1450,9 @@ namespace lime {
};
value lime_jni_create_field (value inClass, value inField, value inSig, value inStatic) {
value lime_jni_create_field (HxString inClass, HxString inField, HxString inSig, bool inStatic) {
JNIField *field = new JNIField (inClass, inField, inSig, val_bool (inStatic));
JNIField *field = new JNIField (inClass, inField, inSig, inStatic);
if (field->Ok ()) {
@@ -1466,7 +1466,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_create_field, 4);
DEFINE_PRIME4 (lime_jni_create_field);
value lime_jni_get_static (value inField) {
@@ -1484,7 +1484,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_get_static, 1);
DEFINE_PRIME1 (lime_jni_get_static);
void lime_jni_set_static (value inField, value inValue) {
@@ -1501,7 +1501,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_set_static, 2);
DEFINE_PRIME2v (lime_jni_set_static);
value lime_jni_get_member (value inField, value inObject) {
@@ -1527,7 +1527,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_get_member, 2);
DEFINE_PRIME2 (lime_jni_get_member);
void lime_jni_set_member (value inField, value inObject, value inValue) {
@@ -1553,7 +1553,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_set_member, 3);
DEFINE_PRIME3v (lime_jni_set_member);
struct JNIMethod : public lime::Object {
@@ -1562,7 +1562,7 @@ namespace lime {
enum { MAX = 20 };
JNIMethod (value inClass, value inMethod, value inSignature, bool inStatic, bool inQuiet) {
JNIMethod (HxString inClass, HxString inMethod, HxString inSignature, bool inStatic, bool inQuiet) {
JNIEnv *env = (JNIEnv*)JNI::GetEnv ();
JNIInit (env);
@@ -1572,14 +1572,14 @@ namespace lime {
mReturn = JNIType (jniVoid, 0);
mArgCount = 0;
const char *method = val_string (inMethod);
const char *method = inMethod.__s;
mIsConstructor = !strncmp (method, "<init>", 6);
mClass = FindClass (val_string (inClass), inQuiet);
mClass = FindClass (inClass.__s, inQuiet);
if (mClass) {
const char *signature = val_string (inSignature);
const char *signature = inSignature.__s;
if (inStatic && !mIsConstructor) {
@@ -1886,10 +1886,9 @@ namespace lime {
};
value lime_jni_create_method (value inClass, value inMethod, value inSig, value inStatic, value inQuiet) {
value lime_jni_create_method (HxString inClass, HxString inMethod, HxString inSig, bool inStatic, bool quiet) {
bool quiet = val_bool (inQuiet);
JNIMethod *method = new JNIMethod (inClass, inMethod, inSig, val_bool (inStatic), quiet);
JNIMethod *method = new JNIMethod (inClass, inMethod, inSig, inStatic, quiet);
if (method->Ok ()) {
@@ -1908,7 +1907,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_create_method, 5);
DEFINE_PRIME5 (lime_jni_create_method);
value lime_jni_call_static (value inMethod, value inArgs) {
@@ -1926,7 +1925,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_call_static, 2);
DEFINE_PRIME2 (lime_jni_call_static);
value lime_jni_call_member (value inMethod, value inObject, value inArgs) {
@@ -1952,17 +1951,17 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_call_member, 3);
DEFINE_PRIME3 (lime_jni_call_member);
value lime_jni_get_env () {
double lime_jni_get_env () {
JNIEnv *env = (JNIEnv*)JNI::GetEnv ();
return alloc_int ((intptr_t)env);
return (intptr_t)env;
}
DEFINE_PRIM (lime_jni_get_env, 0);
DEFINE_PRIME0 (lime_jni_get_env);
value lime_jni_get_jobject (value inValue) {
@@ -1979,7 +1978,7 @@ namespace lime {
}
DEFINE_PRIM (lime_jni_get_jobject, 1);
DEFINE_PRIME1 (lime_jni_get_jobject);
value lime_post_ui_callback (value inCallback) {
@@ -1988,7 +1987,7 @@ namespace lime {
JNIInit (env);
AutoGCRoot *root = new AutoGCRoot (inCallback);
ELOG ("NME set onCallback %p",root);
ELOG ("Lime set onCallback %p",root);
env->CallStaticVoidMethod (GameActivity, postUICallback, (jlong)root);
jthrowable exc = env->ExceptionOccurred ();
@@ -2001,11 +2000,9 @@ namespace lime {
}
return alloc_null ();
}
DEFINE_PRIM (lime_post_ui_callback, 1);
DEFINE_PRIME1v (lime_post_ui_callback);
}
@@ -2017,7 +2014,7 @@ extern "C" {
JAVA_EXPORT void JNICALL Java_org_haxe_lime_Lime_onCallback (JNIEnv * env, jobject obj, jlong handle) {
lime::AutoHaxe haxe ("onCallback");
ELOG ("NME onCallback %p", (void *)handle);
ELOG ("Lime onCallback %p", (void *)handle);
AutoGCRoot *root = (AutoGCRoot *)handle;
val_call0 (root->get ());
delete root;
@@ -2049,7 +2046,7 @@ extern "C" {
} else {
ELOG ("NME CallHaxe - init not called.");
ELOG ("Lime CallHaxe - init not called.");
return alloc_null ();
}