116 lines
2.2 KiB
C++
116 lines
2.2 KiB
C++
//-----------------------------------------------------------------------------+
|
|
// 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*> 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);
|
|
} |