27 #include "../Defines.h" 
   37 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
   41 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD 
   46 #include <sys/resource.h> 
   48 #include <sys/sysctl.h> 
   49 #include <sys/types.h>   
   52 #elif TE_PLATFORM == TE_PLATFORMCODE_APPLE 
   56 #include <sys/sysctl.h>  
   59   #error "Unsuported plataform for physical memory checking" 
   66 #include <boost/filesystem.hpp> 
   70       unsigned long int freemem = 0;
 
   72 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE 
   75       std::size_t usermem_len = 
sizeof(usermem);
 
   77       int mib[2] = { CTL_HW, HW_USERMEM };
 
   79       if(sysctl(mib, (2 * 
sizeof(
int)), &usermem, &usermem_len, NULL, 0) == 0)
 
   81         freemem = 
static_cast<unsigned long int>(usermem);
 
   85         throw Exception(
"Could not get free physical memory!");
 
   88 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 
   89       freemem = 
static_cast<unsigned long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES) );
 
   91 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
   92       LPMEMORYSTATUS status_buffer = 
new MEMORYSTATUS;
 
   93       GlobalMemoryStatus(status_buffer);
 
   94       freemem = 
static_cast<unsigned long int>(status_buffer->dwAvailPhys);
 
   97   #error "Unsuported plataform for physical memory checking" 
  105       unsigned long int totalmem = 0;
 
  107 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE 
  108       unsigned int physmem = 0;
 
  110       std::size_t physmem_len = 
sizeof(physmem);
 
  112       int mib[2] = { CTL_HW, HW_PHYSMEM };
 
  114       if(sysctl(mib, (2 * 
sizeof(
int)), &physmem, &physmem_len, NULL, 0) == 0)
 
  116         totalmem = 
static_cast<unsigned long int>(physmem); 
 
  120         throw Exception(
"Could not get total physical memory!");
 
  123 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 
  124       totalmem = 
static_cast<unsigned long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES) );
 
  126 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
  127       LPMEMORYSTATUS status_buffer = 
new MEMORYSTATUS;
 
  128       GlobalMemoryStatus(status_buffer);
 
  129       totalmem = 
static_cast<unsigned long int>(status_buffer->dwTotalPhys);
 
  130       delete status_buffer;
 
  132   #error "Unsuported plataform for physical memory checking" 
  140       unsigned long int usedmem = 0;
 
  142 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD 
  143       struct rusage rusageinfo;
 
  144       getrusage( RUSAGE_SELF, &rusageinfo );
 
  145       usedmem = 
static_cast<unsigned long int>(1024 * rusageinfo.ru_maxrss);
 
  147 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 
  148       std::string pid, comm, state, ppid, pgrp, session, tty_nr, 
 
  149                   tpgid, flags, minflt, cminflt, majflt, cmajflt,
 
  150                   utime, stime, cutime, cstime, priority, nice,
 
  151                   stringO, itrealvalue, starttime;
 
  153       std::ifstream stat_stream(
"/proc/self/stat", std::ios_base::in); 
 
  155       stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr 
 
  156                   >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt 
 
  157                   >> utime >> stime >> cutime >> cstime >> priority >> nice 
 
  158                   >> stringO >> itrealvalue >> starttime >> usedmem;    
 
  160 #elif TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE 
  161       struct rusage rusageinfo;
 
  162       getrusage(RUSAGE_SELF, &rusageinfo);
 
  163       usedmem = 
static_cast<unsigned long int>(1024 * rusageinfo.ru_maxrss);
 
  165 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
  166       LPMEMORYSTATUS status_buffer = 
new MEMORYSTATUS;
 
  167       GlobalMemoryStatus( status_buffer );
 
  168       usedmem = 
static_cast<unsigned long int>(status_buffer->dwTotalVirtual - status_buffer->dwAvailVirtual);
 
  169       delete status_buffer;
 
  172   #error "Unsuported plataform for virtual memory checking" 
  181       unsigned long int totalmem = 0;
 
  183 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX) 
  186       if( getrlimit( RLIMIT_AS, &info ) == 0 )
 
  188         totalmem = (
unsigned long int)info.rlim_max;
 
  191 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
  192       LPMEMORYSTATUS status_buffer = 
