亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? creg.cpp

?? 這是整套橫掃千軍3D版游戲的源碼
?? CPP
字號:
/*
creg - Code compoment registration system
Copyright 2005 Jelmer Cnossen 
*/
#include "StdAfx.h"
#include "creg.h"
#include <map>
#include <string.h>

using namespace creg;
using namespace std;

static map<string, Class*> mapNameToClass;
static int currentMemberFlags = 0; // used when registering class members

// -------------------------------------------------------------------
// Class Binder
// -------------------------------------------------------------------

ClassBinder* System::binderList = 0;
vector<Class*> System::classes;

ClassBinder::ClassBinder (const char *className, unsigned int cf, ClassBinder* baseClsBinder, IMemberRegistrator** mreg, int instanceSize, void (*constructorProc)(void *Inst), void (*destructorProc)(void *Inst))
{
	class_ = 0;
	name = className;
	memberRegistrator = mreg;
	constructor = constructorProc;
	destructor = destructorProc;
	base = baseClsBinder;
	size = instanceSize;
	flags = (ClassFlags)cf;

	// link to the list of class binders
	System::AddClassBinder(this);
}

void System::InitializeClasses ()
{
	// Create Class instances
	for (ClassBinder *c = binderList; c; c = c->nextBinder)
		c->class_ = SAFE_NEW Class;

	// Initialize class instances
	for (ClassBinder *c = binderList; c; c = c->nextBinder) {
		Class *cls = c->class_;

		cls->binder = c;
		cls->name = c->name;
		cls->base = c->base ? c->base->class_ : 0;
		mapNameToClass [cls->name] = cls;

		if (cls->base)
			cls->base->derivedClasses.push_back(cls);

		currentMemberFlags = 0;
		// Register members
		if (*c->memberRegistrator)
			(*c->memberRegistrator)->RegisterMembers (cls);

		classes.push_back (cls);
	}
}

void System::FreeClasses ()
{
	for (uint a=0;a<classes.size();a++)
		delete classes[a];
	classes.clear();
}

Class* System::GetClass (const string& name)
{
	map<string, Class*>::iterator c = mapNameToClass.find (name);
	if (c == mapNameToClass.end()) 
		return 0;
	return c->second;
}

void System::AddClassBinder(ClassBinder *cb)
{
	cb->nextBinder = binderList;
	binderList = cb;
}

// ------------------------------------------------------------------
// creg::Class: Class description
// ------------------------------------------------------------------

Class::Class () : 
	binder (0),
	base (0),
	serializeProc(0),
	postLoadProc(0)
{}

Class::~Class ()
{
	for (unsigned int a=0;a<members.size();a++)
		delete members[a];
	members.clear();
}

bool Class::IsSubclassOf (Class *other)
{
	for (Class *c = this; c; c = c->base)
		if (c == other) return true;

	return false;
}

std::vector<Class*> Class::GetImplementations()
{
	std::vector<Class*> classes;

	for (unsigned int a=0;a<derivedClasses.size();a++)
	{
		Class* dc = derivedClasses[a];
		if (!dc->IsAbstract())
			classes.push_back(dc);

		std::vector<Class*> impl = dc->GetImplementations();
		classes.insert(classes.end(), impl.begin(), impl.end());
	}

	return classes;
}

void Class::BeginFlag (ClassMemberFlag flag)
{
	currentMemberFlags |= (int)flag;
}

void Class::EndFlag (ClassMemberFlag flag)
{
	currentMemberFlags &= ~(int)flag;
}

void Class::AddMember (const char *name, IType* type, unsigned int offset)
{
	Member *member = new Member;

	member->name = name;
	member->offset = offset;
	member->type = type;
	member->flags = currentMemberFlags;

	members.push_back (member);
}

Class::Member* Class::FindMember (const char *name)
{
	for (Class *c = this; c; c=c->base) 
		for (uint a=0;a<c->members.size();a++) {
			Member *member = c->members[a];
			if (!STRCASECMP(member->name, name))
				return member;
		}
	return 0;
}

void Class::SetMemberFlag (const char *name, ClassMemberFlag f)
{
	for (uint a=0;a<members.size();a++)
		if (!strcmp (members[a]->name, name)) {
			members[a]->flags |= (int)f;
			break;
		}
}

