/*=============================================================================
Module          :ng_gen
Filename        :_stub_sample_object.c
RCS             :
        $Source:
        $Revision:
        $Author:
        $Data:Thu Jul  7 19:16:45 2005
        $Locker:
        $state:
=============================================================================*/
#include "ngEx.h"

/* DESCRIPTION:
This is test object
*/

static char stub_description[] = "This is test object";


ngExpressionElement_t size0_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_CONSTANT, 1},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start0_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end0_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step0_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngSubscriptInformation_t dims0_1[] = {
	{ size0_1_0, start0_1_0, end0_1_0, step0_1_0 },
};

ngArgumentInformation_t param_desc_0[] = {
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_DOUBLE, 0, NULL,  NULL },
	{ NG_ARGUMENT_IO_MODE_OUT, NG_ARGUMENT_DATA_TYPE_DOUBLE, 1, dims0_1,  NULL },
};


ngExpressionElement_t size1_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start1_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end1_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step1_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t size1_1_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start1_1_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end1_1_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step1_1_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngExpressionElement_t size1_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start1_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end1_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step1_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t size1_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start1_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end1_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step1_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngExpressionElement_t size1_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start1_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end1_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step1_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t size1_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start1_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end1_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step1_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngSubscriptInformation_t dims1_1[] = {
	{ size1_1_0, start1_1_0, end1_1_0, step1_1_0 },
	{ size1_1_1, start1_1_1, end1_1_1, step1_1_1 },
};

ngSubscriptInformation_t dims1_2[] = {
	{ size1_2_0, start1_2_0, end1_2_0, step1_2_0 },
	{ size1_2_1, start1_2_1, end1_2_1, step1_2_1 },
};

ngSubscriptInformation_t dims1_3[] = {
	{ size1_3_0, start1_3_0, end1_3_0, step1_3_0 },
	{ size1_3_1, start1_3_1, end1_3_1, step1_3_1 },
};

ngArgumentInformation_t param_desc_1[] = {
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_LONG, 0, NULL,  NULL },
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_DOUBLE, 2, dims1_1,  NULL },
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_DOUBLE, 2, dims1_2,  NULL },
	{ NG_ARGUMENT_IO_MODE_OUT, NG_ARGUMENT_DATA_TYPE_DOUBLE, 2, dims1_3,  NULL },
};


ngExpressionElement_t size2_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 3},
	{NG_EXPRESSION_VALUE_TYPE_CONSTANT, 1},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 1},
	{NG_EXPRESSION_VALUE_TYPE_CONSTANT, 1},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 2},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start2_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end2_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step2_1_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngExpressionElement_t size2_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 3},
	{NG_EXPRESSION_VALUE_TYPE_CONSTANT, 2},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 1},
	{NG_EXPRESSION_VALUE_TYPE_CONSTANT, 3},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 2},
	{NG_EXPRESSION_VALUE_TYPE_CONSTANT, 1},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 1},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start2_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end2_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step2_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngExpressionElement_t size2_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_OPCODE, 3},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start2_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end2_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step2_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngSubscriptInformation_t dims2_1[] = {
	{ size2_1_0, start2_1_0, end2_1_0, step2_1_0 },
};

ngSubscriptInformation_t dims2_2[] = {
	{ size2_2_0, start2_2_0, end2_2_0, step2_2_0 },
};

ngSubscriptInformation_t dims2_3[] = {
	{ size2_3_0, start2_3_0, end2_3_0, step2_3_0 },
};

ngArgumentInformation_t param_desc_2[] = {
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_LONG, 0, NULL,  NULL },
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_DOUBLE, 1, dims2_1,  NULL },
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_DOUBLE, 1, dims2_2,  NULL },
	{ NG_ARGUMENT_IO_MODE_OUT, NG_ARGUMENT_DATA_TYPE_DOUBLE, 1, dims2_3,  NULL },
};


ngExpressionElement_t size3_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 1},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start3_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end3_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step3_2_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t size3_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start3_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end3_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step3_2_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngExpressionElement_t size3_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start3_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end3_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step3_3_0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t size3_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_IN_ARGUMENT, 1},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t start3_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t end3_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t step3_3_1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};


ngSubscriptInformation_t dims3_2[] = {
	{ size3_2_0, start3_2_0, end3_2_0, step3_2_0 },
	{ size3_2_1, start3_2_1, end3_2_1, step3_2_1 },
};

