00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkSmapsFileParser_h
00018 #define __itkSmapsFileParser_h
00019
00020 #include "itkConfigure.h"
00021 #include "itkWin32Header.h"
00022 #include "itkExceptionObject.h"
00023
00024 #include <string>
00025 #include <vector>
00026 #include <map>
00027 #include <istream>
00028 #include <iostream>
00029
00030 namespace itk {
00031
00032
00038 class ITKCommon_EXPORT MapRecord
00039 {
00040 public:
00041 typedef unsigned int MemoryLoadType;
00042 virtual ~MapRecord();
00045 void Reset(void);
00046
00049 std::string m_RecordName;
00050
00055 std::map<std::string, MemoryLoadType> m_Tokens;
00056
00057 };
00058
00063 class ITKCommon_EXPORT SmapsRecord : public MapRecord
00064 {
00081 friend ITKCommon_EXPORT std::istream& operator>>(std::istream &in, SmapsRecord &record);
00082 };
00083
00088 class ITKCommon_EXPORT VMMapSummaryRecord : public MapRecord
00089 {
00095 friend ITKCommon_EXPORT std::istream& operator>>(std::istream &in, VMMapSummaryRecord &record);
00096 };
00097
00102 class ITKCommon_EXPORT VMMapRecord : public MapRecord
00103 {
00109 friend ITKCommon_EXPORT std::istream& operator>>(std::istream &in, VMMapRecord &record);
00110 };
00111
00119 class ITKCommon_EXPORT MapData
00120 {
00121 public:
00123 typedef unsigned long MemoryLoadType;
00124
00125 virtual ~MapData();
00126
00128 virtual MemoryLoadType GetHeapUsage() = 0;
00129
00131 virtual MemoryLoadType GetStackUsage() = 0;
00132
00134 virtual MemoryLoadType GetTotalMemoryUsage();
00135
00137 virtual MemoryLoadType GetMemoryUsage( const char * filter, const char * token );
00138
00140 bool Empty();
00141 protected:
00142
00144 void Reset(void);
00145 protected:
00146 typedef std::vector< MapRecord* > MapRecordVectorType;
00147
00149 MapRecordVectorType m_Records;
00150 };
00151
00156 class ITKCommon_EXPORT SmapsData_2_6:public MapData
00157 {
00158 public:
00159 typedef MapData::MemoryLoadType MemoryLoadType;
00160
00161 virtual ~SmapsData_2_6();
00162
00164 virtual MemoryLoadType GetHeapUsage();
00165
00167 virtual MemoryLoadType GetStackUsage();
00168
00170 friend ITKCommon_EXPORT std::istream& operator>>( std::istream &smapsStream,
00171 SmapsData_2_6 &data);
00172
00173 protected:
00174 bool m_HeapRecordFound;
00175 };
00176
00182 class ITKCommon_EXPORT VMMapData_10_2:public MapData
00183 {
00184 public:
00185 typedef MapData::MemoryLoadType MemoryLoadType;
00186 VMMapData_10_2();
00187 virtual ~VMMapData_10_2();
00188
00190 virtual MemoryLoadType GetHeapUsage();
00191
00193 virtual MemoryLoadType GetStackUsage();
00194
00196 friend ITKCommon_EXPORT std::istream& operator>>( std::istream &stream,
00197 VMMapData_10_2 &data);
00198 protected:
00199 bool m_UsingSummary;
00200 };
00201
00202
00208 template<class TMapData>
00209 class ITK_EXPORT MapFileParser
00210 {
00211 public:
00212 typedef typename TMapData::MemoryLoadType MemoryLoadType;
00213
00214 virtual ~MapFileParser();
00219 virtual void ReadFile( const std::string &mapFileLocation = "") = 0;
00220
00224 bool Update(void);
00225
00229 MemoryLoadType GetHeapUsage();
00230
00234 MemoryLoadType GetStackUsage();
00235
00239 MemoryLoadType GetTotalMemoryUsage();
00240
00244 MemoryLoadType GetMemoryUsage( const char* filter , const char * token = "Size" );
00245
00246 protected:
00247 std::string m_MapFilePath;
00248 TMapData m_MapData;
00249 };
00250
00256 template<class TSmapsDataType>
00257 class ITK_EXPORT SmapsFileParser: public MapFileParser<TSmapsDataType>
00258 {
00259 public:
00260 virtual ~SmapsFileParser();
00266 virtual void ReadFile( const std::string &mapFileLocation = "");
00267
00268 };
00269
00274 template<class TVMMapDataType>
00275 class ITK_EXPORT VMMapFileParser: public MapFileParser<TVMMapDataType>
00276 {
00277 public:
00278 virtual ~VMMapFileParser();
00282 virtual void ReadFile( const std::string &mapFileLocation = "");
00283
00284 };
00285
00286 }
00287
00288 #ifndef ITK_MANUAL_INSTANTIATION
00289 #include "itkSmapsFileParser.txx"
00290 #endif
00291
00292 #endif // __itkSmapsFileParser_h
00293