⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slarrfun.inc

📁 一个C格式的脚本处理函数库源代码,可让你的C程序具有执行C格式的脚本文件
💻 INC
字号:
/* -*- mode: C -*- *//* Some "inline" functions for generic scalar types */#ifdef TRANSPOSE_2D_ARRAYstatic SLang_Array_Type *TRANSPOSE_2D_ARRAY (SLang_Array_Type *at, SLang_Array_Type *bt){   GENERIC_TYPE *a_data, *b_data;   int nr, nc, i;   nr = at->dims[0];   nc = at->dims[1];   a_data = (GENERIC_TYPE *) at->data;   b_data = (GENERIC_TYPE *) bt->data;   for (i = 0; i < nr; i++)     {	GENERIC_TYPE *offset = b_data + i;	int j;	for (j = 0; j < nc; j++)	  {	     *offset = *a_data++;	     offset += nr;	  }     }   return bt;}#undef TRANSPOSE_2D_ARRAY#endif#ifdef INNERPROD_FUNCTIONstatic void INNERPROD_FUNCTION  (SLang_Array_Type *at, SLang_Array_Type *bt, SLang_Array_Type *ct,   unsigned int a_loops, unsigned int a_stride,   unsigned int b_loops, unsigned int b_inc,   unsigned int inner_loops){   GENERIC_TYPE_A *a;   GENERIC_TYPE_B *b;   GENERIC_TYPE_C *c;   c = (GENERIC_TYPE_C *) ct->data;   b = (GENERIC_TYPE_B *) bt->data;   a = (GENERIC_TYPE_A *) at->data;      while (a_loops--)     {	GENERIC_TYPE_B *bb;	unsigned int j;	bb = b;	for (j = 0; j < inner_loops; j++)	  {	     double x = (double) a[j];	     if (x != 0.0)	       {		  unsigned int k;		  for (k = 0; k < b_loops; k++)		    c[k] += x * bb[k];	       }	     bb += b_inc;	  }	c += b_loops;	a += a_stride;     }}#undef INNERPROD_FUNCTION#undef GENERIC_TYPE_A#undef GENERIC_TYPE_B#undef GENERIC_TYPE_C#endif#ifdef INNERPROD_COMPLEX_Astatic void INNERPROD_COMPLEX_A  (SLang_Array_Type *at, SLang_Array_Type *bt, SLang_Array_Type *ct,   unsigned int a_loops, unsigned int a_stride,   unsigned int b_loops, unsigned int b_inc,   unsigned int inner_loops){   double *a;   GENERIC_TYPE *b;   double *c;   c = (double *) ct->data;   b = (GENERIC_TYPE *) bt->data;   a = (double *) at->data;      a_stride *= 2;   while (a_loops--)     {	GENERIC_TYPE *bb;	unsigned int bb_loops;	bb = b;	bb_loops = b_loops;		while (bb_loops--)	  {	     double real_sum;	     double imag_sum;	     unsigned int iloops;	     double *aa;	     GENERIC_TYPE *bbb;	     	     aa = a;	     bbb = bb;	     iloops = inner_loops;	     real_sum = 0.0;	     imag_sum = 0.0;	     while (iloops--)	       {		  real_sum += aa[0] * (double)bbb[0];		  imag_sum += aa[1] * (double)bbb[0];		  aa += 2;		  bbb += b_inc;	       }	     *c++ = real_sum;	     *c++ = imag_sum;	     bb++;	  }	a += a_stride;     }}static void INNERPROD_A_COMPLEX  (SLang_Array_Type *at, SLang_Array_Type *bt, SLang_Array_Type *ct,   unsigned int a_loops, unsigned int a_stride,   unsigned int b_loops, unsigned int b_inc,   unsigned int inner_loops){   GENERIC_TYPE *a;   double *b;   double *c;   c = (double *) ct->data;   b = (double *) bt->data;   a = (GENERIC_TYPE *) at->data;      b_inc *= 2;   while (a_loops--)     {	double *bb;	unsigned int bb_loops;	bb = b;	bb_loops = b_loops;		while (bb_loops--)	  {	     double real_sum;	     double imag_sum;	     unsigned int iloops;	     GENERIC_TYPE *aa;	     double *bbb;	     aa = a;	     bbb = bb;	     iloops = inner_loops;	     real_sum = 0.0;	     imag_sum = 0.0;	     while (iloops--)	       {		  real_sum += (double)aa[0] * bbb[0];		  imag_sum += (double)aa[0] * bbb[1];		  aa += 1;		  bbb += b_inc;	       }	     *c++ = real_sum;	     *c++ = imag_sum;	     bb += 2;	  }	a += a_stride;     }}#undef INNERPROD_A_COMPLEX#undef INNERPROD_COMPLEX_A#endif				       /* INNERPROD_COMPLEX_A */#ifdef INNERPROD_COMPLEX_COMPLEXstatic void INNERPROD_COMPLEX_COMPLEX  (SLang_Array_Type *at, SLang_Array_Type *bt, SLang_Array_Type *ct,   unsigned int a_loops, unsigned int a_stride,   unsigned int b_loops, unsigned int b_inc,   unsigned int inner_loops){   double *a;   double *b;   double *c;   c = (double *) ct->data;   b = (double *) bt->data;   a = (double *) at->data;      a_stride *= 2;   b_inc *= 2;   while (a_loops--)     {	double *bb;	unsigned int bb_loops;	bb = b;	bb_loops = b_loops;		while (bb_loops--)	  {	     double real_sum;	     double imag_sum;	     unsigned int iloops;	     double *aa;	     double *bbb;	     aa = a;	     bbb = bb;	     iloops = inner_loops;	     real_sum = 0.0;	     imag_sum = 0.0;	     while (iloops--)	       {		  real_sum += aa[0]*bbb[0] - aa[1]*bbb[1];		  imag_sum += aa[0]*bbb[1] + aa[1]*bbb[0];		  aa += 2;		  bbb += b_inc;	       }	     *c++ = real_sum;	     *c++ = imag_sum;	     bb += 2;	  }	a += a_stride;     }}#undef INNERPROD_COMPLEX_COMPLEX#endif#ifdef SUM_FUNCTION#if SLANG_HAS_FLOATstatic int SUM_FUNCTION (VOID_STAR xp, unsigned int inc, unsigned int num, VOID_STAR yp){   GENERIC_TYPE *x, *xmax;   double sum;      sum = 0.0;   x = (GENERIC_TYPE *) xp;   xmax = x + num;#if _SLANG_OPTIMIZE_FOR_SPEED   if (inc == 1)     {	while (x < xmax)	  {	     sum += (double) *x;	     x++;	  }     }   else#endif     while (x < xmax)     {	sum += (double) *x;	x += inc;     }   *(SUM_RESULT_TYPE *)yp = (SUM_RESULT_TYPE) sum;   return 0;}#endif				       /* SLANG_HAS_FLOAT */#undef SUM_FUNCTION#undef SUM_RESULT_TYPE#endif#ifdef MIN_FUNCTIONstatic int MIN_FUNCTION (VOID_STAR ip, unsigned int inc, unsigned int num, VOID_STAR sp){   unsigned int n;   GENERIC_TYPE m;   GENERIC_TYPE *i = (GENERIC_TYPE *)ip;   if (-1 == check_for_empty_array ("min", num))     return -1;   m = i[0];   for (n = inc; n < num; n += inc)     if (m > i[n]) m = i[n];      *(GENERIC_TYPE *)sp = m;   return 0;}#undef MIN_FUNCTION#endif#ifdef MAX_FUNCTIONstatic intMAX_FUNCTION (VOID_STAR ip, unsigned int inc, unsigned int num, VOID_STAR s){   unsigned int n;   GENERIC_TYPE m;   GENERIC_TYPE *i = (GENERIC_TYPE *) ip;   if (-1 == check_for_empty_array ("max", num))     return -1;   m = i[0];   for (n = inc; n < num; n += inc)     if (m < i[n]) m = i[n];      *(GENERIC_TYPE *)s = m;   return 0;}#undef MAX_FUNCTION#endif#ifdef CUMSUM_FUNCTION#ifdef SLANG_HAS_FLOATstatic int CUMSUM_FUNCTION (SLtype xtype, VOID_STAR xp, unsigned int inc, 		 unsigned int num,		 SLtype ytype, VOID_STAR yp, VOID_STAR clientdata){   GENERIC_TYPE *x, *xmax;   CUMSUM_RESULT_TYPE *y;   double c;   (void) xtype;   (void) ytype;   (void) clientdata;   x = (GENERIC_TYPE *) xp;   y = (CUMSUM_RESULT_TYPE *) yp;   xmax = x + num;   c = 0.0;   while (x < xmax)     {	c += (double) *x;	*y = (CUMSUM_RESULT_TYPE) c;	x += inc;	y += inc;     }   return 0;}#endif				       /* SLANG_HAS_FLOAT */#undef CUMSUM_FUNCTION#undef CUMSUM_RESULT_TYPE#endif#ifdef GENERIC_TYPE# undef GENERIC_TYPE#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -