|
|
1.1 ! root 1: #include <afxwin.h> ! 2: #include <afxcoll.h> ! 3: ! 4: #include "types.h" ! 5: #include "list.h" ! 6: ! 7: extern "C" char * UnDName(char *); ! 8: ! 9: ListItem::ListItem(char * szModule, char * szName, int cCalls, TIMETYPE time2, TIMETYPE timeFunc) : ! 10: strMod(szModule), strFunc(szName) ! 11: { ! 12: totalTime = timeFunc; ! 13: timeAll = time2; ! 14: calls = cCalls; ! 15: ! 16: return; ! 17: } ! 18: ! 19: int ListArray::Search(char * szModule, char * szName) ! 20: { ! 21: int i = 0; ! 22: int j = GetUpperBound(); ! 23: int k; ! 24: ListItem * pli; ! 25: ! 26: if (j == -1) { ! 27: return 0; ! 28: } ! 29: ! 30: while ( i < j ) { ! 31: k = (i + j) / 2; ! 32: pli = (ListItem *) GetAt(k); ! 33: ! 34: if (pli->strModule() < szModule) { ! 35: i = k + 1; ! 36: } else if (pli->strModule() > szModule) { ! 37: j = k - 1; ! 38: } else if (pli->strFunction() < szName) { ! 39: i = k + 1; ! 40: } else if (pli->strFunction() > szName) { ! 41: j = k - 1; ! 42: } else { ! 43: return k; ! 44: } ! 45: } ! 46: ! 47: pli = (ListItem *) GetAt(i); ! 48: if (pli->strModule() < szModule) { ! 49: i += 1; ! 50: } else if ((pli->strModule() == szModule) && ! 51: (pli->strFunction() < szName)) { ! 52: i += 1; ! 53: } ! 54: ! 55: return i; ! 56: } /* ListArray::Search() */ ! 57: ! 58: void ListHead::AddTiming(char * szModule, char * szName, int cCalls, ! 59: TIMETYPE timeAll, TIMETYPE timeFunc) ! 60: { ! 61: int i; ! 62: ListItem * pli1; ! 63: ! 64: /* ! 65: * Keep track of the total tree time from the root ! 66: */ ! 67: ! 68: timeTotal += timeFunc; ! 69: ! 70: /* ! 71: * Find if the item is in the array already ! 72: */ ! 73: ! 74: i = rgAlpha.Search(szModule, szName); ! 75: if (i <= rgAlpha.GetUpperBound()) { ! 76: pli1 = (ListItem *) rgAlpha[i]; ! 77: ! 78: if ((pli1->strModule() == szModule) && ! 79: (pli1->strFunction() == szName)) { ! 80: ! 81: pli1->AddTime(cCalls, timeAll, timeFunc); ! 82: return; ! 83: } ! 84: } ! 85: ! 86: pli1 = new ListItem(szModule, szName, cCalls, timeAll, timeFunc); ! 87: rgAlpha.InsertAt(i, pli1); ! 88: ! 89: return; ! 90: } /* ListHead::AddTiming() */ ! 91: ! 92: ! 93: int _CRTAPI1 a(const void * pv1, const void * pv2) ! 94: { ! 95: ListItem * p1 = *(ListItem **) pv1; ! 96: ListItem * p2 = *(ListItem **) pv2; ! 97: ! 98: if (p1->Time() > p2->Time()) { ! 99: return -1; ! 100: } else if (p2->Time() > p1->Time()) { ! 101: return 1; ! 102: } ! 103: return 0; ! 104: } ! 105: ! 106: void ListHead::SortByTotalTime() ! 107: { ! 108: rgRoutineTime.SetSize(rgAlpha.GetSize()); ! 109: ! 110: for (int i=0; i < rgAlpha.GetSize(); i++) { ! 111: rgRoutineTime[i] = rgAlpha[i]; ! 112: } ! 113: ! 114: rgRoutineTime.Sort(a); ! 115: return; ! 116: } /* ListHead::SortByTotalTime() */ ! 117: ! 118: ! 119: int _CRTAPI1 b(const void * pv1, const void * pv2) ! 120: { ! 121: ListItem * p1 = *(ListItem **) pv1; ! 122: ListItem * p2 = *(ListItem **) pv2; ! 123: ! 124: if (p1->TimePerCall() > p2->TimePerCall()) { ! 125: return -1; ! 126: } else if (p2->TimePerCall() > p1->TimePerCall()) { ! 127: return 1; ! 128: } ! 129: return 0; ! 130: } ! 131: ! 132: void ListHead::SortByPerTime() ! 133: { ! 134: rgRoutineTimePer.SetSize(rgAlpha.GetSize()); ! 135: ! 136: for (int i=0; i < rgAlpha.GetSize(); i++) { ! 137: rgRoutineTimePer[i] = rgAlpha[i]; ! 138: } ! 139: rgRoutineTimePer.Sort(b); ! 140: return; ! 141: } /* ListHead::SortByPerTime() */ ! 142: ! 143: ! 144: int _CRTAPI1 c(const void * pv1, const void * pv2) ! 145: { ! 146: ListItem * p1 = *(ListItem **) pv1; ! 147: ListItem * p2 = *(ListItem **) pv2; ! 148: ! 149: if (p1->Calls() > p2->Calls()) { ! 150: return -1; ! 151: } else if (p2->Calls() > p1->Calls()) { ! 152: return 1; ! 153: } ! 154: return 0; ! 155: } ! 156: ! 157: void ListHead::SortByCallCount() ! 158: { ! 159: rgCalls.SetSize(rgAlpha.GetSize()); ! 160: ! 161: for (int i=0; i < rgAlpha.GetSize(); i++) { ! 162: rgCalls[i] = rgAlpha[i]; ! 163: } ! 164: rgCalls.Sort(c); ! 165: return; ! 166: } /* ListHead::SortByCallCount() */ ! 167: ! 168: int _CRTAPI1 d(const void * pv1, const void * pv2) ! 169: { ! 170: ListItem * p1 = *(ListItem **) pv1; ! 171: ListItem * p2 = *(ListItem **) pv2; ! 172: ! 173: if (p1->TimeAll() > p2->TimeAll()) { ! 174: return -1; ! 175: } else if (p2->TimeAll() > p1->TimeAll()) { ! 176: return 1; ! 177: } ! 178: return 0; ! 179: } ! 180: ! 181: void ListHead::SortByTimeAll() ! 182: { ! 183: rgTreeTime.SetSize(rgAlpha.GetSize()); ! 184: ! 185: for (int i=0; i < rgAlpha.GetSize(); i++) { ! 186: rgTreeTime[i] = rgAlpha[i]; ! 187: } ! 188: rgTreeTime.Sort(d); ! 189: return; ! 190: } /* ListHead::SortByTimeAll() */ ! 191: ! 192: ! 193: int _CRTAPI1 e(const void * pv1, const void * pv2) ! 194: { ! 195: ListItem * p1 = *(ListItem **) pv1; ! 196: ListItem * p2 = *(ListItem **) pv2; ! 197: ! 198: if (p1->TimeAllPerCall() > p2->TimeAllPerCall()) { ! 199: return -1; ! 200: } else if (p2->TimeAllPerCall() > p1->TimeAllPerCall()) { ! 201: return 1; ! 202: } ! 203: return 0; ! 204: } ! 205: ! 206: void ListHead::SortByTPerTime() ! 207: { ! 208: rgTreeTimePer.SetSize(rgAlpha.GetSize()); ! 209: ! 210: for (int i=0; i < rgAlpha.GetSize(); i++) { ! 211: rgTreeTimePer[i] = rgAlpha[i]; ! 212: } ! 213: rgTreeTimePer.Sort(e); ! 214: return; ! 215: } /* ListHead::SortByTPerTime() */ ! 216: ! 217: ! 218:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.