summaryrefslogtreecommitdiff
path: root/public/gcsdk/gcreportprinter.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/gcsdk/gcreportprinter.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'public/gcsdk/gcreportprinter.h')
-rw-r--r--public/gcsdk/gcreportprinter.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/public/gcsdk/gcreportprinter.h b/public/gcsdk/gcreportprinter.h
new file mode 100644
index 0000000..78a6b00
--- /dev/null
+++ b/public/gcsdk/gcreportprinter.h
@@ -0,0 +1,129 @@
+//========= Copyright (c), Valve LLC, All rights reserved. ============
+//
+// Purpose: A utility for printing out reports on the GC in an ordered manner
+//
+//=============================================================================
+
+#ifndef GCREPORTPRINTER_H
+#define GCREPORTPRINTER_H
+
+#pragma once
+
+#include "gclogger.h"
+
+namespace GCSDK
+{
+ //-----------------------------------------------------------------------------------------------------
+ // CGCReportPrinter - A class that will handle formatting a report for outputting to a console or other
+ // data sources. Just create an instance of the class, add the columns, then add the fields, and print. Below is an example:
+ //
+ // CGCReportPrinter rp;
+ // rp.AddStringColumn( "Names" );
+ // rp.AddFloatColumn( "SomeValue", 2, CGCReportPrinter::eSummary_Total );
+ // FOR_EACH_VALUE( v )
+ // rp.StrValue( v.Name );
+ // rp.FloatValue( v.Float );
+ // rp.CommitRow();
+ // rp.SortReport( "SomeValue" );
+ // rp.PrintReport( SPEW_CONSOLE );
+ //
+ //-----------------------------------------------------------------------------------------------------
+
+ class CGCReportPrinter
+ {
+ public:
+
+ CGCReportPrinter();
+ ~CGCReportPrinter();
+
+ //what type of summary to report at the end of the report for the column (not used for string columns)
+ enum ESummaryType
+ {
+ eSummary_None,
+ eSummary_Total,
+ eSummary_Max
+ };
+
+ //how to format memory values
+ enum EIntDisplayType
+ {
+ eIntDisplay_Normal,
+ eIntDisplay_Memory_MB,
+ };
+
+ //called to handle inserting columns into the report of various data types. These must be called before any data has been added
+ //to the report, and will fail if there is outstanding data
+ bool AddStringColumn( const char* pszColumn );
+ bool AddSteamIDColumn( const char* pszColumn );
+ bool AddIntColumn( const char* pszColumn, ESummaryType eSummary, EIntDisplayType eIntDisplay = eIntDisplay_Normal );
+ bool AddFloatColumn( const char* pszColumn, ESummaryType eSummary, uint32 unNumDecimal = 2 );
+
+ //called to reset all report data
+ void ClearData();
+ //called to reset the entire report
+ void Clear();
+
+ //called to add the various data to the report, the order of this must match the columns that were added originally
+ bool StrValue( const char* pszStr, const char* pszLink = NULL );
+ bool IntValue( int64 nValue, const char* pszLink = NULL );
+ bool FloatValue( double fValue, const char* pszLink = NULL );
+ bool SteamIDValue( CSteamID id, const char* pszLink = NULL );
+ //called to commit the values that have been added as a new row
+ bool CommitRow();
+
+ //sorts the report based upon the specified column name
+ void SortReport( const char* pszColumn, bool bDescending = true );
+ //same as the above, but sorts based upon the specified column index
+ void SortReport( uint32 nColIndex, bool bDescending = true );
+
+ //called to print out the provided report
+ void PrintReport( CGCEmitGroup& eg, uint32 nTop = 0 );
+
+ private:
+
+ friend class CReportRowSorter;
+
+ //the type of each column
+ enum EColumnType
+ {
+ eCol_String,
+ eCol_Int,
+ eCol_Float,
+ eCol_SteamID,
+ };
+
+ //our list of columns
+ struct Column_t
+ {
+ CUtlString m_sName;
+ EColumnType m_eType;
+ ESummaryType m_eSummary;
+ uint8 m_nNumDecimals; //for floats only
+ EIntDisplayType m_eIntDisplay; // for ints only
+ };
+ CUtlVector< Column_t > m_Columns;
+
+ //a variant that holds onto the column field data
+ struct Variant_t
+ {
+ Variant_t();
+ CUtlString m_sStr;
+ CUtlString m_sLink; //optional link to put around the value
+ int64 m_nInt;
+ double m_fFloat;
+ CSteamID m_SteamID;
+ };
+
+ //our data block
+ typedef CCopyableUtlVector< Variant_t > TRow;
+ CUtlVector< TRow* > m_Rows;
+
+ //a row that isn't quite in the table, but consists of the row being built to
+ //avoid issues with partial rows
+ TRow m_RowBuilder;
+ };
+
+} // namespace GCSDK
+
+
+#endif // GCLOGGER_H