annotate system/System.h @ 188:56c167f3648a

compilation under linux: resolve bug with std::min
author lbajardsilogic
date Tue, 27 Nov 2007 13:11:19 +0000
parents fc9323a41f5a
children 61681a2bc1e6
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam and QMUL.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #ifndef _SYSTEM_H_
lbajardsilogic@0 17 #define _SYSTEM_H_
lbajardsilogic@0 18
lbajardsilogic@188 19 //#include <cmath>
lbajardsilogic@188 20
lbajardsilogic@0 21 #ifdef _WIN32
lbajardsilogic@0 22
lbajardsilogic@0 23 #include <windows.h>
lbajardsilogic@0 24 #include <malloc.h>
lbajardsilogic@0 25 #include <process.h>
lbajardsilogic@0 26
lbajardsilogic@0 27 #ifdef USE_VC
lbajardsilogic@0 28 #include <time.h>
lbajardsilogic@0 29 #include <io.h>
lbajardsilogic@0 30 #include <math.h>
lbajardsilogic@0 31 #include <float.h>
lbajardsilogic@0 32
lbajardsilogic@0 33 typedef int WINBOOL;
lbajardsilogic@0 34
lbajardsilogic@188 35 typedef signed char int8_t;
lbajardsilogic@188 36 typedef unsigned char uint8_t;
lbajardsilogic@188 37 typedef short int16_t;
lbajardsilogic@188 38 typedef unsigned short uint16_t;
lbajardsilogic@0 39 typedef long ssize_t;
lbajardsilogic@0 40 typedef unsigned short mode_t;
lbajardsilogic@0 41
lbajardsilogic@188 42 #define _S_IWUSR _S_IWRITE
lbajardsilogic@188 43 #define _S_IRUSR _S_IREAD
lbajardsilogic@188 44 #define S_IRUSR _S_IRUSR
lbajardsilogic@0 45 #define S_IWUSR _S_IWUSR
lbajardsilogic@0 46
lbajardsilogic@188 47 /* If we're not using GNU C, elide __attribute__ */
lbajardsilogic@188 48 #ifndef __GNUC__
lbajardsilogic@188 49 # define __attribute__(x) /*NOTHING*/
lbajardsilogic@0 50 #endif
lbajardsilogic@0 51
lbajardsilogic@188 52 /* Win32 doesn't seem to have these functions.
lbajardsilogic@188 53 ** Therefore implement inline versions of these functions here.
lbajardsilogic@188 54 */
lbajardsilogic@188 55
lbajardsilogic@188 56 __inline long int lrint (double flt)
lbajardsilogic@188 57 { int intgr;
lbajardsilogic@188 58 _asm
lbajardsilogic@188 59 { fld flt
lbajardsilogic@188 60 fistp intgr
lbajardsilogic@188 61 } ;
lbajardsilogic@188 62
lbajardsilogic@188 63 return intgr ;
lbajardsilogic@188 64 }
lbajardsilogic@188 65
lbajardsilogic@188 66 __inline long int lrintf (float flt)
lbajardsilogic@188 67 { int intgr;
lbajardsilogic@188 68 _asm
lbajardsilogic@188 69 { fld flt
lbajardsilogic@188 70 fistp intgr
lbajardsilogic@188 71 } ;
lbajardsilogic@188 72
lbajardsilogic@188 73 return intgr ;
lbajardsilogic@0 74 }
lbajardsilogic@0 75
lbajardsilogic@188 76 __inline double nearbyint(double x)
lbajardsilogic@188 77 {
lbajardsilogic@188 78 unsigned int tmpMSW1;
lbajardsilogic@188 79 unsigned int tmpMSW2;
lbajardsilogic@188 80 __asm {
lbajardsilogic@188 81 // get current state
lbajardsilogic@188 82 fnstcw tmpMSW1
lbajardsilogic@188 83 }
lbajardsilogic@188 84 // set bit 5
lbajardsilogic@188 85 tmpMSW2 = tmpMSW1 | 0x00000020;
lbajardsilogic@188 86 __asm {
lbajardsilogic@188 87 // and load
lbajardsilogic@188 88 fldcw tmpMSW2
lbajardsilogic@188 89 // do the job
lbajardsilogic@188 90 fld x
lbajardsilogic@188 91 frndint
lbajardsilogic@188 92 // clear exception
lbajardsilogic@188 93 fclex
lbajardsilogic@188 94 // restore old state
lbajardsilogic@188 95 fldcw tmpMSW1
lbajardsilogic@188 96 }
lbajardsilogic@188 97 }
lbajardsilogic@188 98
lbajardsilogic@188 99 #ifndef isinf
lbajardsilogic@188 100 #define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \
lbajardsilogic@188 101 : ((_fpclass(d) == _FPCLASS_NINF) ? -1 : 0))
lbajardsilogic@188 102 #endif
lbajardsilogic@188 103 /* _isnan(x) returns nonzero if (x == NaN) and zero otherwise. */
lbajardsilogic@188 104 #ifndef isnan
lbajardsilogic@188 105 #define isnan(d) (_isnan(d))
lbajardsilogic@188 106 #endif
lbajardsilogic@188 107
lbajardsilogic@188 108 #define ftruncate _chsize
lbajardsilogic@0 109
lbajardsilogic@0 110 #else /*USE_VC*/
lbajardsilogic@0 111 #include <sys/time.h>
lbajardsilogic@0 112 #include <stdint.h>
lbajardsilogic@0 113 #endif /*USE_VC*/
lbajardsilogic@0 114
lbajardsilogic@0 115 #define MLOCK(a,b) 1
lbajardsilogic@0 116 #define MUNLOCK(a,b) 1
lbajardsilogic@0 117 #define MUNLOCK_SAMPLEBLOCK(a) 1
lbajardsilogic@0 118
lbajardsilogic@0 119 #define DLOPEN(a,b) LoadLibrary((a).toStdWString().c_str())
lbajardsilogic@0 120 #define DLSYM(a,b) GetProcAddress((HINSTANCE)(a),(b))
lbajardsilogic@0 121 #define DLCLOSE(a) (!FreeLibrary((HINSTANCE)(a)))
lbajardsilogic@0 122 #define DLERROR() ""
lbajardsilogic@0 123
lbajardsilogic@0 124 #define PLUGIN_GLOB "*.dll"
lbajardsilogic@0 125 #define PATH_SEPARATOR ';'
lbajardsilogic@0 126
lbajardsilogic@0 127 // The default Vamp plugin path is obtained from a function in the
lbajardsilogic@0 128 // Vamp SDK (Vamp::PluginHostAdapter::getPluginPath).
lbajardsilogic@0 129
lbajardsilogic@0 130 // At the time of writing, at least, the vast majority of LADSPA
lbajardsilogic@0 131 // plugins on Windows hosts will have been put there for use in
lbajardsilogic@0 132 // Audacity. It's a bit of a shame that Audacity uses its own Program
lbajardsilogic@0 133 // Files directory for plugins that any host may want to use... maybe
lbajardsilogic@0 134 // they were just following the example of VSTs, which are usually
lbajardsilogic@0 135 // found in Steinberg's Program Files directory. Anyway, we can
lbajardsilogic@0 136 // greatly increase our chances of picking up some LADSPA plugins by
lbajardsilogic@0 137 // default if we include the Audacity plugin location as well as an
lbajardsilogic@0 138 // (imho) more sensible place.
lbajardsilogic@0 139
lbajardsilogic@0 140 #define DEFAULT_LADSPA_PATH "%ProgramFiles%\\LADSPA Plugins;%ProgramFiles%\\Audacity\\Plug-Ins"
lbajardsilogic@0 141 #define DEFAULT_DSSI_PATH "%ProgramFiles%\\DSSI Plugins"
lbajardsilogic@0 142
lbajardsilogic@0 143 #define getpid _getpid
lbajardsilogic@0 144
lbajardsilogic@0 145 extern "C" {
lbajardsilogic@0 146 void usleep(unsigned long usec);
lbajardsilogic@0 147 void gettimeofday(struct timeval *p, void *tz);
lbajardsilogic@0 148 }
lbajardsilogic@0 149
lbajardsilogic@0 150 #else /* ! _WIN32 */
lbajardsilogic@0 151
lbajardsilogic@0 152 #include <sys/mman.h>
lbajardsilogic@0 153 #include <dlfcn.h>
lbajardsilogic@0 154
lbajardsilogic@0 155 #define MLOCK(a,b) ::mlock((a),(b))
lbajardsilogic@0 156 #define MUNLOCK(a,b) (::munlock((a),(b)) ? (::perror("munlock failed"), 0) : 0)
lbajardsilogic@0 157 #define MUNLOCK_SAMPLEBLOCK(a) do { if (!(a).empty()) { const float &b = *(a).begin(); MUNLOCK(&b, (a).capacity() * sizeof(float)); } } while(0);
lbajardsilogic@0 158 //#define MLOCK(a,b) 1
lbajardsilogic@0 159 //#define MUNLOCK(a,b) 1
lbajardsilogic@0 160 //#define MUNLOCK_SAMPLEBLOCK(a) 1
lbajardsilogic@0 161
lbajardsilogic@0 162 #define DLOPEN(a,b) dlopen((a).toStdString().c_str(),(b))
lbajardsilogic@0 163 #define DLSYM(a,b) dlsym((a),(b))
lbajardsilogic@0 164 #define DLCLOSE(a) dlclose((a))
lbajardsilogic@0 165 #define DLERROR() dlerror()
lbajardsilogic@0 166
lbajardsilogic@0 167 #ifdef __APPLE__
lbajardsilogic@0 168
lbajardsilogic@0 169 #define PLUGIN_GLOB "*.dylib *.so"
lbajardsilogic@0 170 #define PATH_SEPARATOR ':'
lbajardsilogic@0 171
lbajardsilogic@0 172 #define DEFAULT_LADSPA_PATH "$HOME/Library/Audio/Plug-Ins/LADSPA:/Library/Audio/Plug-Ins/LADSPA"
lbajardsilogic@0 173 #define DEFAULT_DSSI_PATH "$HOME/Library/Audio/Plug-Ins/DSSI:/Library/Audio/Plug-Ins/DSSI"
lbajardsilogic@0 174
lbajardsilogic@0 175 #else
lbajardsilogic@0 176
lbajardsilogic@0 177 #define PLUGIN_GLOB "*.so"
lbajardsilogic@0 178 #define PATH_SEPARATOR ':'
lbajardsilogic@0 179
lbajardsilogic@0 180 #define DEFAULT_LADSPA_PATH "$HOME/ladspa:$HOME/.ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"
lbajardsilogic@0 181 #define DEFAULT_DSSI_PATH "$HOME/dssi:$HOME/.dssi:/usr/local/lib/dssi:/usr/lib/dssi"
lbajardsilogic@0 182
lbajardsilogic@0 183 #endif /* __APPLE__ */
lbajardsilogic@0 184
lbajardsilogic@0 185 #endif /* ! _WIN32 */
lbajardsilogic@0 186
lbajardsilogic@188 187 #include <cmath>
lbajardsilogic@188 188 #include <algorithm>
lbajardsilogic@188 189
lbajardsilogic@188 190 #ifdef __GNUC__
lbajardsilogic@188 191
lbajardsilogic@188 192 #ifndef MIN
lbajardsilogic@188 193 #define MIN(x, y) std::min(x, y)
lbajardsilogic@0 194 #endif
lbajardsilogic@188 195
lbajardsilogic@188 196 #ifndef MAX
lbajardsilogic@188 197 #define MAX(x, y) std::max(x, y)
lbajardsilogic@0 198 #endif
lbajardsilogic@188 199
lbajardsilogic@188 200 #ifndef isnan
lbajardsilogic@188 201 #define isnan(x) std::isnan((x))
lbajardsilogic@188 202 #endif
lbajardsilogic@188 203
lbajardsilogic@188 204 #ifndef isinf
lbajardsilogic@188 205 #define isinf(x) std::isinf((x))
lbajardsilogic@0 206 #endif
lbajardsilogic@0 207
lbajardsilogic@0 208 #endif /* __GNUC__ */
lbajardsilogic@0 209
lbajardsilogic@0 210 enum ProcessStatus { ProcessRunning, ProcessNotRunning, UnknownProcessStatus };
lbajardsilogic@0 211 extern ProcessStatus GetProcessStatus(int pid);
lbajardsilogic@0 212
lbajardsilogic@0 213 // Return a vague approximation to the number of free megabytes of real memory.
lbajardsilogic@0 214 // Return -1 if unknown.
lbajardsilogic@0 215 extern void GetRealMemoryMBAvailable(int &available, int &total);
lbajardsilogic@0 216
lbajardsilogic@0 217 // Return a vague approximation to the number of free megabytes of disc space
lbajardsilogic@0 218 // on the partition containing the given path. Return -1 if unknown.
lbajardsilogic@0 219 extern int GetDiscSpaceMBAvailable(const char *path);
lbajardsilogic@0 220
lbajardsilogic@188 221 //#include <cmath>
lbajardsilogic@0 222
lbajardsilogic@0 223 extern double mod(double x, double y);
lbajardsilogic@0 224 extern float modf(float x, float y);
lbajardsilogic@0 225
lbajardsilogic@0 226 extern double princarg(double a);
lbajardsilogic@0 227 extern float princargf(float a);
lbajardsilogic@0 228
lbajardsilogic@0 229 #endif /* ! _SYSTEM_H_ */
lbajardsilogic@0 230
lbajardsilogic@0 231