/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project. All
................................................ contributions are welcome.
....Copyright(C).1995.Melvin.Smith.............. Enjoy.
------------------------------------------------------------------------------
Melvin Smith (aka Fusion) msmith@hom.net
MUD++ development mailing list mudpp@van.ml.org
------------------------------------------------------------------------------
vmnarray.h
*/
#ifndef _VMARRAY_H
#define _VMARRAY_H
class VMarray : public VMObject
{
public:
int size;
vmtype type;
VMarray( vmtype t ) :
size(10),type(t)
{
evalues = (extra_values *) new char[
sizeof(extra_values) + sizeof(vmstack)*(size-1)];
}
VMarray( vmtype t, int s ) :
size(s), type(t)
{
evalues = (extra_values *) new char[
sizeof(extra_values) + sizeof(vmstack)*(size-1)];
evalues->length = size;
}
// caller must take care of reference/dereference
void add( vmptr val )
{
if ( evalues->length >= size )
{
extra_values * new_table = (extra_values *) new char[
sizeof(extra_values) + sizeof(vmstack) *((size << 1) -1)];
memcpy(new_table, evalues, (evalues->length -1) * sizeof(vmstack)
+ sizeof(extra_values) );
delete evalues;
evalues = new_table;
size <<= 1;
}
evalues->val[evalues->length].type = type;
evalues->val[evalues->length].val = val;
evalues->length++;
}
int count() { return evalues->length; }
vmstack * table() { return evalues->val; }
};
#endif