vartypes.cpp

来自「这是整套横扫千军3D版游戏的源码」· C++ 代码 · 共 149 行

CPP
149
字号
/*
creg - Code compoment registration system
Copyright 2005 Jelmer Cnossen
*/
#include "StdAfx.h"
#include "VarTypes.h"
#include <assert.h>

using namespace std;
using namespace creg;

// serialization code

// type instance allocators

void BasicType::Serialize (ISerializer *s, void *inst)
{
	switch (id) {
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
	case crSyncedSint://FIXME
	case crSyncedUint:
#endif
	case crInt:
	case crUInt:
		s->Serialize (inst, 4);
		break;
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
	case crSyncedSshort://FIXME
	case crSyncedUshort:
#endif
	case crShort:
	case crUShort:
		s->Serialize (inst, 2);
		break;
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
	case crSyncedSchar://FIXME
	case crSyncedUchar:
#endif
	case crChar:
	case crUChar:
		s->Serialize (inst, 1);
		break;
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
	case crSyncedFloat://FIXME
#endif
	case crFloat:
		s->Serialize (inst, 4);
		break;
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
	case crSyncedDouble://FIXME
#endif
	case crDouble:
		s->Serialize (inst, 8);
		break;
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
	case crSyncedBool://FIXME
#endif
	case crBool:{
		// I'm not sure if bool is the same size on all compilers.. so it's stored as a byte
		if (s->IsWriting ())  {
			char v = *(bool*)inst ? 1 : 0;
			s->Serialize (&v,1);
		} else {
			char v;
			s->Serialize (&v,1);
			*(bool*)inst=!!v;
		}
		break;}
	}
}

std::string BasicType::GetName()
{
	switch(id) {
#if defined(SYNCDEBUG) || defined(SYNCCHECK)
		case crSyncedSint: return "int"; //FIXME
		case crSyncedUint: return "uint";
		case crSyncedSshort: return "short";
		case crSyncedUshort: return "ushort";
		case crSyncedSchar: return "char";
		case crSyncedUchar: return "uchar";
		case crSyncedFloat: return "float";
		case crSyncedDouble: return "double";
		case crSyncedBool: return "bool";
#endif
		case crInt: return "int";
		case crUInt: return "uint";
		case crShort: return "short";
		case crUShort: return "ushort";
		case crChar:  return "char";
		case crUChar: return "uchar";
		case crFloat: return "float";
		case crDouble: return "double";
		case crBool: return "bool";
	};
	return std::string();
}

IType* IType::CreateBasicType (BasicTypeID t)
{
	return SAFE_NEW BasicType (t);
}

std::string StringType::GetName()
{
	return "string";
}

StringType::StringType(IType *charType) : DynamicArrayType<string> (charType) {}

IType* IType::CreateStringType ()
{
	DeduceType<char> charType;
	return new StringType(charType.Get());
}

void ObjectInstanceType::Serialize (ISerializer *s, void *inst)
{
	s->SerializeObjectInstance (inst, objectClass);
}

std::string ObjectInstanceType::GetName()
{
	return objectClass->name;
}

IType* IType::CreateObjInstanceType (Class *objectType)
{
	return SAFE_NEW ObjectInstanceType (objectType);
}

IType* IType::CreateEnumeratedType (size_t size)
{
	switch (size) {
		case 1: return SAFE_NEW BasicType (crUChar);
		case 2: return SAFE_NEW BasicType (crUShort);
		case 4: return SAFE_NEW BasicType (crUInt);
		default: assert(false); break;
	}
	return 0;
}

string StaticArrayBaseType::GetName()
{
	char sstr[16];
	SNPRINTF(sstr,16,"%d", size);
	return elemType->GetName() + "[" + std::string(sstr) + "]";
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?