/********************************************************************************
 *
 * This file is part of the Geneva library collection. The following license
 * applies to this file:
 *
 * ------------------------------------------------------------------------------
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ------------------------------------------------------------------------------
 *
 * Note that other files in the Geneva library collection may use a different
 * license. Please see the licensing information in each file.
 *
 ********************************************************************************
 *
 * Geneva was started by Dr. Rüdiger Berlich and was later maintained together
 * with Dr. Ariel Garcia under the auspices of Gemfony scientific. For further
 * information on Gemfony scientific, see http://www.gemfomy.eu .
 *
 * The majority of files in Geneva was released under the Apache license v2.0
 * in February 2020.
 *
 * See the NOTICE file in the top-level directory of the Geneva library
 * collection for a list of contributors and copyright information.
 *
 ********************************************************************************/

#pragma once

// Global checks, defines and includes needed for all of Geneva
#include "common/GGlobalDefines.hpp"

// Standard headers go here
#include <string>
#include <istream>
#include <ostream>

// Boost headers go here
#include <boost/cast.hpp>

// Geneva headers go here
#include "common/GCommonEnums.hpp"

namespace Gem {
namespace Hap {

/******************************************************************************/
// For bi_normal_distribution

const double DEF_BINORM_MEAN=0.;
const double DEF_BINORM_SIGMA1=0.1;
const double DEF_BINORM_SIGMA2=0.1;
const double DEF_BINORM_DISTANCE=0.5;

/******************************************************************************/
/**
 * Allowed specializations of Gem::Hap::GRandomT<T>
 */
enum class RANDFLAVOURS : Gem::Common::ENUMBASETYPE {
	RANDOMPROXY = 0 // random numbers are taken from the factory
	, RANDOMLOCAL = 1 // random numbers are produced locally, using a seed taken from the seed manager or provided to the constructor
};

/******************************************************************************/

/** @brief Puts a Gem::Hap::RANDFLAVOURS into a stream. Needed also for boost::lexical_cast<> */
G_API_HAP std::ostream &operator<<(std::ostream &, const Gem::Hap::RANDFLAVOURS &);
/** @brief Reads a Gem::Hap::RANDFLAVOURS item from a stream. Needed also for boost::lexical_cast<> */
G_API_HAP std::istream &operator>>(std::istream &, Gem::Hap::RANDFLAVOURS &);

/******************************************************************************/

} /* namespace Hap */
} /* namespace Gem */

