//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #if !defined( CODEPROCESSOR_H ) #define CODEPROCESSOR_H #ifdef _WIN32 #pragma once #endif #include "class.h" #include "icodeprocessor.h" #include "utldict.h" class CCodeProcessor : public ICodeProcessor { public: CCodeProcessor( void ); ~CCodeProcessor( void ); void Process( const char *baseentityclass, const char *gamespecific, const char *sourcetreebase, const char *subdir ); void Process( const char *baseentityclass, const char *gamespecific, const char *sourcetreebase, const char *subdir, const char *pFileName ); CClass *AddClass( const char *classname ); void SetQuiet( bool quiet ); bool GetQuiet( void ) const; void SetPrintHierarchy( bool print ); bool GetPrintHierarchy( void ) const; void SetPrintMembers( bool print ); bool GetPrintMembers( void ) const; void SetPrintTDs( bool print ); bool GetPrintTDs( void ) const; void SetPrintPredTDs( bool print ); bool GetPrintPredTDs( void ) const; void SetPrintCreateMissingTDs( bool print ); bool GetPrintCreateMissingTDs( void ) const; void SetPrintCreateMissingPredTDs( bool print ); bool GetPrintCreateMissingPredTDs( void ) const; void SetLogFile( bool log ); bool GetLogFile( void ) const; void SetCheckHungarian( bool check ); bool GetCheckHungarian() const; CClass *FindClass( const char *name ) const; void ResolveBaseClasses( const char *baseentityclass ); void Clear( void ); void PrintClassList( void ) const; void PrintMissingTDFields( void ) const; void ReportHungarianNotationErrors(); int Count( void ) const; void SortClassList( void ); private: char *ParseTypeDescription( char *current, bool fIsMacroized ); char *ParsePredictionTypeDescription( char *current ); char *ParseReceiveTable( char *current ); void ProcessModule( bool forcequiet, int depth, int& maxdepth, int& numheaders, int& skippedfiles, const char *srcroot, const char *baseroot, const char *root, const char *module ); void ProcessModules( const char *srcroot, const char *root, const char *rootmodule ); void PrintResults( const char *baseentityclass ); void ConstructModuleList_R( int level, const char *baseentityclass, const char *gamespecific, const char *root, char const *srcroot ); void AddHeader( int depth, const char *filename, const char *rootmodule ); bool CheckShouldSkip( bool forcequiet, int depth, char const *filename, int& numheaders, int& skippedfiles); bool LoadFile( char **buffer, char *filename, char const *module, bool forcequiet, int depth, int& filelength, int& numheaders, int& skippedfiles, char const *srcroot, char const *root, char const *baseroot ); // include file path void CleanupIncludePath(); void AddIncludePath( const char *pPath ); void SetupIncludePath( const char *sourcetreebase, const char *subdir, const char *gamespecific ); CClass *m_pClassList; typedef struct { bool skipped; } CODE_MODULE; CUtlDict< CODE_MODULE, int > m_Modules; CUtlDict< CODE_MODULE, int > m_Headers; CUtlVector< char * > m_IncludePath; bool m_bQuiet; bool m_bPrintHierarchy; bool m_bPrintMembers; bool m_bPrintTypedescriptionErrors; bool m_bPrintPredictionDescErrors; bool m_bCreateMissingTDs; bool m_bCreateMissingPredTDs; bool m_bLogToFile; bool m_bCheckHungarian; int m_nFilesProcessed; int m_nHeadersProcessed; int m_nClassesParsed; int m_nOffset; int m_nBytesProcessed; int m_nLinesOfCode; double m_flStart; double m_flEnd; char m_szCurrentCPP[ 128 ]; char m_szBaseEntityClass[ 256 ]; }; extern ICodeProcessor *processor; #endif // CODEPROCESSOR_H