void Class::SerializeInstance (ISerializer *s, void *ptr)
{
	if (base)
		base->SerializeInstance (s, ptr);

	for (uint a=0;a<members.size();a++)
	{
		creg::Class::Member* m = members [a];
		if (m->flags & CM_NoSerialize)
			continue;

		void *memberAddr = ((char*)ptr) + m->offset;
/*		if (s->IsWriting ())
			printf ("writing %s at %d\n", m->name,  (int)((COutputStreamSerializer *)s)->stream->tellp ());
		else
			printf ("reading %s at %d\n", m->name,  (int)((CInputStreamSerializer *)s)->stream->tellg ());*/
		m->type->Serialize (s, memberAddr);
	}

	if (serializeProc) {
		_DummyStruct *obj = (_DummyStruct*)ptr;
		(obj->*serializeProc)(*s);
	}
}

void* Class::CreateInstance()
{
	void *inst = ::operator new(binder->size);
	if (binder->constructor) binder->constructor (inst);
	return inst;
}

void Class::DeleteInstance (void *inst)
{
	if (binder->destructor) binder->destructor(inst);
	::operator delete(inst);
}

static void StringHash(const std::string &str, unsigned int hash)
{
	unsigned int a = 63689;
	for(std::string::const_iterator si = str.begin(); si != str.end(); ++si)
	{
		hash = hash * a + (*si);
		a *= 378551;
	}
}

void Class::CalculateChecksum (unsigned int& checksum)
{
	for (int a=0;a<members.size();a++)
	{
		Member *m = members[a];
		checksum += m->flags;
		StringHash(m->name, checksum);
	}
	if (base)
		base->CalculateChecksum(checksum);
}


IType::~IType() {
}

