/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

/*
 * creg - Code compoment registration system
 * Implementations of IType for specific types
 */

#ifndef CR_VARIABLE_TYPES_H
#define CR_VARIABLE_TYPES_H

#include "creg_cond.h"

namespace creg
{
	class BasicType : public IType
	{
	public:
		BasicType(BasicTypeID ID) : id(ID) {}
		~BasicType() {}

		void Serialize(ISerializer* s, void* instance);
		std::string GetName();
		size_t GetSize();

		BasicTypeID id;
	};

	class ObjectInstanceType : public IType
	{
	public:
		ObjectInstanceType(Class* objc) : objectClass(objc) {}
		~ObjectInstanceType() {}
		void Serialize(ISerializer* s, void* instance);
		std::string GetName();
		size_t GetSize();

		Class* objectClass;
	};

	class StringType : public DynamicArrayType<std::string>
	{
	public:
		StringType(boost::shared_ptr<IType> charType);
		std::string GetName();
		size_t GetSize();
	};

};

#endif

