1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/src/benchmark/bench_tools.h Tue Jul 20 09:50:11 2004 +0000
1.3 @@ -0,0 +1,73 @@
1.4 +// -*- mode:C++ -*-
1.5 +#ifndef HUGO_BENCH_TEST_H
1.6 +#define HUGO_BENCH_TEST_H
1.7 +
1.8 +#include<vector>
1.9 +
1.10 +///An experimental typedef factory
1.11 +#define GRAPH_TYPEDEF_FACTORY(Graph) \
1.12 + typedef typename Graph:: Node Node;\
1.13 + typedef typename Graph:: NodeIt NodeIn;\
1.14 + typedef typename Graph:: Edge Edge;\
1.15 + typedef typename Graph:: EdgeIt EdgeIt;\
1.16 + typedef typename Graph:: InEdgeIt InEdgeIt;\
1.17 + typedef typename Graph::OutEdgeIt OutEdgeIt;
1.18 +
1.19 +#define GRAPH_TYPEDEF_FACTORY_NOTYPENAME(Graph) \
1.20 + typedef Graph:: Node Node;\
1.21 + typedef Graph:: NodeIt NodeIn;\
1.22 + typedef Graph:: Edge Edge;\
1.23 + typedef Graph:: EdgeIt EdgeIt;\
1.24 + typedef Graph:: InEdgeIt InEdgeIt;\
1.25 + typedef Graph::OutEdgeIt OutEdgeIt;
1.26 +
1.27 +
1.28 +///A primitive primtest
1.29 +bool isPrim(int n)
1.30 +{
1.31 + if(n%2) {
1.32 + for(int k=3;n/k>=k;k+=2)
1.33 + if(!(n%k)) return false;
1.34 + return true;
1.35 + }
1.36 + return false;
1.37 +}
1.38 +
1.39 +///Finds the smallest prime not less then \c n.
1.40 +int nextPrim(int n)
1.41 +{
1.42 + for(n+=!(n%2);!isPrim(n);n+=2) ;
1.43 + return n;
1.44 +}
1.45 +
1.46 +
1.47 +/// Class to generate consecutive primes
1.48 +class Primes
1.49 +{
1.50 + std::vector<int> primes;
1.51 + int n;
1.52 +
1.53 + bool isPrime(int m)
1.54 + {
1.55 + for(int i=0;m<primes[i]*primes[i];i++) if(!(m%primes[i])) return false;
1.56 + return true;
1.57 + }
1.58 +public:
1.59 + Primes() : n(1) {}
1.60 +
1.61 + int operator() ()
1.62 + {
1.63 + if(primes.size()==0) {
1.64 + primes.push_back(2);
1.65 + return 2;
1.66 + }
1.67 + else {
1.68 + do n+=2; while(!isPrime(n));
1.69 + primes.push_back(n);
1.70 + return n;
1.71 + }
1.72 + }
1.73 +};
1.74 +
1.75 +
1.76 +#endif