Orfeo Toolbox  3.16
itkMemoryUsageObserver.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Insight Segmentation & Registration Toolkit
4  Module: $RCSfile: itkMemoryUsageObserver.h,v $
5  Language: C++
6  Date: $Date: 2009-02-05 22:04:06 $
7  Version: $Revision: 1.3 $
8 
9  Copyright (c) Insight Software Consortium. All rights reserved.
10  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 
18 #ifndef __itkMemoryUsageObserver_h
19 #define __itkMemoryUsageObserver_h
20 
21 #include "itkConfigure.h"
22 #include "itkMacro.h"
23 #include "itkObject.h"
24 #include "itkObjectFactory.h"
25 
26 #if defined(WIN32) || defined(_WIN32)
27  #include <windows.h>
28  #define SUPPORT_TOOLHELP32
29  #if defined(SUPPORT_TOOLHELP32)
30 typedef LONG NTSTATUS;
31  #endif
32 #endif
33 
34 namespace itk
35 {
36 
46 {
47 public:
49  typedef unsigned long MemoryLoadType;
50 
52  virtual ~MemoryUsageObserverBase();
53 
55  virtual MemoryLoadType GetMemoryUsage() = 0;
56 
57 };
58 
59 #if defined(WIN32) || defined(_WIN32)
60 class ITKCommon_EXPORT WindowsMemoryUsageObserver:public MemoryUsageObserverBase
61 {
62 public:
63  WindowsMemoryUsageObserver();
65  virtual ~WindowsMemoryUsageObserver();
66 
68  virtual MemoryLoadType GetMemoryUsage();
69 protected:
70 #if defined(SUPPORT_TOOLHELP32)
71  typedef NTSTATUS (WINAPI * PZwQuerySystemInformation)(UINT, PVOID, ULONG, PULONG);
72 
73  // handle ntdll.dll library
74  HMODULE m_hNTLib;
75  // Windows native API function to query system information
76  PZwQuerySystemInformation ZwQuerySystemInformation;
77 #endif // defined(SUPPORT_TOOLHELP32)
78 };
79 #endif // defined(WIN32) || defined(_WIN32)
80 
81 #ifdef linux
82 class ITKCommon_EXPORT LinuxMemoryUsageObserver:public MemoryUsageObserverBase
83 {
84 public:
86  virtual ~LinuxMemoryUsageObserver();
87  virtual MemoryLoadType GetMemoryUsage();
88 };
89 #endif // linux
90 
91 #if defined(__APPLE__) && MAC_OS_X_VERSION >= MAC_OS_X_VERSION_10_2
92 class ITKCommon_EXPORT MacOSXMemoryUsageObserver:public MemoryUsageObserverBase
93 {
94 public:
96  virtual ~MacOSXMemoryUsageObserver();
97  virtual MemoryLoadType GetMemoryUsage();
98 };
99 #endif // Mac OS X
100 
101 #if defined(__SUNPRO_CC) || defined (__sun__)
102 class ITKCommon_EXPORT SunSolarisMemoryUsageObserver:public MemoryUsageObserverBase
103 {
104 public:
106  virtual ~SunSolarisMemoryUsageObserver();
107  virtual MemoryLoadType GetMemoryUsage();
108 };
109 #endif // Sun Solaris
110 
111 #if !defined(WIN32) && !defined(_WIN32)
113 {
114 public:
117  virtual MemoryLoadType GetMemoryUsage();
118 };
119 #if !defined(__APPLE__) && !defined(__SUNPRO_CC) && !defined (__sun__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
120 
124 {
125 public:
127  virtual ~MallinfoMemoryUsageObserver();
128  virtual MemoryLoadType GetMemoryUsage();
129 };
130 #endif // Mallinfo
131 #endif // !defined(WIN32) && !defined(_WIN32)
132 
133 /* \class MemoryUsageObserver
134  * The best MemoryUsageObserver has been chosen for each OS.
135  * However, SysResourceMemoryUsageObserver is far from being accurate. Other
136  * way of getting the Memory Usage shall be used.
137  * For FreeBSD, some alternatives would be to parse the output of
138  * "sysctl vm.vmtotal" or "sysctl -a | grep -i memory"
139 */
141 #if defined(WIN32) || defined(_WIN32)
142  public WindowsMemoryUsageObserver
143 #elif defined(linux)
144  public LinuxMemoryUsageObserver
145 #elif defined(__SUNPRO_CC) || defined (__sun__)
146  public SunSolarisMemoryUsageObserver
147 #elif defined(__APPLE__) && MAC_OS_X_VERSION >= MAC_OS_X_VERSION_10_2
148  public MacOSXMemoryUsageObserver
149 #elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__)
151 #else
153 #endif
154 {
155 public:
158 };
159 
160 } // end of namespace itk
161 
162 #endif // __itkMemoryUsageObserver_h

Generated at Sat Feb 2 2013 23:52:37 for Orfeo Toolbox with doxygen 1.8.1.1