new MEMORYSTATUS;
 
  193       GlobalMemoryStatus( status_buffer );
 
  194       totalmem = (
unsigned long int) status_buffer->dwTotalVirtual;
 
  195       delete status_buffer;
 
  198   #error 
"Unsuported plataform for virtual memory checking" 
  206       unsigned int procnmb = 0;
 
  208 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
  209       SYSTEM_INFO siSysInfo;
 
  210       GetSystemInfo(&siSysInfo);
 
  211       procnmb = 
static_cast<unsigned int>(siSysInfo.dwNumberOfProcessors);
 
  213 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE 
  214       procnmb = 
static_cast<unsigned int>(sysconf(_SC_NPROCESSORS_ONLN));
 
  217   #error "ERROR: Unsupported platform" 
  227       char* varValuePtr = getenv(
"PATH");
 
  229       std::string separator;
 
  230       #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX) 
  232       #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
  235         #error "Unsuported plataform for virtual memory checking" 
  240         Tokenize( std::string( varValuePtr ), paths, separator );
 
  248       char* varValuePtr = getenv(
"LD_LIBRARY_PATH");
 
  250       std::string separator;
 
  251       #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX) 
  253       #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 
  256         #error "Unsuported plataform for virtual memory checking" 
  261         Tokenize( std::string( varValuePtr ), paths, separator );
 
  268   boost::filesystem::path tl_path = boost::filesystem::current_path();
 
  270   boost::filesystem::path eval_path = tl_path / p;
 
  272   if(boost::filesystem::exists(eval_path))
 
  273     return eval_path.string();
 
  277   eval_path = tl_path / p;
 
  279   if(boost::filesystem::exists(eval_path))
 
  280     return eval_path.string();
 
  283   tl_path = TERRALIB_CODEBASE_PATH;
 
  285   eval_path = tl_path / p;
 
  287   if(boost::filesystem::exists(eval_path))
 
  288     return eval_path.string();
 
  291   const char* te_env = getenv(TERRALIB_DIR_VAR_NAME);
 
  297     eval_path = tl_path / p;
 
  299     if(boost::filesystem::exists(eval_path))
 
  300       return eval_path.string();
 
  304   tl_path = TERRALIB_INSTALL_PREFIX_PATH;
 
  306   eval_path = tl_path / p;
 
  308   if(boost::filesystem::exists(eval_path))
 
  309     return eval_path.string();
 
TECOMMONEXPORT void GetDecompostedLDPathEnvVar(std::vector< std::string > &paths)
Returns the system LD_LIBRARY_PATH enviroment variable, decomposed into directory names...
 
TECOMMONEXPORT std::string FindInTerraLibPath(const std::string &p)
Returns the path relative to a directory or file in the context of TerraLib. 
 
TECOMMONEXPORT void GetDecompostedPathEnvVar(std::vector< std::string > &paths)
Returns the system PATH enviroment variable, decomposed into directory names, or an empty vector if n...
 
void Tokenize(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters=" ")
It tokenizes a given string with a delimiter of your own choice. 
 
TECOMMONEXPORT unsigned int GetPhysProcNumber()
Returns the number of physical processors. 
 
TECOMMONEXPORT unsigned long int GetUsedVirtualMemory()
Returns the amount of used virtual memory (bytes) for the current process (physical + swapped)...
 
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
 
This class is designed for dealing with multi-language text translation in TerraLib. 
 
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
 
Utility functions for dealing with strings. 
 
TECOMMONEXPORT unsigned long int GetTotalPhysicalMemory()
Returns the amount of total physical memory (bytes). 
 
TECOMMONEXPORT unsigned long int GetFreePhysicalMemory()
Returns the amount of free physical memory (bytes). 
 
TECOMMONEXPORT unsigned long int GetTotalVirtualMemory()
Returns the amount of total virtual memory (bytes) that can be claimed by the current process (physic...