#ifndef OPENANN_INCLUDED
#define OPENANN_INCLUDED

#ifdef PARALLEL_CORES
#include <omp.h>
#endif

namespace OpenANN
{

/**
 * @class OpenANNLibraryInfo
 *
 * Provides information about the OpenANN library.
 */
class OpenANNLibraryInfo
{
public:
  //! OpenANN Version.
  static const char* VERSION;
  //! URL of OpenANN website.
  static const char* URL;
  //! Short description of the library.
  static const char* DESCRIPTION;
  //! Exact time of compilation.
  static const char* COMPILATION_TIME;
  //! Used compiler flags.
  static const char* COMPILER_FLAGS;

  //! Print all information on stdout.
  static void print();
};

/**
 * Enable all cores for OpenMP.
 *
 * The number of available cores must be specified during the build of %OpenANN.
 * It can be set with the CMake variable PARALLEL_CORES. Note that you should
 * use only the maximum number of available physical cores. Virtual cores will
 * usually slow matrix operations down.
 */
void useAllCores();

} // namespace OpenANN

#include <OpenANN/Net.h>
#include <OpenANN/Convenience.h>
#include <OpenANN/optimization/StoppingCriteria.h>

#endif // OPENANN_INCLUDED
