/*
 *	jtprim_max.c
 *
 *	JoyToyインタプリタ
 *
 *	* Sun Jan 01 00:00:00 JST 2006 Naoyuki Sawa
 *	- 作成開始。
 *	* Tue Jan 31 00:00:00 JST 2006 Naoyuki Sawa
 *	- 1st リリース。
 */
#include "app.h"

/*****************************************************************************
 *	JTPRIM_MAX
 *****************************************************************************/

static JTCODE_INTERFACE**
jtprim_max_call(LIST/*<JTCODE_INTERFACE**>*/ * args_list)
{
	JTCODE_INTERFACE** code = NULL;
	COMPARE_INTERFACE** compare = NULL;
	//
	int i;
	int count;

	/* 少なくとも一つの引数が必要です。 */
	count = list_size(args_list);
	if(!count) {
		DIE();
	}

	/* 引数の中から、最大値を求めます。 */
	for(i = 0; i < count; i++) {
		safe_attach(code, list_get(args_list, i));
		if(!compare || ((*compare)->compare(compare, code) < 0)) {
			safe_assign_interface(compare, code, COMPARE_INTERFACE);
			if(!compare) {
				DIE(); /* 比較演算をサポートしていない */
			}
		}
	}
	safe_assign_interface(code, compare, JTCODE_INTERFACE);
	if(!code) {
		DIE(); /* 有り得ない */
	}

	/* 不要になったインターフェイスを解放します。 */
	safe_release(compare);

	return code;
}

JTCODE_INTERFACE**
jtprim_max_create()
{
	return jtprim_create("max", jtprim_max_call);
}

