home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / pviewer / objdata.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  3.2 KB  |  135 lines

  1.  
  2. /******************************************************************************\
  3. *       This is a part of the Microsoft Source Code Samples. 
  4. *       Copyright (C) 1993-1997 Microsoft Corporation.
  5. *       All rights reserved. 
  6. *       This source code is only intended as a supplement to 
  7. *       Microsoft Development Tools and/or WinHelp documentation.
  8. *       See these sources for detailed information regarding the 
  9. *       Microsoft samples programs.
  10. \******************************************************************************/
  11.  
  12.  
  13. /******************************************************************************
  14.  
  15.                                 O B J E C T   D A T A
  16.  
  17.     Name:       objdata.c
  18.  
  19.     Description:
  20.         This module contains functions that access objects in performance
  21.         data.
  22.  
  23.     Functions:
  24.         FirstObject
  25.         NextObject
  26.         FindObject
  27.         FindObjectN
  28.  
  29. ******************************************************************************/
  30.  
  31. #include <windows.h>
  32. #include <winperf.h>
  33. #include "perfdata.h"
  34.  
  35.  
  36.  
  37.  
  38. //*********************************************************************
  39. //
  40. //  FirstObject
  41. //
  42. //      Returns pointer to the first object in pData.
  43. //      If pData is NULL then NULL is returned.
  44. //
  45. PPERF_OBJECT FirstObject (PPERF_DATA pData)
  46. {
  47.     if (pData)
  48.         return ((PPERF_OBJECT) ((PBYTE) pData + pData->HeaderLength));
  49.     else
  50.         return NULL;
  51. }
  52.  
  53.  
  54.  
  55.  
  56. //*********************************************************************
  57. //
  58. //  NextObject
  59. //
  60. //      Returns pointer to the next object following pObject.
  61. //
  62. //      If pObject is the last object, bogus data maybe returned.
  63. //      The caller should do the checking.
  64. //
  65. //      If pObject is NULL, then NULL is returned.
  66. //
  67. PPERF_OBJECT NextObject (PPERF_OBJECT pObject)
  68. {
  69.     if (pObject)
  70.         return ((PPERF_OBJECT) ((PBYTE) pObject + pObject->TotalByteLength));
  71.     else
  72.         return NULL;
  73. }
  74.  
  75.  
  76.  
  77.  
  78. //*********************************************************************
  79. //
  80. //  FindObject
  81. //
  82. //      Returns pointer to object with TitleIndex.  If not found, NULL
  83. //      is returned.
  84. //
  85. PPERF_OBJECT FindObject (PPERF_DATA pData, DWORD TitleIndex)
  86. {
  87. PPERF_OBJECT pObject;
  88. DWORD        i = 0;
  89.  
  90.     if (pObject = FirstObject (pData))
  91.         while (i < pData->NumObjectTypes)
  92.             {
  93.             if (pObject->ObjectNameTitleIndex == TitleIndex)
  94.                 return pObject;
  95.  
  96.             pObject = NextObject (pObject);
  97.             i++;
  98.             }
  99.  
  100.     return NULL;
  101. }
  102.  
  103.  
  104.  
  105.  
  106. //*********************************************************************
  107. //
  108. //  FindObjectN
  109. //
  110. //      Find the Nth object in pData.  If not found, NULL is returned.
  111. //      0 <= N < NumObjectTypes.
  112. //
  113. PPERF_OBJECT FindObjectN (PPERF_DATA pData, DWORD N)
  114. {
  115. PPERF_OBJECT pObject;
  116. DWORD        i = 0;
  117.  
  118.     if (!pData)
  119.         return NULL;
  120.     else if (N >= pData->NumObjectTypes)
  121.         return NULL;
  122.     else
  123.         {
  124.         pObject = FirstObject (pData);
  125.  
  126.         while (i != N)
  127.             {
  128.             pObject = NextObject (pObject);
  129.             i++;
  130.             }
  131.  
  132.         return pObject;
  133.         }
  134. }
  135.