// (C) Copyright Christian Bienia 2007
//  Use, modification and distribution are subject to the
//  Boost Software License, Version 1.0.
//
//  file : Barrier.h
//  author : Christian Bienia - cbienia@cs.princeton.edu
//  description : A barrier

#ifndef BARRIER_H
#define BARRIER_H

#if defined(HAVE_CONFIG_H)
# include "config.h"
#endif

#pragma warning( disable : 4290)		//disable Microsoft compiler exception warning

#if defined(HAVE_LIBPTHREAD)
# include <pthread.h>
#else
# include "Mutex.h"
# include "Condition.h"
#endif //HAVE_LIBPTHREAD

#include <exception>


namespace threads {

//General barrier exception
class BarrierException: public std::exception {
  public:
    virtual const char *what() const noexcept {return "Unspecified barrier error";}
};

//Barrier initialization error
class BarrierInitException: public BarrierException {
  public:
    virtual const char *what() const noexcept {return "Unspecified error while initializing barrier";}
};

//Barrier destruction error
class BarrierDestroyException: public BarrierException {
  public:
    virtual const char *what() const noexcept {return "Unspecified error while destroying barrier";}
};

//Resources exhausted
class BarrierResourceException: public BarrierException {
  public:
    virtual const char *what() const noexcept {return "Insufficient resources";}
};

//Unknown error
class BarrierUnknownException: public BarrierException {
  public:
    virtual const char *what() const noexcept {return "Unknown error";}
};

//A standard barrier
class Barrier {
  public:
    Barrier(int);
    ~Barrier();

    //Wait at a barrier, will return true for exactly one thread, false for all other threads
    bool Wait();
    //Get number of threads required to enter the barrier
    const int nThreads() const;

  private:
#if defined(HAVE_LIBPTHREAD)
    pthread_barrier_t b;
#else
    Mutex *M;
    Condition *CSleep;
    Condition *CReset;
    int countSleep;
    int countReset;
#endif //HAVE_LIBPTHREAD
    int n;
};

} //namespace threads

#endif //BARRIER_H
