mud++0.35/etc/
mud++0.35/etc/guilds/
mud++0.35/help/propert/
mud++0.35/mudC/
mud++0.35/player/
mud++0.35/src/interface/
mud++0.35/src/os/cygwin32/
mud++0.35/src/os/win32/
mud++0.35/src/os/win32/bcppbuilder/
mud++0.35/src/osaddon/
mud++0.35/src/util/
/*
....[@@@..[@@@..............[@.................. 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
------------------------------------------------------------------------------
vmobject.h
*/

#ifndef _VMOBJECT_H
#define _VMOBJECT_H

#include "vmtypes.h"
#include "garbcoll.h"
#include "erratum.h"

typedef struct 
{
	int length;
	vmstack val[1];
} extra_values;

#define GC_MARKED 1
#define IN_C_WORLD 2

class VMObject
{
	private:
		int gc_color;
	protected:
		extra_values * evalues;
	public:
		VMObject() : 
			gc_color(0), evalues(0)
		{
			toCWorld();
			GC_register(this);
		}

		VMObject( VMObject &  ) :
			gc_color(0), evalues(0)
		{
			toCWorld();
			GC_register(this);
		}

		virtual ~VMObject();
		virtual vmtype getVMType() { return VMT_VMOBJECT; }

		void fromCWorld()	{ gc_color &= ~IN_C_WORLD; }
		void toCWorld()		{ gc_color |= IN_C_WORLD; }
		bool inCWorld()		{ return (gc_color & IN_C_WORLD); }
		void GCunmark()		{ gc_color &= ~GC_MARKED; }
		int getGCColor()	{ return gc_color; }
		void mark_evalues();
		void GCMark()	
		{ 
			if ( gc_color & GC_MARKED )
				return;
			gc_color |= GC_MARKED;
			if ( evalues )
				mark_evalues();
		}
		void fordelete()	{ fromCWorld(); }


		const char * getVMTypeName() { return vmtype_table[getVMType()].name; }

};

#endif