view 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 source


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;
	}
}