diff runtime/worker.c @ 74:a844c623c7df

Add support for Worker type
author Mike Pavone <pavone@retrodev.com>
date Thu, 01 Jul 2010 21:32:08 -0400
parents
children 7428aa5d6ade
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/runtime/worker.c	Thu Jul 01 21:32:08 2010 -0400
@@ -0,0 +1,37 @@
+
+object * _internal_worker_alloc(int16_t size)
+{
+	t_Worker * worker = (t_Worker *)new_multisize(TYPE_WORKER, sizeof(nt_Worker)+sizeof(object *)*size);
+	worker->payload.Size = size;
+	return (object *)worker;
+}
+
+void _internal_worker_setinput(object * worker, int16_t num, object * val)
+{
+	//Client code is responsible for checking if we've allocated enough space
+	object **params = (object **)(((t_Worker *)worker)+1);
+	params[num] = val;
+}
+
+object * _internal_worker_getinput(object * worker, int16_t num)
+{
+	//Client code MUST check if input is populated before calling this function
+	object **params = (object **)(((t_Worker *)worker)+1);
+	object * ret = add_ref(params[num]);
+	release_ref(worker);
+	return ret;
+}
+
+int32_t _internal_worker_hasinput(object * worker, int16_t num)
+{
+	object **params = (object **)(((t_Worker *)worker)+1);
+	if(params[num])
+	{
+		release_ref(worker);
+		return 1;
+	} else {
+		release_ref(worker);
+		return 0;
+	}
+}
+