source-engine/utils/classcheck/class.h

196 lines
4.1 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#if !defined( CLASS_H )
#define CLASS_H
#ifdef _WIN32
#pragma once
#endif
class CTypeDescriptionField
{
public:
CTypeDescriptionField()
{
m_szVariableName[ 0 ] = 0;
m_szType[ 0 ] = 0;
m_szDefineType[ 0 ] = 0;
m_bCommentedOut = false;
m_bRepresentedInRecvTable = false;
}
char m_szVariableName[ 128 ];
char m_szType[ 128 ];
char m_szDefineType[ 128 ];
bool m_bCommentedOut;
bool m_bRepresentedInRecvTable;
};
class CClassVariable
{
public:
CClassVariable()
{
m_szName[ 0 ] = 0;
m_szType[ 0 ] = 0;
m_Type = TPUBLIC;
m_bKnownType = false;
m_nTypeSize = 0;
m_bIsArray = false;
m_szArraySize[ 0 ] = 0;
m_bInRecvTable = false;
m_TypeSize = 0;
}
typedef enum
{
TPUBLIC = 0,
TPROTECTED,
TPRIVATE
} VARTYPE;
char m_szName[ 128 ];
char m_szType[ 128 ];
VARTYPE m_Type;
bool m_bKnownType;
int m_nTypeSize;
bool m_bIsArray;
char m_szArraySize[ 128 ];
bool m_bInRecvTable;
int m_TypeSize;
};
class CClassMemberFunction
{
public:
typedef enum
{
TPUBLIC = 0,
TPROTECTED,
TPRIVATE
} MEMBERTYPE;
char m_szName[ 128 ];
// Return type
char m_szType[ 128 ];
MEMBERTYPE m_Type;
};
class CClassTypedef
{
public:
char m_szTypeName[ 128 ];
char m_szAlias[ 128 ];
// bool m_bIsTypedefForBaseClass;
};
class CClass
{
public:
enum
{
MAX_VARIABLES = 1024,
MAX_MEMBERS = 1024,
MAX_TDFIELDS = 1024,
};
CClass( const char *name );
~CClass( void );
char *ParseClassDeclaration( char *input );
void SetBaseClass( const char *name );
void CheckChildOfBaseEntity( const char *baseentityclass );
bool CheckForMissingTypeDescriptionFields( int& missingcount, bool createtds = false );
bool CheckForMissingPredictionFields( int& missingcount, bool createtds = false );
bool CheckForPredictionFieldsInRecvTableNotMarkedAsSuchCorrectly( int& missingcount );
void AddVariable( int protection, char *type, char *name, bool array, char *arraysize = 0 );
// Parsing helper methods
bool ParseProtection( char *&input, int &protection );
bool ParseNestedClass( char *&input );
bool ParseBaseClass( char *&input );
bool ParseClassMember( char *&input, int protection );
bool ParseNetworkVar( char *&input, int protection );
void ReportTypeMismatches( CClassVariable *var, CTypeDescriptionField *td );
void CheckForHungarianErrors( int& warnings );
char m_szName[ 128 ];
char m_szBaseClass[ 128 ];
char m_szTypedefBaseClass[ 128 ];
CClassVariable *FindVar( const char *name, bool checkbaseclasses = false );
CClassVariable *AddVar( const char *name );
int m_nVarCount;
CClassVariable *m_Variables[ MAX_VARIABLES ];
CClassMemberFunction *FindMember( const char *name );
CClassMemberFunction *AddMember( const char *name );
int m_nMemberCount;
CClassMemberFunction *m_Members[ MAX_MEMBERS ];
CTypeDescriptionField *FindTD( const char *name );
CTypeDescriptionField *AddTD( const char *name, const char *type, const char *definetype, bool incomments );
int m_nTDCount;
CTypeDescriptionField *m_TDFields[ MAX_TDFIELDS ];
CTypeDescriptionField *FindPredTD( const char *name );
CTypeDescriptionField *AddPredTD( const char *name, const char *type, const char *definetype, bool incomments, bool inrecvtable );
int m_nPredTDCount;
CTypeDescriptionField *m_PredTDFields[ MAX_TDFIELDS ];
CClass *m_pBaseClass;
CClass *m_pNext;
bool m_bDerivedFromCBaseEntity;
bool m_bHasSaveRestoreData;
bool m_bHasPredictionData;
bool m_bHasRecvTableData;
bool m_bConstructPredictableCalled;
int m_nClassDataSize;
private:
struct MemberVarParse_t
{
char m_pType[256];
char m_pTypeModifier[256];
char m_pName[256];
char m_pArraySize[ 128 ];
bool m_bArray;
MemberVarParse_t() { Reset(); }
void Reset()
{
m_pType[0] = 0;
m_pTypeModifier[0] = 0;
m_pName[0] = 0;
m_pArraySize[0] = 0;
m_bArray = false;
}
};
};
#endif // CLASS_H