00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef MRPT_OS_H
00029 #define MRPT_OS_H
00030
00031 #include <mrpt/config.h>
00032
00033 #include <mrpt/utils/types.h>
00034
00035 #include <cstdarg>
00036 #include <cstdlib>
00037 #include <cstring>
00038 #include <deque>
00039 #include <vector>
00040
00041
00042 #define _IAMINUTILSDEFS_H
00043 #include <mrpt/utils/utils_impexp.h>
00044 #undef _IAMINUTILSDEFS_H
00045
00046
00047 #ifdef __GNUC__
00048 # define MRPT_printf_format_check(_FMT_,_VARARGS_) __attribute__ ((__format__ (__printf__, _FMT_,_VARARGS_)))
00049 #else
00050 # define MRPT_printf_format_check(_FMT_,_VARARGS_)
00051 #endif
00052
00053
00054 #ifdef __GNUC__
00055 # define MRPT_scanf_format_check(_FMT_,_VARARGS_) __attribute__ ((__format__ (__scanf__, _FMT_,_VARARGS_)))
00056 #else
00057 # define MRPT_scanf_format_check(_FMT_,_VARARGS_)
00058 #endif
00059
00060
00062 #define MRPT_NO_THROWS throw()
00063
00066 #define INVALID_TIMESTAMP (0)
00067
00068
00069 namespace mrpt
00070 {
00071 namespace utils { class CFileOutputStream; }
00072
00076 namespace system
00077 {
00084 struct TThreadHandle
00085 {
00086 #ifdef MRPT_OS_WINDOWS
00087 TThreadHandle() :
00088 hThread(NULL),
00089 idThread(0)
00090 {
00091 }
00092
00096 void clear()
00097 {
00098 idThread = 0;
00099 hThread = NULL;
00100 }
00101 void *hThread;
00102 # if defined(HAVE_OPENTHREAD) // defined(_MSC_VER) && (_MSC_VER>=1400)
00103 uintptr_t idThread;
00104 # else
00105 unsigned long idThread;
00106 # endif
00107 #endif
00108 #ifdef MRPT_OS_LINUX
00109 TThreadHandle() : idThread(0)
00110 {
00111 }
00112 unsigned long idThread;
00113
00117 void clear()
00118 {
00119 idThread = 0;
00120 }
00121 #endif
00122
00123 bool isClear() { return idThread==0; }
00124 };
00125
00129 enum TProcessPriority {
00130 ppIdle = 0,
00131 ppNormal,
00132 ppHigh,
00133 ppVeryHigh
00134 };
00135
00139 enum TThreadPriority {
00140 tpLow = 0,
00141 tpNormal,
00142 tpHigh
00143 };
00144
00154 TThreadHandle MRPTDLLIMPEXP createThread(
00155 void ( *func )( void * ),
00156 void *param
00157 );
00158
00162 void MRPTDLLIMPEXP joinThread( const TThreadHandle &threadHandle );
00163
00166 unsigned long MRPTDLLIMPEXP getCurrentThreadId() MRPT_NO_THROWS;
00167
00175 void MRPTDLLIMPEXP getCurrentThreadTimes(
00176 time_t &creationTime,
00177 time_t &exitTime,
00178 double &cpuTime );
00179
00183 void MRPTDLLIMPEXP changeThreadPriority( const TThreadHandle &threadHandle, TThreadPriority priority );
00184
00188 void MRPTDLLIMPEXP changeCurrentProcessPriority( TProcessPriority priority );
00189
00197 namespace os
00198 {
00202 int MRPTDLLIMPEXP sprintf(char *buf, size_t bufSize, const char *format, ...) MRPT_NO_THROWS MRPT_printf_format_check(3,4);
00203
00206 int MRPTDLLIMPEXP vsprintf(char *buf, size_t bufSize, const char *format, va_list args) MRPT_NO_THROWS;
00207
00210 int MRPTDLLIMPEXP vsnprintf(char *buf, size_t bufSize, const char *format, va_list args) MRPT_NO_THROWS;
00211
00215 FILE MRPTDLLIMPEXP *fopen(const char *fileName,const char *mode) MRPT_NO_THROWS;
00216
00220 FILE MRPTDLLIMPEXP *fopen(const std::string &fileName,const char *mode) MRPT_NO_THROWS;
00221
00224 int MRPTDLLIMPEXP fprintf(FILE *fil, const char *format, ...) MRPT_NO_THROWS MRPT_printf_format_check(2,3);
00225
00229 int MRPTDLLIMPEXP fscanf(FILE *fil, const char *format, ...) MRPT_NO_THROWS MRPT_scanf_format_check(2,3);
00230
00233 void MRPTDLLIMPEXP fclose(FILE *f) MRPT_NO_THROWS;
00234
00238 char MRPTDLLIMPEXP * strcat(char *dest, size_t destSize, const char *source) MRPT_NO_THROWS;
00239
00243 char MRPTDLLIMPEXP *strcpy(char *dest, size_t destSize, const char *source) MRPT_NO_THROWS;
00244
00248 int MRPTDLLIMPEXP _strcmp(const char*str1,const char*str2) MRPT_NO_THROWS;
00249
00253 int MRPTDLLIMPEXP _strcmpi(const char*str1,const char*str2) MRPT_NO_THROWS;
00254
00257 int64_t MRPTDLLIMPEXP _strtoll(const char *nptr, char **endptr, int base);
00258
00261 uint64_t MRPTDLLIMPEXP _strtoull(const char *nptr, char **endptr, int base);
00262
00263
00266 void MRPTDLLIMPEXP memcpy(
00267 void *dest,
00268 size_t destSize,
00269 const void *src,
00270 size_t copyCount ) MRPT_NO_THROWS;
00271
00275 int MRPTDLLIMPEXP getch() MRPT_NO_THROWS;
00276
00279 bool MRPTDLLIMPEXP kbhit() MRPT_NO_THROWS;
00280
00281 }
00282
00286 void MRPTDLLIMPEXP sleep( int time_ms ) MRPT_NO_THROWS;
00287
00292 char MRPTDLLIMPEXP *strtok( char *str, const char *strDelimit, char **context ) MRPT_NO_THROWS;
00293
00306 void MRPTDLLIMPEXP tokenize(
00307 const std::string &inString,
00308 const std::string &inDelimiters,
00309 std::deque<std::string> &outTokens ) MRPT_NO_THROWS;
00310
00323 void MRPTDLLIMPEXP tokenize(
00324 const std::string &inString,
00325 const std::string &inDelimiters,
00326 std::vector<std::string> &outTokens ) MRPT_NO_THROWS;
00327
00330 std::string MRPTDLLIMPEXP trim(const std::string &str);
00331
00333 bool MRPTDLLIMPEXP isNaN(float f) MRPT_NO_THROWS;
00334
00336 bool MRPTDLLIMPEXP isNaN(double f) MRPT_NO_THROWS;
00337
00339 bool MRPTDLLIMPEXP isFinite(float f) MRPT_NO_THROWS;
00340
00342 bool MRPTDLLIMPEXP isFinite(double f) MRPT_NO_THROWS;
00343
00344 #ifdef HAVE_LONG_DOUBLE
00345
00346 bool MRPTDLLIMPEXP isNaN(long double f) MRPT_NO_THROWS;
00347
00349 bool MRPTDLLIMPEXP isFinite(long double f) MRPT_NO_THROWS;
00350 #endif
00351
00354 void MRPTDLLIMPEXP pause() MRPT_NO_THROWS;
00355
00357 void MRPTDLLIMPEXP clearConsole();
00358
00363 #if defined(_MSC_VER) && (_MSC_VER>=1400)
00364
00365 # define mrpt_alloca( nBytes ) _malloca(nBytes)
00366 #elif defined(HAVE_ALLOCA)
00367
00368 # define mrpt_alloca( nBytes ) ::alloca(nBytes)
00369 #else
00370
00371 # define mrpt_alloca( nBytes ) ::malloc( nBytes );
00372 #endif
00373
00378 #if defined(_MSC_VER) && (_MSC_VER>=1400)
00379
00380 # define mrpt_alloca_free( mem_block ) _freea(mem_block)
00381 #elif defined(HAVE_ALLOCA)
00382
00383 # define mrpt_alloca_free( mem_block )
00384 #else
00385
00386 # define mrpt_alloca_free( mem_block ) free(mem_block)
00387 #endif
00388
00389
00396 typedef uint64_t TTimeStamp;
00397
00401 struct TTimeParts
00402 {
00403 uint16_t year;
00404 uint8_t month;
00405 uint8_t day;
00406 uint8_t hour;
00407 uint8_t minute;
00408 double second;
00409 uint8_t day_of_week;
00410 int daylight_saving;
00411 };
00412
00416 mrpt::system::TTimeStamp MRPTDLLIMPEXP buildTimestampFromParts( const mrpt::system::TTimeParts &p );
00417
00421 mrpt::system::TTimeStamp MRPTDLLIMPEXP buildTimestampFromPartsLocalTime( const mrpt::system::TTimeParts &p );
00422
00426 void MRPTDLLIMPEXP timestampToParts( TTimeStamp t, TTimeParts &p );
00427
00431 mrpt::system::TTimeStamp MRPTDLLIMPEXP getCurrentTime( );
00432
00436 inline mrpt::system::TTimeStamp MRPTDLLIMPEXP now()
00437 {
00438 return getCurrentTime();
00439 }
00440
00444 mrpt::system::TTimeStamp MRPTDLLIMPEXP getCurrentLocalTime( );
00445
00449 mrpt::system::TTimeStamp MRPTDLLIMPEXP time_tToTimestamp( const double &t );
00450
00454 mrpt::system::TTimeStamp MRPTDLLIMPEXP time_tToTimestamp( const time_t &t );
00455
00459 double MRPTDLLIMPEXP timestampTotime_t( const mrpt::system::TTimeStamp &t );
00460
00463 double MRPTDLLIMPEXP timeDifference( const mrpt::system::TTimeStamp &t_first, const mrpt::system::TTimeStamp &t_later );
00464
00467 mrpt::system::TTimeStamp MRPTDLLIMPEXP secondsToTimestamp( const double &nSeconds );
00468
00471 std::string MRPTDLLIMPEXP formatTimeInterval( const double &timeSeconds );
00472
00476 std::string MRPTDLLIMPEXP dateTimeToString(const mrpt::system::TTimeStamp &t);
00477
00481 std::string MRPTDLLIMPEXP dateTimeLocalToString(const mrpt::system::TTimeStamp &t);
00482
00485 std::string MRPTDLLIMPEXP dateToString(const mrpt::system::TTimeStamp &t);
00486
00489 double MRPTDLLIMPEXP extractDayTimeFromTimestamp(const mrpt::system::TTimeStamp &t);
00490
00493 std::string MRPTDLLIMPEXP timeToString(const mrpt::system::TTimeStamp &t);
00494
00497 std::string MRPTDLLIMPEXP timeLocalToString(const mrpt::system::TTimeStamp &t);
00498
00504 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<float> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00505
00509 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<double> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00510
00514 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<int> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00515
00519 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<size_t> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00520
00524 bool MRPTDLLIMPEXP vectorToBinaryFile( const vector_byte &vec, const std::string &fileName );
00525
00529 bool MRPTDLLIMPEXP loadBinaryFile( vector_byte &out_data, const std::string &fileName );
00530
00533 unsigned long MRPTDLLIMPEXP getMemoryUsage();
00534
00535
00536
00541 std::string MRPTDLLIMPEXP getTempFileName();
00542
00545 std::string MRPTDLLIMPEXP getcwd();
00546
00551 bool MRPTDLLIMPEXP createDirectory( const std::string &dirName );
00552
00557 bool MRPTDLLIMPEXP deleteFile( const std::string &fileName );
00558
00562 void MRPTDLLIMPEXP deleteFiles(const std::string &s);
00563
00567 bool MRPTDLLIMPEXP renameFile( const std::string &oldFileName, const std::string &newFileName, std::string *error_msg=NULL );
00568
00572 void MRPTDLLIMPEXP deleteFilesInDirectory(const std::string &s);
00573
00578 std::string MRPTDLLIMPEXP extractFileName(const std::string& filePath);
00579
00586 std::string MRPTDLLIMPEXP extractFileExtension(const std::string &filePath, bool ignore_gz = false );
00587
00592 std::string MRPTDLLIMPEXP extractFileDirectory(const std::string &filePath);
00593
00596 bool MRPTDLLIMPEXP fileExists(const std::string& fileName);
00597
00601 std::string MRPTDLLIMPEXP fileNameStripInvalidChars( const std::string &filename);
00602
00608 std::string MRPTDLLIMPEXP toUpperCase(const std::string& str);
00609
00613 std::string MRPTDLLIMPEXP toLowerCase(const std::string& str);
00614
00618 std::string MRPTDLLIMPEXP upperCase(const std::string& str);
00619
00623 std::string MRPTDLLIMPEXP lowerCase(const std::string& str);
00624
00625
00628 std::string MRPTDLLIMPEXP MRPT_getCompilationDate();
00629
00632 std::string MRPTDLLIMPEXP MRPT_getVersion();
00633
00636 void MRPTDLLIMPEXP registerFatalExceptionHandlers();
00637
00641 void MRPTDLLIMPEXP decodeUTF8( const std::string &strUTF8, vector_word &out_uniStr );
00642
00646 void MRPTDLLIMPEXP encodeUTF8( const vector_word &input, std::string &output );
00647
00648 }
00649
00650 }
00651
00652 #endif