1 #pragma once 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <vector> 5 6 using namespace std; 7 8 #define EXPENSE_LOG 0 9 #define MRD 1000000000 10 11 #if EXPENSE_LOG==1 12 13 #define EXPENSE_DEFINE \ 14 ExpenseLog EL; \ 15 ExpenseModule* EngineExpense=EL.AddModule("Static Engine Expenses"); \ 16 ExpenseModule* PPExpense=EL.AddModule("Static Post Processing"); \ 17 ExpenseModule* AdrOpExpense=EL.AddModule("Adress Operator"); 18 #define EXTERN_EXPENSE_DEFINE extern ExpenseLog EL; 19 #define ENGINEEXPENSE_DEFINE extern ExpenseModule* EngineExpense; 20 #define POSTPROCEXPENSE_DEFINE extern ExpenseModule* PPExpense; 21 #define ADREXPENSE_DEFINE extern ExpenseModule* AdrOpExpense; 22 #define ENGINEEXPENSE(IA,IM,DA,DM,AS,BO) EngineExpense->AddOperations((IA),(IM),(DA),(DM),(AS),(BO)); 23 #define POSTPROCEXPENSE(IA,IM,DA,DM,AS,BO) PPExpense->AddOperations((IA),(IM),(DA),(DM),(AS),(BO)); 24 #define ADRESSEXPENSE(IA,IM,DA,DM,AS,BO) AdrOpExpense->AddOperations((IA),(IM),(DA),(DM),(AS),(BO)); 25 #define EXPENSEPRINT EL.PrintAll(stderr); 26 #define EXPENSECLEAR EL.ClearAll(); 27 #else 28 29 #define EXPENSE_DEFINE 30 #define EXTERN_EXPENSE_DEFINE 31 #define ENGINEEXPENSE_DEFINE 32 #define POSTPROCEXPENSE_DEFINE 33 #define ADREXPENSE_DEFINE 34 #define ENGINEEXPENSE(IA,IM,DA,DM,AS,BO) 35 #define POSTPROCEXPENSE(IA,IM,DA,DM,AS,BO) 36 #define ADRESSEXPENSE(IA,IM,DA,DM,AS,BO) 37 #define EXPENSEPRINT 38 #define EXPENSECLEAR 39 #endif 40 41 class ExpenseModule 42 { 43 friend class ExpenseLog; 44 public: 45 ExpenseModule(const char* moduleName); 46 ~ExpenseModule(); 47 48 void Clear(); 49 50 void AddDoubleAdditons(unsigned int number); 51 void AddDoubleMultiplications(unsigned int number); 52 53 void AddIntAdditons(unsigned int number); 54 void AddIntMultiplications(unsigned int number); 55 56 void AddAssignments(unsigned int number); 57 void AddBoolOperations(unsigned int number); 58 59 void AddOperations(unsigned int IntAdd, unsigned int IntMul, unsigned int DoubleAdd, unsigned int DoubleMul, unsigned int Assigns, unsigned int BoolOp); 60 61 void PrintfSelf(FILE* file=stdout); 62 63 protected: 64 const char* chModuleName; 65 unsigned int uiDoubleAdditions; 66 unsigned int uiDoubleMultiplications; 67 unsigned int uiIntAdditions; 68 unsigned int uiIntMultiplications; 69 unsigned int uiAssignments; 70 unsigned int uiBoolOp; 71 unsigned int uiMrdDA; 72 unsigned int uiMrdDM; 73 unsigned int uiMrdIA; 74 unsigned int uiMrdIM; 75 unsigned int uiMrdAssign; 76 unsigned int uiMrdBO; 77 }; 78 79 class ExpenseLog 80 { 81 public: 82 ExpenseLog(void); 83 ~ExpenseLog(void); 84 85 ExpenseModule* AddModule(const char* name); 86 void PrintAll(FILE *file=stdout); 87 void ClearAll(); 88 protected: 89 vector<ExpenseModule*> vModules; 90 }; 91 92 93