//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TWClassInfo.cpp // = Version : ver2.0 // = Author : xlc // = CreateDate : 2002-09-09 // = Description: ÀàµÄ¶¨Òå // = Maintainers: // //-----------------------------------------------------------------------------+ #include "StdAfx.h" #include "TWClassInfo.h" TSqTable TWClassInfo::allClassInfo; void TWClassInfo::RegisterClassInfo(long cid, TWClassInfo *pInfo) { pInfo->SetClassID(cid); TWClassInfo::allClassInfo[cid] = pInfo; } TWDyCreateClass* TWClassInfo::DyCreate(long cid) { return TWClassInfo::allClassInfo.GetAt(cid)->NewObject(); } TWClassInfo::TWClassInfo(const char *cName,TWDyCreateClass *(*fNewObject)(), TWClassInfo *baseClass0, TWClassInfo *baseClass1, TWClassInfo *baseClass2, TWClassInfo *baseClass3, TWClassInfo *baseClass4) { name = cName; baseClass[0] = baseClass0; baseClass[1] = baseClass1; baseClass[2] = baseClass2; baseClass[3] = baseClass3; baseClass[4] = baseClass4; m_fNewObject = fNewObject; } TWClassInfo::~TWClassInfo() { } long TWClassInfo::GetClassID()const { return classID; } void TWClassInfo::SetClassID(long id) { classID = id; } const char * TWClassInfo::GetClassName()const { return name; } const TWClassInfo* TWClassInfo::GetBaseClassInfo(int i)const { return baseClass[i]; } bool TWClassInfo::IsTypeOf(const char *sName)const { return strcmp(name,sName) == 0; } bool TWClassInfo::IsTypeOf(const TWClassInfo *pClassInfo)const { return this == pClassInfo; } TWDyCreateClass* TWClassInfo::NewObject()const { return m_fNewObject == NULL ? NULL : m_fNewObject(); } bool TWClassInfo::IsClassOf(const TWClassInfo *pClassInfo)const { for (int i = 0; i < MAX_BASE_CLASS_NUM; i++) { if (baseClass[i] == NULL) { break; } else if (baseClass[i]->IsClassOf(pClassInfo)) { return true; } } return IsTypeOf(pClassInfo); } bool TWClassInfo::IsClassOf(const char *sName)const { for (int i = 0; i < MAX_BASE_CLASS_NUM; i++) { if (baseClass[i] == NULL) { break; } else if (baseClass[i]->IsClassOf(sName)) { return true; } } return IsTypeOf(sName); }