?? array.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 + -