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
00334 bool MRPTDLLIMPEXP isNaN(float f) MRPT_NO_THROWS;
00335
00338 bool MRPTDLLIMPEXP isNaN(double f) MRPT_NO_THROWS;
00339
00342 bool MRPTDLLIMPEXP isFinite(float f) MRPT_NO_THROWS;
00343
00346 bool MRPTDLLIMPEXP isFinite(double f) MRPT_NO_THROWS;
00347
00348
00351 void MRPTDLLIMPEXP pause() MRPT_NO_THROWS;
00352
00354 void MRPTDLLIMPEXP clearConsole();
00355
00357 std::string MRPTDLLIMPEXP getTempFileName();
00358
00361 std::string MRPTDLLIMPEXP getcwd();
00362
00367 #if defined(_MSC_VER) && (_MSC_VER>=1400)
00368
00369 # define mrpt_alloca( nBytes ) _malloca(nBytes)
00370 #elif HAVE_ALLOCA
00371
00372 # define mrpt_alloca( nBytes ) ::alloca(nBytes)
00373 #else
00374
00375 # define mrpt_alloca( nBytes ) ::malloc( nBytes );
00376 #endif
00377
00382 #if defined(_MSC_VER) && (_MSC_VER>=1400)
00383
00384 # define mrpt_alloca_free( mem_block ) _freea(mem_block)
00385 #elif defined(HAVE_ALLOCA)
00386
00387 # define mrpt_alloca_free( mem_block )
00388 #else
00389
00390 # define mrpt_alloca_free( mem_block ) free(mem_block)
00391 #endif
00392
00397 std::string MRPTDLLIMPEXP extractFileName(const std::string& filePath);
00398
00405 std::string MRPTDLLIMPEXP extractFileExtension(const std::string &filePath, bool ignore_gz = false );
00406
00411 std::string MRPTDLLIMPEXP extractFileDirectory(const std::string &filePath);
00412
00415 bool MRPTDLLIMPEXP fileExists(const std::string& fileName);
00416
00417
00424 typedef uint64_t TTimeStamp;
00425
00429 struct TTimeParts
00430 {
00431 uint16_t year;
00432 uint8_t month;
00433 uint8_t day;
00434 uint8_t hour;
00435 uint8_t minute;
00436 double second;
00437 uint8_t day_of_week;
00438 int daylight_saving;
00439 };
00440
00444 mrpt::system::TTimeStamp MRPTDLLIMPEXP buildTimestampFromParts( const mrpt::system::TTimeParts &p );
00445
00449 mrpt::system::TTimeStamp MRPTDLLIMPEXP buildTimestampFromPartsLocalTime( const mrpt::system::TTimeParts &p );
00450
00454 void MRPTDLLIMPEXP timestampToParts( TTimeStamp t, TTimeParts &p );
00455
00459 mrpt::system::TTimeStamp MRPTDLLIMPEXP getCurrentTime( );
00460
00464 inline mrpt::system::TTimeStamp MRPTDLLIMPEXP now()
00465 {
00466 return getCurrentTime();
00467 }
00468
00472 mrpt::system::TTimeStamp MRPTDLLIMPEXP getCurrentLocalTime( );
00473
00477 mrpt::system::TTimeStamp MRPTDLLIMPEXP time_tToTimestamp( const double &t );
00478
00482 mrpt::system::TTimeStamp MRPTDLLIMPEXP time_tToTimestamp( const time_t &t );
00483
00487 double MRPTDLLIMPEXP timestampTotime_t( const mrpt::system::TTimeStamp &t );
00488
00491 double MRPTDLLIMPEXP timeDifference( const mrpt::system::TTimeStamp &t_first, const mrpt::system::TTimeStamp &t_later );
00492
00495 mrpt::system::TTimeStamp MRPTDLLIMPEXP secondsToTimestamp( const double &nSeconds );
00496
00499 std::string MRPTDLLIMPEXP formatTimeInterval( const double &timeSeconds );
00500
00504 std::string MRPTDLLIMPEXP dateTimeToString(const mrpt::system::TTimeStamp &t);
00505
00509 std::string MRPTDLLIMPEXP dateTimeLocalToString(const mrpt::system::TTimeStamp &t);
00510
00513 std::string MRPTDLLIMPEXP dateToString(const mrpt::system::TTimeStamp &t);
00514
00517 double MRPTDLLIMPEXP extractDayTimeFromTimestamp(const mrpt::system::TTimeStamp &t);
00518
00521 std::string MRPTDLLIMPEXP timeToString(const mrpt::system::TTimeStamp &t);
00522
00525 std::string MRPTDLLIMPEXP timeLocalToString(const mrpt::system::TTimeStamp &t);
00526
00532 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<float> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00533
00537 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<double> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00538
00542 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<int> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00543
00547 bool MRPTDLLIMPEXP vectorToTextFile( const std::vector<size_t> &vec, const std::string &fileName, bool append = false, bool byRows=false );
00548
00552 bool MRPTDLLIMPEXP vectorToBinaryFile( const vector_byte &vec, const std::string &fileName );
00553
00557 bool MRPTDLLIMPEXP loadBinaryFile( vector_byte &out_data, const std::string &fileName );
00558
00561 unsigned long MRPTDLLIMPEXP getMemoryUsage();
00562
00567 bool MRPTDLLIMPEXP createDirectory( const std::string &dirName );
00568
00573 bool MRPTDLLIMPEXP deleteFile( const std::string &fileName );
00574
00578 void MRPTDLLIMPEXP deleteFiles(const std::string &s);
00579
00583 void MRPTDLLIMPEXP deleteFilesInDirectory(const std::string &s);
00584
00588 std::string MRPTDLLIMPEXP toUpperCase(const std::string& str);
00589
00593 std::string MRPTDLLIMPEXP toLowerCase(const std::string& str);
00594
00598 std::string MRPTDLLIMPEXP upperCase(const std::string& str);
00599
00603 std::string MRPTDLLIMPEXP lowerCase(const std::string& str);
00604
00605
00608 std::string MRPTDLLIMPEXP MRPT_getCompilationDate();
00609
00612 std::string MRPTDLLIMPEXP MRPT_getVersion();
00613
00616 void MRPTDLLIMPEXP registerFatalExceptionHandlers();
00617
00621 void MRPTDLLIMPEXP decodeUTF8( const std::string &strUTF8, vector_word &out_uniStr );
00622
00626 void MRPTDLLIMPEXP encodeUTF8( const vector_word &input, std::string &output );
00627
00631 std::string MRPTDLLIMPEXP fileNameStripInvalidChars( const std::string &filename);
00632
00633 }
00634
00635 }
00636
00637 #endif