File:  [WindowsNT SDKs] / mstools / samples / sdktools / capview / list.cpp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:24:28 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-jul-1993, HEAD
Microsoft Windows NT Build 511 (SDK Final Release) 07-24-1993

#include <afxwin.h>
#include <afxcoll.h>

#include "types.h"
#include "list.h"

extern "C" char * UnDName(char *);

ListItem::ListItem(char * szModule, char * szName, int cCalls, TIMETYPE time2, TIMETYPE timeFunc) :
       strMod(szModule), strFunc(szName)
{
    totalTime = timeFunc;
    timeAll = time2;
    calls = cCalls;

    return;
}

int ListArray::Search(char * szModule, char * szName)
{
    int         i = 0;
    int         j = GetUpperBound();
    int         k;
    ListItem *  pli;

    if (j == -1) {
        return 0;
    }

    while ( i < j ) {
        k = (i + j) / 2;
        pli = (ListItem *) GetAt(k);

        if (pli->strModule() < szModule) {
            i = k + 1;
        } else if (pli->strModule() > szModule) {
            j = k - 1;
        } else if (pli->strFunction() < szName) {
            i = k + 1;
        } else if (pli->strFunction() > szName) {
            j = k - 1;
        } else {
            return k;
        }
    }

    pli = (ListItem *) GetAt(i);
    if (pli->strModule() < szModule) {
        i += 1;
    } else if ((pli->strModule() == szModule) &&
               (pli->strFunction() < szName)) {
        i += 1;
    }

    return i;
}                               /* ListArray::Search() */

void ListHead::AddTiming(char * szModule, char * szName, int cCalls,
                         TIMETYPE timeAll, TIMETYPE timeFunc)
{
    int         i;
    ListItem *  pli1;

    /*
     *  Keep track of the total tree time from the root
     */

    timeTotal += timeFunc;

    /*
     *  Find if the item is in the array already
     */

    i = rgAlpha.Search(szModule, szName);
    if (i <= rgAlpha.GetUpperBound()) {
        pli1 = (ListItem *) rgAlpha[i];

        if ((pli1->strModule() == szModule) &&
            (pli1->strFunction() == szName)) {

            pli1->AddTime(cCalls, timeAll, timeFunc);
            return;
        }
    }

    pli1 = new ListItem(szModule, szName, cCalls, timeAll, timeFunc);
    rgAlpha.InsertAt(i, pli1);

    return;
}                               /* ListHead::AddTiming() */


int _CRTAPI1 a(const void * pv1, const void * pv2)
{
    ListItem *	p1 = *(ListItem **) pv1;
    ListItem *  p2 = *(ListItem **) pv2;

    if (p1->Time() > p2->Time()) {
        return -1;
    } else if (p2->Time() > p1->Time()) {
    	return  1;
    }
    return 0;
}

void ListHead::SortByTotalTime()
{
    rgRoutineTime.SetSize(rgAlpha.GetSize());

    for (int i=0; i < rgAlpha.GetSize(); i++) {
        rgRoutineTime[i] = rgAlpha[i];
    }

    rgRoutineTime.Sort(a);
    return;
}                               /* ListHead::SortByTotalTime() */


int _CRTAPI1 b(const void * pv1, const void * pv2)
{
    ListItem *	p1 = *(ListItem **) pv1;
    ListItem *  p2 = *(ListItem **) pv2;

    if (p1->TimePerCall() > p2->TimePerCall()) {
        return -1;
    } else if (p2->TimePerCall() > p1->TimePerCall()) {
    	return  1;
    }
    return 0;
}

void ListHead::SortByPerTime()
{
    rgRoutineTimePer.SetSize(rgAlpha.GetSize());

    for (int i=0; i < rgAlpha.GetSize(); i++) {
        rgRoutineTimePer[i] = rgAlpha[i];
    }
    rgRoutineTimePer.Sort(b);
    return;
}                               /* ListHead::SortByPerTime() */


int _CRTAPI1 c(const void * pv1, const void * pv2)
{
    ListItem *	p1 = *(ListItem **) pv1;
    ListItem *  p2 = *(ListItem **) pv2;

    if (p1->Calls() > p2->Calls()) {
        return -1;
    } else if (p2->Calls() > p1->Calls()) {
    	return  1;
    }
    return 0;
}

void ListHead::SortByCallCount()
{
    rgCalls.SetSize(rgAlpha.GetSize());

    for (int i=0; i < rgAlpha.GetSize(); i++) {
        rgCalls[i] = rgAlpha[i];
    }
    rgCalls.Sort(c);
    return;
}                               /* ListHead::SortByCallCount() */

int _CRTAPI1 d(const void * pv1, const void * pv2)
{
    ListItem *	p1 = *(ListItem **) pv1;
    ListItem *  p2 = *(ListItem **) pv2;

    if (p1->TimeAll() > p2->TimeAll()) {
        return -1;
    } else if (p2->TimeAll() > p1->TimeAll()) {
    	return  1;
    }
    return 0;
}

void ListHead::SortByTimeAll()
{
    rgTreeTime.SetSize(rgAlpha.GetSize());

    for (int i=0; i < rgAlpha.GetSize(); i++) {
        rgTreeTime[i] = rgAlpha[i];
    }
    rgTreeTime.Sort(d);
    return;
}                               /* ListHead::SortByTimeAll() */


int _CRTAPI1 e(const void * pv1, const void * pv2)
{
    ListItem *	p1 = *(ListItem **) pv1;
    ListItem *  p2 = *(ListItem **) pv2;

    if (p1->TimeAllPerCall() > p2->TimeAllPerCall()) {
        return -1;
    } else if (p2->TimeAllPerCall() > p1->TimeAllPerCall()) {
    	return  1;
    }
    return 0;
}

void ListHead::SortByTPerTime()
{
    rgTreeTimePer.SetSize(rgAlpha.GetSize());

    for (int i=0; i < rgAlpha.GetSize(); i++) {
        rgTreeTimePer[i] = rgAlpha[i];
    }
    rgTreeTimePer.Sort(e);
    return;
}                               /* ListHead::SortByTPerTime() */




unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.