Update Files
This commit is contained in:
49
Kha/Tools/macos/std/neko/_std/sys/thread/Deque.hx
Normal file
49
Kha/Tools/macos/std/neko/_std/sys/thread/Deque.hx
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C)2005-2019 Haxe Foundation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package sys.thread;
|
||||
|
||||
@:coreApi
|
||||
class Deque<T> {
|
||||
var q:Dynamic;
|
||||
|
||||
public function new() {
|
||||
q = deque_create();
|
||||
}
|
||||
|
||||
public function add(i:T):Void {
|
||||
deque_add(q, i);
|
||||
}
|
||||
|
||||
public function push(i:T):Void {
|
||||
deque_push(q, i);
|
||||
}
|
||||
|
||||
public function pop(block:Bool):Null<T> {
|
||||
return deque_pop(q, block);
|
||||
}
|
||||
|
||||
static var deque_create = neko.Lib.loadLazy("std", "deque_create", 0);
|
||||
static var deque_add = neko.Lib.loadLazy("std", "deque_add", 2);
|
||||
static var deque_push = neko.Lib.loadLazy("std", "deque_push", 2);
|
||||
static var deque_pop = neko.Lib.loadLazy("std", "deque_pop", 2);
|
||||
}
|
44
Kha/Tools/macos/std/neko/_std/sys/thread/Lock.hx
Normal file
44
Kha/Tools/macos/std/neko/_std/sys/thread/Lock.hx
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C)2005-2019 Haxe Foundation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package sys.thread;
|
||||
|
||||
@:coreApi
|
||||
class Lock {
|
||||
var l:Dynamic;
|
||||
|
||||
public function new() {
|
||||
l = lock_create();
|
||||
}
|
||||
|
||||
public function wait(?timeout:Float):Bool {
|
||||
return lock_wait(l, timeout);
|
||||
}
|
||||
|
||||
public function release():Void {
|
||||
lock_release(l);
|
||||
}
|
||||
|
||||
static var lock_create = neko.Lib.load("std", "lock_create", 0);
|
||||
static var lock_release = neko.Lib.load("std", "lock_release", 1);
|
||||
static var lock_wait = neko.Lib.load("std", "lock_wait", 2);
|
||||
}
|
49
Kha/Tools/macos/std/neko/_std/sys/thread/Mutex.hx
Normal file
49
Kha/Tools/macos/std/neko/_std/sys/thread/Mutex.hx
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C)2005-2019 Haxe Foundation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package sys.thread;
|
||||
|
||||
@:coreApi
|
||||
class Mutex {
|
||||
var m:Dynamic;
|
||||
|
||||
public function new():Void {
|
||||
m = mutex_create();
|
||||
}
|
||||
|
||||
public function acquire():Void {
|
||||
mutex_acquire(m);
|
||||
}
|
||||
|
||||
public function tryAcquire():Bool {
|
||||
return mutex_try(m);
|
||||
}
|
||||
|
||||
public function release():Void {
|
||||
mutex_release(m);
|
||||
}
|
||||
|
||||
static var mutex_create = neko.Lib.loadLazy("std", "mutex_create", 0);
|
||||
static var mutex_release = neko.Lib.loadLazy("std", "mutex_release", 1);
|
||||
static var mutex_acquire = neko.Lib.loadLazy("std", "mutex_acquire", 1);
|
||||
static var mutex_try = neko.Lib.loadLazy("std", "mutex_try", 1);
|
||||
}
|
188
Kha/Tools/macos/std/neko/_std/sys/thread/Thread.hx
Normal file
188
Kha/Tools/macos/std/neko/_std/sys/thread/Thread.hx
Normal file
@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright (C)2005-2019 Haxe Foundation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package sys.thread;
|
||||
|
||||
private typedef ThreadImpl = HaxeThread;
|
||||
|
||||
abstract Thread(ThreadImpl) from ThreadImpl {
|
||||
|
||||
public var events(get,never):EventLoop;
|
||||
|
||||
public inline function sendMessage(msg:Dynamic):Void {
|
||||
this.sendMessage(msg);
|
||||
}
|
||||
|
||||
public static inline function current():Thread {
|
||||
return HaxeThread.current();
|
||||
}
|
||||
|
||||
public static inline function create(job:()->Void):Thread {
|
||||
return HaxeThread.create(job, false);
|
||||
}
|
||||
|
||||
public static inline function runWithEventLoop(job:()->Void):Void {
|
||||
HaxeThread.runWithEventLoop(job);
|
||||
}
|
||||
|
||||
public static inline function createWithEventLoop(job:()->Void):Thread {
|
||||
return HaxeThread.create(job, true);
|
||||
}
|
||||
|
||||
public static inline function readMessage(block:Bool):Dynamic {
|
||||
return HaxeThread.readMessage(block);
|
||||
}
|
||||
|
||||
function get_events():EventLoop {
|
||||
if(this.events == null)
|
||||
throw new NoEventLoopException();
|
||||
return this.events;
|
||||
}
|
||||
|
||||
@:keep
|
||||
static function processEvents() {
|
||||
HaxeThread.current().events.loop();
|
||||
}
|
||||
}
|
||||
|
||||
@:callable
|
||||
@:coreType
|
||||
private abstract NativeThreadHandle {}
|
||||
|
||||
private typedef ThreadHandle = NativeThreadHandle;
|
||||
|
||||
private class HaxeThread {
|
||||
static var thread_create:(callb:(_:Dynamic)->Void, _:Dynamic)->ThreadHandle;
|
||||
static var thread_current:()->ThreadHandle;
|
||||
static var thread_send:(handle:ThreadHandle, msg:Dynamic)->Void;
|
||||
static var thread_read_message:(block:Bool)->Dynamic;
|
||||
|
||||
static var mainThreadHandle:ThreadHandle;
|
||||
static var mainThread:HaxeThread;
|
||||
|
||||
static var threads:Array<{thread:HaxeThread, handle:ThreadHandle}>;
|
||||
static var threadsMutex:Mutex;
|
||||
|
||||
static function __init__() {
|
||||
thread_create = neko.Lib.load("std", "thread_create", 2);
|
||||
thread_current = neko.Lib.load("std", "thread_current", 0);
|
||||
thread_send = neko.Lib.load("std", "thread_send", 2);
|
||||
thread_read_message = neko.Lib.load("std", "thread_read_message", 1);
|
||||
|
||||
mainThreadHandle = thread_current();
|
||||
mainThread = new HaxeThread(mainThreadHandle);
|
||||
mainThread.events = new EventLoop();
|
||||
|
||||
threads = [];
|
||||
threadsMutex = new Mutex();
|
||||
}
|
||||
|
||||
public var events(default,null):Null<EventLoop>;
|
||||
public var handle:ThreadHandle;
|
||||
|
||||
static public function current():HaxeThread {
|
||||
var handle = thread_current();
|
||||
if(handle == mainThreadHandle) {
|
||||
return mainThread;
|
||||
}
|
||||
threadsMutex.acquire();
|
||||
var thread = null;
|
||||
for(item in threads) {
|
||||
if(item.handle == handle) {
|
||||
thread = item.thread;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(thread == null) {
|
||||
thread = new HaxeThread(handle);
|
||||
threads.push({thread:thread, handle:handle});
|
||||
}
|
||||
threadsMutex.release();
|
||||
return thread;
|
||||
}
|
||||
|
||||
public static function create(callb:()->Void, withEventLoop:Bool):Thread {
|
||||
var item = {handle:null, thread:new HaxeThread(null)};
|
||||
threadsMutex.acquire();
|
||||
threads.push(item);
|
||||
threadsMutex.release();
|
||||
if(withEventLoop)
|
||||
item.thread.events = new EventLoop();
|
||||
item.handle = thread_create(_ -> {
|
||||
if(item.thread.handle == null) {
|
||||
item.handle = thread_current();
|
||||
item.thread.handle = item.handle;
|
||||
}
|
||||
try {
|
||||
callb();
|
||||
if(withEventLoop)
|
||||
item.thread.events.loop();
|
||||
} catch(e) {
|
||||
dropThread(item);
|
||||
throw e;
|
||||
}
|
||||
dropThread(item);
|
||||
}, null);
|
||||
item.thread.handle = item.handle;
|
||||
return item.thread;
|
||||
}
|
||||
|
||||
public static function runWithEventLoop(job:()->Void):Void {
|
||||
var thread = current();
|
||||
if(thread.events == null) {
|
||||
thread.events = new EventLoop();
|
||||
try {
|
||||
job();
|
||||
thread.events.loop();
|
||||
thread.events = null;
|
||||
} catch(e) {
|
||||
thread.events = null;
|
||||
throw e;
|
||||
}
|
||||
} else {
|
||||
job();
|
||||
}
|
||||
}
|
||||
|
||||
static function dropThread(deleteItem) {
|
||||
threadsMutex.acquire();
|
||||
for(i => item in threads) {
|
||||
if(item == deleteItem) {
|
||||
threads.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
threadsMutex.release();
|
||||
}
|
||||
|
||||
public static inline function readMessage(block:Bool):Dynamic {
|
||||
return thread_read_message(block);
|
||||
}
|
||||
|
||||
public function new(handle:ThreadHandle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
public function sendMessage(msg:Dynamic) {
|
||||
thread_send(handle, msg);
|
||||
}
|
||||
}
|
47
Kha/Tools/macos/std/neko/_std/sys/thread/Tls.hx
Normal file
47
Kha/Tools/macos/std/neko/_std/sys/thread/Tls.hx
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C)2005-2019 Haxe Foundation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package sys.thread;
|
||||
|
||||
@:coreApi
|
||||
class Tls<T> {
|
||||
var t:Dynamic;
|
||||
|
||||
public var value(get, set):T;
|
||||
|
||||
public function new() {
|
||||
t = tls_create();
|
||||
}
|
||||
|
||||
function get_value():T {
|
||||
return tls_get(t);
|
||||
}
|
||||
|
||||
function set_value(v:T):T {
|
||||
tls_set(t, v);
|
||||
return v;
|
||||
}
|
||||
|
||||
static var tls_create = neko.Lib.load("std", "tls_create", 0);
|
||||
static var tls_get = neko.Lib.load("std", "tls_get", 1);
|
||||
static var tls_set = neko.Lib.load("std", "tls_set", 2);
|
||||
}
|
Reference in New Issue
Block a user