From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/server/textstatsmgr.cpp | 174 ++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 mp/src/game/server/textstatsmgr.cpp (limited to 'mp/src/game/server/textstatsmgr.cpp') diff --git a/mp/src/game/server/textstatsmgr.cpp b/mp/src/game/server/textstatsmgr.cpp new file mode 100644 index 00000000..705179c7 --- /dev/null +++ b/mp/src/game/server/textstatsmgr.cpp @@ -0,0 +1,174 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "textstatsmgr.h" +#include "tier0/dbg.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +CTextStatsMgr g_TextStatsMgr; // The default text stats manager. + + +// ------------------------------------------------------------------------------------------ // +// CTextStatsMgr implementation. +// ------------------------------------------------------------------------------------------ // +CTextStatsMgr::CTextStatsMgr( void ) +{ + m_szStatFilename[0] = 0; +} + +bool CTextStatsMgr::WriteFile( IFileSystem *pFileSys, const char *pFilename ) +{ + // If no filename was specified, use out preset one + if ( !pFilename ) + { + pFilename = m_szStatFilename; + } + + FileHandle_t hFile = pFileSys->Open( pFilename, "wt", "LOGDIR" ); + if ( hFile == FILESYSTEM_INVALID_HANDLE ) + return false; + + CTextStat *pHead = CTextStat::GetTextStatsList(); + for ( CTextStat *pCur=pHead->m_pNext; pCur != pHead; pCur=pCur->m_pNext ) + { + if ( pCur->m_pMgr == this ) + pCur->m_PrintFn( pFileSys, hFile, pCur->m_pUserData ); + } + + pFileSys->Close( hFile ); + + // Call each CTextStatFile.. + for( CTextStatFile *pCurFile=CTextStatFile::s_pHead; pCurFile; pCurFile=pCurFile->m_pNext ) + { + pCurFile->m_pFn(); + } + + return true; +} + +char *CTextStatsMgr::GetStatsFilename( void ) +{ + return m_szStatFilename; +} + +void CTextStatsMgr::SetStatsFilename( char *sFilename ) +{ + Assert( sFilename && sFilename[0] ); + + Q_strncpy( m_szStatFilename, sFilename, sizeof(m_szStatFilename) ); +} + +// ------------------------------------------------------------------------------------------ // +// CTextStat implementation. +// ------------------------------------------------------------------------------------------ // + +CTextStat::CTextStat() +{ + m_pPrev = m_pNext = this; + m_pMgr = NULL; +} + + +CTextStat::CTextStat( TextStatPrintFn printFn, void *pUserData, CTextStatsMgr *pMgr ) +{ + m_pPrev = m_pNext = this; + Init( printFn, pUserData, pMgr ); +} + + +CTextStat::~CTextStat() +{ + Term(); +} + + +void CTextStat::Init( TextStatPrintFn printFn, void *pUserData, CTextStatsMgr *pMgr ) +{ + Term(); + + m_pPrev = GetTextStatsList(); + m_pNext = GetTextStatsList()->m_pNext; + m_pPrev->m_pNext = m_pNext->m_pPrev = this; + + m_PrintFn = printFn; + m_pUserData = pUserData; + m_pMgr = pMgr; +} + + +void CTextStat::Term() +{ + // Remove from the global list. + m_pPrev->m_pNext = m_pNext; + m_pNext->m_pPrev = m_pPrev; + m_pPrev = m_pNext = this; + m_pMgr = NULL; +} + + +CTextStat::CTextStat( bool bGlobalListHead ) +{ + Assert( bGlobalListHead ); + m_pPrev = m_pNext = this; +} + + +CTextStat* CTextStat::GetTextStatsList() +{ + static CTextStat theList( true ); + return &theList; +} + + +void CTextStat::RemoveFn( void *pUserData ) +{ + CTextStat *pReg = (CTextStat*)pUserData; + pReg->Term(); +} + + +// ------------------------------------------------------------------------------------------ // +// CTextStatInt implementation. +// ------------------------------------------------------------------------------------------ // + +CTextStatInt::CTextStatInt( const char *pName, int initialValue, CTextStatsMgr *pMgr ) +{ + m_pName = pName; + m_Value = initialValue; + m_Reg.Init( &CTextStatInt::PrintFn, this, pMgr ); +} + + +void CTextStatInt::PrintFn( IFileSystem *pFileSys, FileHandle_t hFile, void *pUserData ) +{ + CTextStatInt *pStat = (CTextStatInt*)pUserData; + pFileSys->FPrintf( hFile, "%s %d\n", pStat->m_pName, pStat->m_Value ); +} + + + +// ------------------------------------------------------------------------------------------ // +// CTextStatFile functions. +// ------------------------------------------------------------------------------------------ // + +CTextStatFile *CTextStatFile::s_pHead = NULL; + + +CTextStatFile::CTextStatFile( TextStatFileFn fn ) +{ + m_pFn = fn; + m_pNext = CTextStatFile::s_pHead; + CTextStatFile::s_pHead = this; +} + + + + + -- cgit v1.2.3