IMemberRegistrator::~IMemberRegistrator() {
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲bdsm女犯bdsm网站| 91精品福利在线| 91免费视频网| 日韩女优电影在线观看| 欧美激情一区二区三区四区| 日韩不卡一区二区| 欧美精品在线观看播放| 亚洲精品国产精品乱码不99| 97精品国产97久久久久久久久久久久 | 亚洲午夜精品网| 欧美亚洲一区二区三区四区| 亚洲三级电影全部在线观看高清| 成人黄色av网站在线| 久久久久亚洲综合| 国产精品成人免费在线| 国产伦精品一区二区三区免费| 9人人澡人人爽人人精品| 日韩女优av电影在线观看| 亚洲日本免费电影| 国产精品一卡二卡在线观看| 777午夜精品视频在线播放| 国产女同性恋一区二区| 国产美女在线观看一区| 欧美极品aⅴ影院| 国产精品三级久久久久三级| 国产精品1024久久| 一区二区三区日韩精品视频| 欧美色图一区二区三区| 色欧美片视频在线观看| 2023国产精华国产精品| 激情偷乱视频一区二区三区| 777精品伊人久久久久大香线蕉| 亚洲欧美在线视频观看| 成人毛片视频在线观看| 偷拍与自拍一区| 欧美日韩一区二区不卡| 亚洲色图制服诱惑 | 白白色亚洲国产精品| 国产精品天干天干在观线| 国产一区二区三区免费播放| 久久日一线二线三线suv| 日韩不卡一区二区| 久久女同精品一区二区| 国产一区二区久久| 亚洲女人的天堂| 欧美精品久久一区二区三区| 男人操女人的视频在线观看欧美| 亚洲日本一区二区三区| 91在线云播放| 麻豆精品在线观看| 国产精品毛片久久久久久| 色国产综合视频| 久久99国产精品久久| 国产精品久久久久久久久动漫| 97久久精品人人做人人爽| 日产欧产美韩系列久久99| 国产精品午夜在线观看| 欧美三级中文字幕在线观看| 国产乱码精品一区二区三 | 国产电影精品久久禁18| 亚洲成人免费av| 成人欧美一区二区三区白人| 91精品在线一区二区| 91香蕉视频黄| 国产成人自拍网| 美脚の诱脚舐め脚责91 | 中文字幕 久热精品 视频在线| 欧洲一区二区三区免费视频| 成年人午夜久久久| 国产成人小视频| 狠狠色狠狠色综合| 久久er精品视频| 久久电影国产免费久久电影| 亚洲高清在线精品| 亚洲三级在线免费观看| 欧洲精品中文字幕| 99久久免费精品| 丁香亚洲综合激情啪啪综合| 国产在线播放一区三区四| 日本不卡一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 26uuu国产日韩综合| 欧美日韩在线播放一区| 91极品美女在线| 久久亚洲影视婷婷| 国产精品精品国产色婷婷| 日韩亚洲欧美成人一区| 色哟哟精品一区| 国产一区二区三区综合| 亚洲第一久久影院| 日韩理论片一区二区| 精品剧情在线观看| 日韩精品自拍偷拍| 国内成+人亚洲+欧美+综合在线| 国产亚洲精品福利| 在线看国产一区二区| 久久国产福利国产秒拍| 中文字幕欧美三区| 欧美网站大全在线观看| 日韩欧美一级二级| 欧美一区二区免费| 欧美精品一级二级三级| 97精品久久久午夜一区二区三区 | 精品视频一区二区不卡| 日韩av网站免费在线| 日韩一区精品视频| 亚洲三级在线播放| 一区二区日韩av| 日本va欧美va瓶| 国精产品一区一区三区mba桃花| 蜜臀av亚洲一区中文字幕| 国产精品99久久久久| 欧美在线短视频| 久久亚洲综合色| 亚洲精选免费视频| 精品在线视频一区| 国产在线麻豆精品观看| 91麻豆精品国产91久久久 | 性久久久久久久| 国内外精品视频| 7777精品久久久大香线蕉| 欧美韩国一区二区| 蜜桃久久精品一区二区| 欧美酷刑日本凌虐凌虐| 日本视频中文字幕一区二区三区| 国产乱码精品1区2区3区| 亚洲精品一区二区精华| 成人综合婷婷国产精品久久| 伊人一区二区三区| 日韩三区在线观看| 国产资源在线一区| 欧美亚洲精品一区| 亚洲私人黄色宅男| 欧美综合一区二区三区| 1区2区3区欧美| 91麻豆精东视频| 亚洲天堂福利av| 成人精品视频一区二区三区尤物| 国产精品嫩草影院com| 91亚洲精品久久久蜜桃| 亚洲毛片av在线| 日韩三级高清在线| av在线播放不卡| 午夜视频在线观看一区二区三区| 欧美午夜精品一区| 美女视频黄a大片欧美| 中文字幕一区三区| 在线不卡a资源高清| 久草这里只有精品视频| 中文字幕视频一区二区三区久| 欧美写真视频网站| 国产大陆亚洲精品国产| 亚洲天堂2016| 欧美日韩一区成人| 国产一区二区免费在线| 国产精品久久久久久久久免费桃花| 色呦呦日韩精品| 美女脱光内衣内裤视频久久影院| 久久综合丝袜日本网| 91麻豆国产福利精品| 丝袜诱惑制服诱惑色一区在线观看 | 欧美肥妇bbw| 99re这里只有精品视频首页| 男人的j进女人的j一区| 亚洲蜜桃精久久久久久久| 国产精品无人区| 日韩欧美在线1卡| 欧美美女黄视频| 欧美午夜在线一二页| 欧美最新大片在线看| 99久久精品国产一区二区三区| 久久久久久久综合色一本| 日韩一级视频免费观看在线| 成人开心网精品视频| 秋霞午夜鲁丝一区二区老狼| 六月丁香婷婷久久| 亚洲成av人影院| 久久精品在这里| 国产欧美日韩在线| 国产色产综合色产在线视频| 欧美tickling网站挠脚心| 在线观看日韩国产| a美女胸又www黄视频久久| 色综合天天综合网天天看片| 成人动漫中文字幕| 91丨porny丨户外露出| 久久久久99精品国产片| 国产视频视频一区| 久久婷婷久久一区二区三区| 欧美日韩在线播| 日韩区在线观看| 制服丝袜日韩国产| 精品福利在线导航| 亚洲精品美国一| 免费观看在线色综合| 国产成人在线色| 日韩精品影音先锋| 一区在线观看视频| 免费看日韩a级影片| 成人av电影在线|