src/benchmark/bench_tools.h
changeset 711 b6c56353832c
child 718 75d36edc6bc4
     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