|
SDLGameEngine
|
00001 /* 00002 * Copyright (c) 2007 Heiko Irrgang 00003 * 00004 * The license and distribution terms for this file may be 00005 * found in the file COPYING in this distribution or at 00006 * http://93-interactive.com/cms/products/software/sdl-game-engine/license/ 00007 */ 00008 00009 #include <sge.h> 00010 00011 SGEARRAY *sgeArrayNew() { 00012 SGEARRAY *ret; 00013 sgeNew(ret, SGEARRAY); 00014 ret->numberOfElements=0; 00015 ret->freeFunction=NULL; 00016 sgeMalloc(ret->element, void *, 1); 00017 return ret; 00018 } 00019 00020 SGEARRAY *sgeAutoArrayNew(void (*function)(Uint32, void *)) { 00021 SGEARRAY *ret=sgeArrayNew(); 00022 ret->freeFunction=function; 00023 return ret; 00024 } 00025 00026 void sgeArrayDestroy(SGEARRAY *a) { 00027 if (a->freeFunction!=NULL) { 00028 while (a->numberOfElements>0) { 00029 sgeArrayRemove(a, 0); 00030 } 00031 } 00032 sgeFree(a->element); 00033 sgeFree(a); 00034 } 00035 00036 void sgeArrayAdd(SGEARRAY *a, void *e) { 00037 a->numberOfElements++; 00038 sgeRealloc(a->element, void *, a->numberOfElements); 00039 a->element[a->numberOfElements-1]=e; 00040 } 00041 00042 void sgeArrayInsert(SGEARRAY *a, Uint32 offset, void *e) { 00043 if (offset>=a->numberOfElements) { 00044 sgeArrayAdd(a, e); 00045 return; 00046 } 00047 00048 sgeRealloc(a->element, void *, ++a->numberOfElements); 00049 memmove(a->element+offset+1,a->element+offset,(a->numberOfElements-offset-1)*sizeof(void *)); 00050 a->element[offset]=e; 00051 } 00052 00053 void sgeArrayReplace(SGEARRAY *a, Uint32 offset, void *e) { 00054 if (offset>=a->numberOfElements) { 00055 return; 00056 } 00057 00058 a->element[offset]=e; 00059 } 00060 00061 void *sgeArrayGet(SGEARRAY *a, Uint32 offset) { 00062 if (offset<a->numberOfElements) { 00063 return a->element[offset]; 00064 } 00065 return NULL; 00066 } 00067 00068 void sgeArrayRemove(SGEARRAY *a, Uint32 offset) { 00069 if (a->numberOfElements>0) { 00070 if (a->freeFunction!=NULL) { 00071 (a->freeFunction)(offset, a->element[offset]); 00072 } 00073 memmove(a->element+offset,a->element+offset+1,(a->numberOfElements-offset-1)*sizeof(void *)); 00074 a->numberOfElements--; 00075 } 00076 } 00077 00078 void sgeArrayForEach(SGEARRAY *a, void function(Uint32, void *)) { 00079 Uint32 i; 00080 for (i=0;i<a->numberOfElements;i++) { 00081 function(i, a->element[i]); 00082 } 00083 } 00084 00085 inline Uint32 sgeArraySize(SGEARRAY *a) { 00086 return a->numberOfElements; 00087 } 00088