ngSubscriptInformation_t dims3_3[] = {
	{ size3_3_0, start3_3_0, end3_3_0, step3_3_0 },
	{ size3_3_1, start3_3_1, end3_3_1, step3_3_1 },
};

ngArgumentInformation_t param_desc_3[] = {
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_INT, 0, NULL,  NULL },
	{ NG_ARGUMENT_IO_MODE_IN, NG_ARGUMENT_DATA_TYPE_INT, 0, NULL,  NULL },
	{ NG_ARGUMENT_IO_MODE_OUT, NG_ARGUMENT_DATA_TYPE_FLOAT, 2, dims3_2,  NULL },
	{ NG_ARGUMENT_IO_MODE_INOUT, NG_ARGUMENT_DATA_TYPE_FLOAT, 2, dims3_3,  NULL },
};

/* DESCRIPTION:
 This is test ...
*/

static char method_description_0[] = " This is test ...";

static char method_description_1[] = "";

static char method_description_2[] = "";

static char method_description_3[] = "";

ngExpressionElement_t calc_order0[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t calc_order1[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t calc_order2[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngExpressionElement_t calc_order3[] = {
	{NG_EXPRESSION_VALUE_TYPE_NONE, 0},
	{NG_EXPRESSION_VALUE_TYPE_END, 0}
};

ngRemoteMethodInformation_t methods_desc[] = {
	{ "sin", 0, calc_order0, 2, param_desc_0,
		0, /* server side shrink */
		method_description_0, 
	}, 
	{ "mmul", 1, calc_order1, 4, param_desc_1,
		0, /* server side shrink */
		method_description_1, 
	}, 
	{ "mmul2", 2, calc_order2, 4, param_desc_2,
		0, /* server side shrink */
		method_description_2, 
	}, 
	{ "FFT", 3, calc_order3, 4, param_desc_3,
		0, /* server side shrink */
		method_description_3, 
	}, 
};

/** stub info declaration */

ngRemoteClassInformation_t remoteClassInfo = {
	"sample_object/sample_object",
	"1.0",
	stub_description, 
	(ngBackend_t)0, /* backend */
	(ngClassLanguage_t)1, /* lang */
	4, /* number of methods */
	methods_desc, 
};

/* Globals */
 int x,y,z; 
/* Status for obj */

/* Callback proxy */



/* Stub Main program */
int main(int argc, char ** argv){
	int error;
	int result;
	int methodID;
	int immediateExit;

	immediateExit = ngexStubAnalyzeArgumentWithExit(
		argc, argv, &remoteClassInfo, &error);
	if (immediateExit != 0) {
		exit(0);
	}


	result = ngexStubInitialize(argc, argv, &remoteClassInfo, &error);
	if (result != 1) {
		goto ng_stub_end;
	}

	while(1) {
		result = ngexStubGetRequest(&methodID, &error);
		if (result != NGEXI_INVOKE_METHOD) break;
		ngexStubCalculationStart(&error);
		switch (methodID) {
		case 0:
		{         /* sin */
			double d;
			double *result;
		ngexStubGetArgument(0,&d,&error);
		ngexStubGetArgument(1,&result,&error);
{
        double sin();
        *result = sin(d);
    }
		}
		break;
		case 1:
		{         /* mmul */
			long n;
			double *A;
			double *B;
			double *C;
		ngexStubGetArgument(0,&n,&error);
		ngexStubGetArgument(1,&A,&error);
		ngexStubGetArgument(2,&B,&error);
		ngexStubGetArgument(3,&C,&error);
		mmul(n,A,B,C);
		}
		break;
		case 2:
		{         /* mmul2 */
			long n;
			double *A;
			double *B;
			double *C;
		ngexStubGetArgument(0,&n,&error);
		ngexStubGetArgument(1,&A,&error);
		ngexStubGetArgument(2,&B,&error);
		ngexStubGetArgument(3,&C,&error);
		mmul(n,A,B,C);
		}
		break;
		case 3:
		{         /* FFT */
			int n;
			int m;
			float *x;
			float *y;
		ngexStubGetArgument(0,&n,&error);
		ngexStubGetArgument(1,&m,&error);
		ngexStubGetArgument(2,&x,&error);
		ngexStubGetArgument(3,&y,&error);
		FFT(&n,x,y);
		}
		break;
		default:
			fprintf(stderr, "unknown method number");
		}
		result = ngexStubCalculationEnd(&error);
		if (result == 1){
		    continue;
		} else {
		    break;
		}
	}
ng_stub_end:
	ngexStubFinalize(&error);

	exit(0);
}
/*                     */
