From 9a6ab3b333e64c24ee86d929d9387ef367c76ce0 Mon Sep 17 00:00:00 2001 From: mescalinum Date: Tue, 18 Aug 2009 15:08:04 +0000 Subject: import sources svn path=/trunk/externals/ffext/; revision=11945 --- composer/arraylist.h | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 composer/arraylist.h (limited to 'composer/arraylist.h') diff --git a/composer/arraylist.h b/composer/arraylist.h new file mode 100644 index 0000000..a4b4362 --- /dev/null +++ b/composer/arraylist.h @@ -0,0 +1,118 @@ +/* ------------------------------------------------------------------------ */ +/* Copyright (c) 2009 Federico Ferri. */ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL */ +/* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ +/* */ +/* composer: a music composition framework for pure-data */ +/* */ +/* This program is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU General Public License */ +/* as published by the Free Software Foundation; either version 2 */ +/* of the License, or (at your option) any later version. */ +/* */ +/* See file LICENSE for further informations on licensing terms. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program; if not, write to the Free Software Foundation, */ +/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* */ +/* Based on PureData by Miller Puckette and others. */ +/* ------------------------------------------------------------------------ */ + +#include "common.h" + +#ifndef __ARRAYLIST_H_INCLUDED_ +#define __ARRAYLIST_H_INCLUDED_ + +#define ArrayListDeclare(name, type, sizetype) \ + type* name; \ + sizetype name ## _maxsize; \ + sizetype name ## _count + +#define ArrayListDeclareWithPrefix(prefix, name, type, sizetype) \ + prefix type* name; \ + prefix sizetype name ## _maxsize; \ + prefix sizetype name ## _count + +#define ArrayListInit(arrName, type, initSize) \ + arrName ## _maxsize = initSize; \ + arrName = (type*)getbytes(sizeof(type) * (initSize)); \ + arrName ## _count = 0 + +#define ArrayListAdd(arrName, type, objToAdd) \ + if(arrName ## _count >= arrName ## _maxsize) { \ + arrName = (type*)resizebytes(arrName, arrName ## _maxsize, (arrName ## _maxsize)*2); \ + }; \ + arrName[ arrName ## _count ++ ] = (type) objToAdd; \ + +#define ArrayListRemove(arrName, objToRem) \ + { \ + int i,j; \ + for(i=0; i< arrName ## _count; i++) \ + if(arrName[i] == objToRem) { \ + for(j=i; j< arrName ## _count - 1; j++) { \ + arrName[j] = arrName[j+1]; \ + } \ + arrName[ arrName ## _count -- ] = 0L; \ + break; \ + } \ + } + +#define ArrayListRemoveByIndex(arrName, index) \ + { \ + int i,j; \ + for(i=0; i< arrName ## _count; i++) \ + if(i == index) { \ + for(j=i; j< arrName ## _count - 1; j++) { \ + arrName[j] = arrName[j+1]; \ + } \ + arrName[ arrName ## _count -- ] = 0L; \ + break; \ + } \ + } + +#define ArrayListRemoveByName(arrName, name) \ + { \ + int i,j; \ + for(i=0; i< arrName ## _count; i++) \ + if(arrName[i] && arrName[i]->x_name == name) { \ + for(j=i; j< arrName ## _count - 1; j++) { \ + arrName[j] = arrName[j+1]; \ + } \ + arrName[ arrName ## _count -- ] = 0L; \ + break; \ + } \ + } + +#define ArrayListGetByName(arrName, n, type, result) \ + type result = (type) 0L; \ + if(arrName) { \ + int i; \ + for(i=0; i< arrName ## _count; i++) { \ + if(arrName[i] && arrName[i]->x_name == n) { \ + result = arrName[i]; break; \ + } \ + } \ + } + +#define ArrayListGetIndexByName(arrName, n, type, result) \ + type result = (type) -1; \ + if(arrName) { \ + int i; \ + for(i=0; i< arrName ## _count; i++) { \ + if(arrName[i] && arrName[i]->x_name == n) { \ + result = i; \ + break; \ + } \ + } \ + } + +#define ArrayListFree(arrName, type) \ + freebytes(arrName, arrName ## _maxsize * sizeof(type)) + +#endif // __ARRAYLIST_H_INCLUDED_ -- cgit v1.2.1