Utility.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIX_UTILITY_H
00023 #define FIX_UTILITY_H
00024
00025 #ifdef _MSC_VER
00026 #pragma warning( disable : 4503 4355 4786 4290 )
00027 #endif
00028
00029 #ifndef _MSC_VER
00030 #include "Allocator.h"
00031 #endif
00032
00033 #ifdef HAVE_STLPORT
00034 #define ALLOCATOR std::allocator
00035 #elif ENABLE_DEBUG_ALLOCATOR
00036 #include <ext/debug_allocator.h>
00037 #define ALLOCATOR __gnu_cxx::debug_allocator
00038 #elif ENABLE_NEW_ALLOCATOR
00039 #include <ext/new_allocator.h>
00040 #define ALLOCATOR __gnu_cxx::new_allocator
00041 #elif HAVE_BOOST_FAST_POOL_ALLOCATOR
00042 #include <boost/pool/pool_alloc.hpp>
00043 #define ALLOCATOR boost::fast_pool_allocator
00044 #elif HAVE_MT_ALLOCATOR
00045 #include <ext/mt_allocator.h>
00046 #define ALLOCATOR __gnu_cxx::__mt_alloc
00047 #elif HAVE_BOOST_POOL_ALLOCATOR
00048 #include <boost/pool/pool_alloc.hpp>
00049 #define ALLOCATOR boost::pool_allocator
00050 #elif HAVE_POOL_ALLOCATOR
00051 #include <ext/pool_allocator.h>
00052 #define ALLOCATOR __gnu_cxx::__pool_alloc
00053 #elif HAVE_BITMAP_ALLOCATOR
00054 #include <ext/bitmap_allocator.h>
00055 #define ALLOCATOR __gnu_cxx::bitmap_allocator
00056 #else
00057 #define ALLOCATOR std::allocator
00058 #endif
00059
00060 #ifdef _MSC_VER
00062 #include <Winsock2.h>
00063 #include <process.h>
00064 #include <direct.h>
00065 #include <time.h>
00066 typedef int socklen_t;
00068 #else
00070 #include <sys/types.h>
00071 #include <sys/socket.h>
00072 #include <sys/ioctl.h>
00073 #include <sys/time.h>
00074 #include <sys/stat.h>
00075 #include <netinet/in.h>
00076 #include <netinet/tcp.h>
00077 #include <arpa/inet.h>
00078 #include <netdb.h>
00079 #include <fcntl.h>
00080 #include <unistd.h>
00081 #include <pthread.h>
00082 #include <signal.h>
00083 #include <errno.h>
00084 #include <time.h>
00085 #include <stdlib.h>
00087 #endif
00088
00089 #include <string>
00090 #include <cstring>
00091 #include <cctype>
00092 #include <ctime>
00093 #include <cstdio>
00094
00095 namespace FIX
00096 {
00097 void string_replace( const std::string& oldValue,
00098 const std::string& newValue,
00099 std::string& value );
00100
00101 std::string string_toLower( const std::string& value );
00102 std::string string_toUpper( const std::string& value );
00103 std::string string_strip( const std::string& value );
00104
00105 void socket_init();
00106 void socket_term();
00107 int socket_createAcceptor( int port, bool reuse = false );
00108 int socket_createConnector();
00109 int socket_connect( int s, const char* address, int port );
00110 int socket_accept( int s );
00111 int socket_send( int s, const char* msg, int length );
00112 void socket_close( int s );
00113 bool socket_fionread( int s, int& bytes );
00114 bool socket_disconnected( int s );
00115 int socket_setsockopt( int s, int opt );
00116 int socket_setsockopt( int s, int opt, int optval );
00117 int socket_getsockopt( int s, int opt, int& optval );
00118 #ifndef _MSC_VER
00119 int socket_fcntl( int s, int opt, int arg );
00120 int socket_getfcntlflag( int s, int arg );
00121 int socket_setfcntlflag( int s, int arg );
00122 #endif
00123 void socket_setnonblock( int s );
00124 bool socket_isValid( int socket );
00125 #ifndef _MSC_VER
00126 bool socket_isBad( int s );
00127 #endif
00128 void socket_invalidate( int& socket );
00129 short socket_hostport( int socket );
00130 const char* socket_hostname( int socket );
00131 const char* socket_hostname( const char* name );
00132 const char* socket_peername( int socket );
00133 std::pair<int, int> socket_createpair();
00134
00135 tm time_gmtime( const time_t* t );
00136 tm time_localtime( const time_t* t );
00137
00138 #ifdef _MSC_VER
00139 typedef unsigned int (_stdcall THREAD_START_ROUTINE)(void *);
00140 #define THREAD_PROC unsigned int _stdcall
00141 #else
00142 extern "C" { typedef void * (THREAD_START_ROUTINE)(void *); }
00143 #define THREAD_PROC void *
00144 #endif
00145
00146 #ifdef _MSC_VER
00147 typedef unsigned thread_id;
00148 #else
00149 typedef pthread_t thread_id;
00150 #endif
00151
00152 bool thread_spawn( THREAD_START_ROUTINE func, void* var, thread_id& thread );
00153 bool thread_spawn( THREAD_START_ROUTINE func, void* var );
00154 void thread_join( thread_id thread );
00155 void thread_detach( thread_id thread );
00156 thread_id thread_self();
00157
00158 void process_sleep( double s );
00159
00160 std::string file_separator();
00161 void file_mkdir( const char* path );
00162 FILE* file_fopen( const char* path, const char* mode );
00163 void file_fclose( FILE* file );
00164 bool file_exists( const char* path );
00165 void file_unlink( const char* path );
00166 int file_rename( const char* oldpath, const char* newpath );
00167 std::string file_appendpath( const std::string& path, const std::string& file );
00168 }
00169
00170 #if( _MSC_VER >= 1400 )
00171 #define HAVE_FSCANF_S 1
00172 #define FILE_FSCANF fscanf_s
00173 #else
00174 #define FILE_FSCANF fscanf
00175 #endif
00176
00177 #if( _MSC_VER >= 1400 )
00178 #define HAVE_SPRINTF_S 1
00179 #define STRING_SPRINTF sprintf_s
00180 #else
00181 #define STRING_SPRINTF sprintf
00182 #endif
00183
00184 #if (!defined(_MSC_VER) || (_MSC_VER >= 1300)) && !defined(HAVE_STLPORT)
00185 using std::abort;
00186 using std::sprintf;
00187 using std::atoi;
00188 using std::atol;
00189 using std::atof;
00190 using std::isdigit;
00191 using std::strcmp;
00192 using std::strftime;
00193 using std::strlen;
00194 using std::abs;
00195 using std::labs;
00196 using std::memcpy;
00197 using std::memset;
00198 using std::exit;
00199 using std::strtod;
00200 using std::strtol;
00201 using std::strerror;
00202 #endif
00203
00204 #endif