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

📄 array.c

📁 basic.c */ /**//* Project:NeuroBasic, basic package*//**/ /* Survey:This is a simple Basic b-code
💻 C
字号:
/****************************************************************//*								*//* Name:	array.c 					*//*								*//* Project:	NeuroBasic, basic package	          	*//*								*//* Survey:	Contains functions for neuro-object "array".	*//*		(allocate, load/save, nput/nget, etc.)		*//*								*//* Author:	Beat Flepp					*//*		Electronics Laboratory, ETH Zuerich		*//*		Switzerland					*//*								*//* Created:	November 13, 1997       			*//* Modified:	                 				*//*								*//****************************************************************//* system header files */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>#include <musiclib.h>/* NeuroBasic header files */#include "host.h"		#include "allnfcts.h"#include "allnobjs.h"#include "neurolib.h"#include "array.h"static void release_array(MINT nobj)/*================================*/{  if (neuro_objs[nobj].array.pdata != NULL)    dfree(neuro_objs[nobj].array.pdata);  free_nobj(nobj);} /* end of release_array() */static MINT save_array(MINT nobj)/*=============================*/{  MINT		ndim, xdim, ydim, zdim, block_size;  MFLOAT	*pcons;  comm_def_t	comm_def;  ndim = 2;  xdim = neuro_objs[nobj].array.height;  ydim = neuro_objs[nobj].array.width;  zdim = 1;  block_size = xdim * ydim;  if (!setup_save(ndim, xdim, ydim, zdim, block_size))    return 0;					/* abort from host */  comm_def.dim.x = xdim;  comm_def.dim.y = ydim;  comm_def.dim.z = 1;  comm_def.elem_size = sizeof(MFLOAT);  comm_def.prod.part.x = comm_def.dim.x;  comm_def.prod.offset.x = 0;  comm_def.prod.part.y = comm_def.dim.y;  comm_def.prod.offset.y = 0;  comm_def.prod.part.z = 1;  comm_def.prod.offset.z = 0;  comm_def.prod.nelements = comm_def.prod.part.x    * comm_def.prod.part.y * comm_def.prod.part.z;  if (comm_def.prod.nelements == 0)    comm_def.prod.offset = comm_def.dim;  Complete_cons_window(&comm_def, HOST_ONLY, 0, 0, 0);  pcons = neuro_objs[nobj].array.pdata;  Init_comm(&comm_def, pcons, HOST_IO, COMM_NORM);  Data_ready(ALL_DATA);  return 0;} /* end of save_array() */static MINT nput_array(MINT nobj, MINT ni, MINT nj, MFLOAT value)/*=============================================================*/{  MINT		index;    if (ni < 0 || ni >= neuro_objs[nobj].array.height      || nj < 0 || nj >= neuro_objs[nobj].array.width)  {    fn_error = ERR_PARCONF;    return 0;  }  /*===== change data =====*/  index = ni *  neuro_objs[nobj].array.width + nj;  neuro_objs[nobj].array.pdata[index] = value;  return 0;} /* end of nput_array() */MINT new_array(MINT width, MINT height, MINT format)/*================================================*//* only FLOAT format suppported */{  MFLOAT	*pd;  MINT		failure, nobj;  MINT	        allocsize, i;    /*===== test parameters for plausibility =====*/  if ((format != FF_FLOAT32) ||       (width < 1) || (height < 1))  {    fn_error = ERR_PARCONF;    return NO_OBJECT;  }  nobj = alloc_nobj(0);  if (nobj < 0)  {    fn_error = ERR_OBJTABFULL;    return NO_OBJECT;  }  /*===== try to allocate space for matrix =====*/  failure = FALSE;  pd = NULL;  allocsize  = 0;  switch ((int)format)  {    case FF_FLOAT32:      allocsize = width * height * sizeof(MFLOAT);      break;    default:       break;  } /* end switch () */  if (allocsize > 0)  {    pd = (MFLOAT*)dmalloc(allocsize, MT_SLOW);    if (pd == NULL) failure = TRUE;  }    if (!failure)  {						/* success */    neuro_objs[nobj].public.obtype = N_ARRAY;    neuro_objs[nobj].public.fn_release = release_array;    neuro_objs[nobj].public.fn_load = NULL;    neuro_objs[nobj].public.fn_save = save_array;    neuro_objs[nobj].public.fn_nput = nput_array;    neuro_objs[nobj].public.fn_nget = NULL;    neuro_objs[nobj].public.fn_rand = NULL;    /*===== put in some data for debugging =====*/    for (i=0;i<width * height;i++){      pd[i] = 0.0;    }    neuro_objs[nobj].array.format = format;    neuro_objs[nobj].array.width = width;    neuro_objs[nobj].array.height = height;    neuro_objs[nobj].array.pdata = pd;    neuro_objs[nobj].array.nvalues = width * height;    return nobj;  }  else  {						/* failure */    release_array(nobj);    fn_error = ERR_NOMEM;    return NO_OBJECT;  }} /* end of new_array() */

⌨️ 快捷键说明

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