📄 type.cpp
字号:
#include <string.h>
#include <stdio.h>
#include "reflect.h"
RTTIType RTTIType::unknownType(RTTIType::RTTI_UNKNOWN);
RTTIType RTTIType::voidType(RTTIType::RTTI_VOID);
RTTIType RTTIType::charType(RTTIType::RTTI_CHAR);
RTTIType RTTIType::ucharType(RTTIType::RTTI_UCHAR);
RTTIType RTTIType::scharType(RTTIType::RTTI_SCHAR);
RTTIType RTTIType::shortType(RTTIType::RTTI_SHORT);
RTTIType RTTIType::ushortType(RTTIType::RTTI_USHORT);
RTTIType RTTIType::intType(RTTIType::RTTI_INT);
RTTIType RTTIType::uintType(RTTIType::RTTI_UINT);
RTTIType RTTIType::longType(RTTIType::RTTI_LONG);
RTTIType RTTIType::ulongType(RTTIType::RTTI_ULONG);
RTTIType RTTIType::floatType(RTTIType::RTTI_FLOAT);
RTTIType RTTIType::doubleType(RTTIType::RTTI_DOUBLE);
RTTIType RTTIType::boolType(RTTIType::RTTI_BOOL);
RTTIType::~RTTIType() {}
void RTTIType::getTypeName(char* buf)
{
char* p = "???";
switch (tag) {
case RTTI_UNKNOWN:
p = "<???>";
break;
case RTTI_VOID:
p = "void";
break;
case RTTI_CHAR:
p = "char";
break;
case RTTI_UCHAR:
p = "unsigned char";
break;
case RTTI_SCHAR:
p = "signed char";
break;
case RTTI_SHORT:
p = "short";
break;
case RTTI_USHORT:
p = "unsigned short";
break;
case RTTI_INT:
p = "int";
break;
case RTTI_UINT:
p = "unsigned int";
break;
case RTTI_LONG:
p = "long";
break;
case RTTI_ULONG:
p = "unsigned long";
break;
case RTTI_FLOAT:
p = "float";
break;
case RTTI_DOUBLE:
p = "double";
break;
case RTTI_BOOL:
p = "bool";
break;
}
strcpy(buf, p);
}
void RTTIPtrType::getTypeName(char* buf)
{
ptrType->getTypeName(buf);
buf += strlen(buf);
*buf++ = '*';
*buf = '\0';
}
void RTTIArrayType::getTypeName(char* buf)
{
elemType->getTypeName(buf);
buf += strlen(buf);
*buf++ = '[';
if (nElems != 0) {
buf += sprintf(buf, "%d", nElems);
}
*buf++ = ']';
*buf = '\0';
}
void RTTIDerivedType::getTypeName(char* buf) {
baseClass->getTypeName(buf);
}
void RTTIMethodType::getTypeName(char* buf)
{
returnType->getTypeName(buf);
buf += strlen(buf);
*buf++ = '(';
methodClass->getTypeName(buf);
buf += strlen(buf);
*buf++ = ':';
*buf++ = ':';
*buf++ = '*';
*buf++ = ')';
*buf++ = '(';
for (int i = 0; i < nParams; i++) {
if (i != 0) {
*buf++ = ',';
}
paramTypes[i]->getTypeName(buf);
buf += strlen(buf);
}
*buf++ = ')';
*buf = '\0';
}
void RTTIMethodType::getMethodDeclaration(char* buf, char const* name)
{
returnType->getTypeName(buf);
buf += strlen(buf);
*buf++ = ' ';
*buf++ = '\t';
methodClass->getTypeName(buf);
buf += strlen(buf);
buf += sprintf(buf, "::%s(", name);
for (int i = 0; i < nParams; i++) {
if (i != 0) {
*buf++ = ',';
}
paramTypes[i]->getTypeName(buf);
buf += strlen(buf);
}
*buf++ = ')';
*buf++ = ';';
*buf = '\0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -