00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __LSHKIT_COMMON__
00021 #define __LSHKIT_COMMON__
00022
00029 #include <cmath>
00030 #include <limits>
00031 #include <vector>
00032 #include <stdexcept>
00033 #include <boost/foreach.hpp>
00034 #include <boost/random.hpp>
00035
00037
00040
00041
00042 #ifdef CONCEPT_CHECK
00043 #include <lshkit/concept.h>
00044 #else
00045 #define BOOST_CONCEPT_ASSERT(A)
00046 #endif
00047
00053 #ifndef panic
00054 #if defined(WIN32)
00055 #define panic(_fmt, ...) \
00056 do { \
00057 lshkit::panic_intern("%s: %s: %d: "_fmt, \
00058 __FILE__, \
00059 __FUNCTION__, \
00060 __LINE__ , \
00061 ## __VA_ARGS__); \
00062 } while (0)
00063 #else
00064 #define panic(_fmt, _args...) \
00065 do { \
00066 lshkit::panic_intern("%s: %s: %d: "_fmt, \
00067 __FILE__, \
00068 __FUNCTION__, \
00069 __LINE__ , \
00070 ## _args); \
00071 } while (0)
00072 #endif
00073 #endif
00074
00078 #ifndef verify
00079 #define verify(_x) \
00080 do { \
00081 if (_x) { \
00082 \
00083 } else { \
00084 panic("!(%s)", #_x); \
00085 } \
00086 } while (0)
00087 #endif
00088
00089 namespace lshkit {
00090
00092 typedef boost::mt19937 DefaultRng;
00093
00094
00095
00097 typedef boost::normal_distribution<float> Gaussian;
00099 typedef boost::cauchy_distribution<float> Cauchy;
00101 typedef boost::uniform_real<float> Uniform;
00103 typedef boost::uniform_int<int> UniformInt;
00105 typedef boost::uniform_int<unsigned> UniformUnsigned;
00106
00108
00109
00110
00111 template <typename T>
00112 T min (T a, T b) { return a < b ? a : b; }
00113
00115 template <typename T>
00116 T max (T a, T b) { return a < b ? b : a; }
00117
00119 template <typename T> T sqr (const T &x) { return x * x; }
00120
00121 void panic_intern(const char *fmt, ...);
00122
00123 }
00124
00125
00126 #endif
00127