mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-29 23:52:22 +00:00
implement a dynamic array class
This commit is contained in:
parent
1a6a9f177d
commit
9dc9ee537d
4 changed files with 116 additions and 2 deletions
22
ruamoko/include/Array.h
Normal file
22
ruamoko/include/Array.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef __ruamoko_Array_h
|
||||||
|
#define __ruamoko_Array_h
|
||||||
|
|
||||||
|
#include "Object.h"
|
||||||
|
|
||||||
|
@interface Array: Object
|
||||||
|
{
|
||||||
|
integer count, size;
|
||||||
|
integer incr;
|
||||||
|
(void [])[]array;
|
||||||
|
}
|
||||||
|
- (id) init;
|
||||||
|
- (id) initWithIncrement: (integer) inc;
|
||||||
|
- (void) free;
|
||||||
|
- (void []) getItemAt: (integer) index;
|
||||||
|
- (void) setItemAt: (integer) index item:(void []) item;
|
||||||
|
- (void) addItem: (void []) item;
|
||||||
|
- (void []) removeItemAt: (integer) index;
|
||||||
|
- (void []) insertItemAt: (integer) index item:(void []) item;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif//__ruamoko_Array_h
|
|
@ -7,4 +7,4 @@ include_HEADERS= \
|
||||||
draw.h key.h \
|
draw.h key.h \
|
||||||
\
|
\
|
||||||
cbuf.h cmd.h cvar.h file.h \
|
cbuf.h cmd.h cvar.h file.h \
|
||||||
Object.h Entity.h InputLine.h Point.h Rect.h Size.h
|
Object.h Array.h Entity.h InputLine.h Point.h Rect.h Size.h
|
||||||
|
|
92
ruamoko/lib/Array.r
Normal file
92
ruamoko/lib/Array.r
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
#include "Array.h"
|
||||||
|
|
||||||
|
@implementation Array
|
||||||
|
|
||||||
|
- (id) init
|
||||||
|
{
|
||||||
|
self.count = self.size = 0;
|
||||||
|
self.incr = 16;
|
||||||
|
self.array = NIL;
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithIncrement: (integer) inc
|
||||||
|
{
|
||||||
|
self.count = 0;
|
||||||
|
self.size = self.incr = inc;
|
||||||
|
self.array = (void[][]) obj_malloc (inc * @sizeof (void []));
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) free
|
||||||
|
{
|
||||||
|
local integer i;
|
||||||
|
for (i = 0; i < self.count; i++)
|
||||||
|
obj_free (self.array[i]);
|
||||||
|
obj_free (self.array);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void []) getItemAt: (integer) index
|
||||||
|
{
|
||||||
|
if (index == -1)
|
||||||
|
index = self.count - 1;
|
||||||
|
if (index < 0 || index >= self.count)
|
||||||
|
return NIL;
|
||||||
|
return self.array[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setItemAt: (integer) index item: (void []) item
|
||||||
|
{
|
||||||
|
if (index == -1)
|
||||||
|
index = self.count - 1;
|
||||||
|
if (index < 0 || index >= self.count)
|
||||||
|
return;
|
||||||
|
self.array[index] = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) addItem: (void []) item
|
||||||
|
{
|
||||||
|
if (self.count == self.size) {
|
||||||
|
self.size += self.incr;
|
||||||
|
self.array = (void[][])obj_realloc (self.array,
|
||||||
|
self.size * @sizeof (void []));
|
||||||
|
}
|
||||||
|
self.array[self.count++] = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void []) removeItemAt: (integer) index
|
||||||
|
{
|
||||||
|
local integer i;
|
||||||
|
local void [] item;
|
||||||
|
|
||||||
|
if (index == -1)
|
||||||
|
index = self.count -1;
|
||||||
|
if (index < 0 || index >= self.count)
|
||||||
|
return NIL;
|
||||||
|
item = self.array[index];
|
||||||
|
self.count--;
|
||||||
|
for (i = index; i < self.count; i++)
|
||||||
|
self.array[i] = self.array[i + 1];
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void []) insertItemAt: (integer) index item:(void []) item
|
||||||
|
{
|
||||||
|
local integer i;
|
||||||
|
if (index == -1)
|
||||||
|
index = self.count -1;
|
||||||
|
if (index < 0 || index >= self.count)
|
||||||
|
return NIL;
|
||||||
|
if (self.count == self.size) {
|
||||||
|
self.size += self.incr;
|
||||||
|
self.array = (void[][])obj_realloc (self.array,
|
||||||
|
self.size * @sizeof (void []));
|
||||||
|
}
|
||||||
|
for (i = self.count; i > index; i--)
|
||||||
|
self.array[i] = self.array[i - 1];
|
||||||
|
self.array[index] = item;
|
||||||
|
self.count++;
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -27,7 +27,7 @@ EXTRA_LIBRARIES= $(ruamoko_libs)
|
||||||
libr_a_SOURCES=\
|
libr_a_SOURCES=\
|
||||||
crudefile.r debug.r entities.r infokey.r math.r message.r nq_message.r \
|
crudefile.r debug.r entities.r infokey.r math.r message.r nq_message.r \
|
||||||
physics.r qw_message.r qw_physics.r qw_sys.r sound.r string.r system.r \
|
physics.r qw_message.r qw_physics.r qw_sys.r sound.r string.r system.r \
|
||||||
Object.r Entity.r Point.r Size.r Rect.r
|
Object.r Array.r Entity.r Point.r Size.r Rect.r
|
||||||
libr_a_AR=$(PAK) -cf
|
libr_a_AR=$(PAK) -cf
|
||||||
|
|
||||||
libgui_a_SOURCES=\
|
libgui_a_SOURCES=\
|
||||||
|
|
Loading…
Reference in a new issue