00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef GENERIC_H_
00012 #define GENERIC_H_
00013
00014 #include <iostream>
00015 #include <fstream>
00016 #include <vector>
00017 #include <string>
00018 #include <map>
00019 #include <set>
00020 #include <ctime>
00021 #include <sys/time.h>
00022 #include <assert.h>
00023 #include <cstdlib>
00024 #include <climits>
00025 #include <sstream>
00026 using namespace std;
00027
00028 typedef unsigned long NaturalNumber;
00029 typedef double MyNT;
00030
00031 namespace myNamespace
00032 {
00046 void getIndexedOutFile(ofstream &file, string filenamePrefix, NaturalNumber index);
00047
00049 void getIndexedInFile(ifstream &file, string filenamePrefix, NaturalNumber index);
00050
00051
00053 template <typename T>
00054 inline NaturalNumber round(T x) { x = x+0.5; return (-(NaturalNumber)(x < 0)) + (NaturalNumber)x;}
00055
00057 template <class X>
00058 string getString(X val)
00059 {
00060 std::stringstream out;
00061 out << val;
00062 return out.str();
00063 }
00064
00065
00066 double getCPUTime();
00067
00068
00069
00070
00071 void seed();
00072
00077
00078 void seed(int p);
00079
00080
00081
00082
00083
00084 double unifRand();
00085
00086
00087
00088
00089
00090
00091
00092 double unifRand(double a, double b);
00093
00094
00095
00096
00097
00098
00099 long unifRand(long n);
00100
00108 template < typename setX>
00109 void getRandomItems(setX &random, setX &items, NaturalNumber size)
00110 {
00111 assert(size <= items.size());
00112
00113 vector< typename setX::iterator > index;
00114 for(typename setX::iterator it = items.begin(); it != items.end(); it ++)
00115 index.push_back(it);
00116
00117 random_shuffle(index.begin(), index.end());
00118
00119 for(NaturalNumber i = 0; i < size; i ++)
00120 random.insert(*index[i]);
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 }
00148
00149
00150
00151
00152
00153
00154
00157 template <typename setX>
00158 void eraseSubset(setX &originalSet, setX &subset)
00159 {
00160 typename setX::iterator it, sit = originalSet.begin();
00161 for(it = subset.begin(); it != subset.end(); it ++)
00162 {
00163 sit = originalSet.find(*it);
00164
00165 assert(sit != originalSet.end());
00166
00167 originalSet.erase(sit);
00168 }
00169 }
00170
00171
00172
00173 }
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00194
00195
00196
00197
00198
00199
00200
00201 #endif
00202