//$ nobt
//$ nocpp

/**
 * @file r8bconf.h
 *
 * @brief The "configuration" inclusion file you can modify.
 *
 * This is the "configuration" inclusion file for the "r8brain-free-src"
 * sample rate converter. You may redefine the macros here as you see fit.
 *
 * r8brain-free-src Copyright (c) 2013-2021 Aleksey Vaneev
 * See the "LICENSE" file for license.
 */

#ifndef R8BCONF_INCLUDED
#define R8BCONF_INCLUDED

#if !defined( R8B_IPP )
	/**
	 * Set the R8B_IPP macro definition to 1 to enable the use of Intel IPP's
	 * fast Fourier transform functions. Also uncomment and correct the IPP
	 * header inclusion macros.
	 *
	 * Do not forget to call the ippInit() function at the start of the
	 * application, before using this library's functions.
	 */

	#define R8B_IPP 0

//	#include <ippcore.h>
//	#include <ipps.h>
#endif // !defined( R8B_IPP )

#if !defined( R8BASSERT )
	/**
	 * Assertion macro used to check for certain run-time conditions. By
	 * default no action is taken if assertion fails.
	 *
	 * @param e Expression to check.
	 */

	#define R8BASSERT( e )
#endif // !defined( R8BASSERT )

#if !defined( R8BCONSOLE )
	/**
	 * Console output macro, used to output various resampler status strings,
	 * including filter design parameters, convolver parameters.
	 *
	 * @param e Expression to send to the console, usually consists of a
	 * standard "printf" format string followed by several parameters
	 * (__VA_ARGS__).
	 */

	#define R8BCONSOLE( ... )
#endif // !defined( R8BCONSOLE )

#if !defined( R8B_BASECLASS )
	/**
	 * Macro defines the name of the class from which all classes that are
	 * designed to be created on heap are derived. The default
	 * r8b::CStdClassAllocator class uses "stdlib" memory allocation
	 * functions.
	 *
	 * The classes that are best placed on stack or as class members are not
	 * derived from any class.
	 */

	#define R8B_BASECLASS :: r8b :: CStdClassAllocator
#endif // !defined( R8B_BASECLASS )

#if !defined( R8B_MEMALLOCCLASS )
	/**
	 * Macro defines the name of the class that implements raw memory
	 * allocation functions, see the r8b::CStdMemAllocator class for details.
	 */

	#define R8B_MEMALLOCCLASS :: r8b :: CStdMemAllocator
#endif // !defined( R8B_MEMALLOCCLASS )

#if !defined( R8B_FILTER_CACHE_MAX )
	/**
	 * This macro specifies the number of filters kept in the cache at most.
	 * The actual number can be higher if many different filters are in use at
	 * the same time.
	 */

	#define R8B_FILTER_CACHE_MAX 96
#endif // !defined( R8B_FILTER_CACHE_MAX )

#if !defined( R8B_FRACBANK_CACHE_MAX )
	/**
	 * This macro specifies the number of whole-number stepping fractional
	 * delay filter banks kept in the cache at most. The actual number can be
	 * higher if many different filter banks are in use at the same time. As
	 * filter banks are usually big objects, it is advisable to keep this
	 * cache size small.
	 */

	#define R8B_FRACBANK_CACHE_MAX 12
#endif // !defined( R8B_FRACBANK_CACHE_MAX )

#if !defined( R8B_FLTTEST )
	/**
	 * This macro, when equal to 1, enables fractional delay filter bank
	 * testing: in this mode the filter bank becomes a dynamic member of the
	 * CDSPFracInterpolator object instead of being a global static object.
	 */

	#define R8B_FLTTEST 0
#endif // !defined( R8B_FLTTEST )

#if !defined( R8B_FASTTIMING )
	/**
	 * This macro, when equal to 1, enables a fast interpolation sample
	 * timing technique. This technique improves interpolation performance
	 * (by around 10%) at the expense of a minor sample timing drift which is
	 * on the order of 1e-6 samples per 10 billion output samples. This
	 * setting does not apply to whole-number stepping, if it is in use, as
	 * this stepping provides zero timing error without performance impact.
	 * Also does not apply to the cases when a whole-numbered (2X, 3X, etc.)
	 * resampling is in the actual use.
	 */

	#define R8B_FASTTIMING 0
#endif // !defined( R8B_FASTTIMING )

#if !defined( R8B_EXTFFT )
	/**
	 * This macro, when equal to 1, extends length of low-pass filters' FFT
	 * block by a factor of 2, by zero-padding it. This usually improves the
	 * overall time performance of the resampler at the expense of a higher
	 * overall latency (initial processing delay). If such delay is not an
	 * issue, setting this macro to 1 is preferrable. This macro can only have
	 * a value of 0 or 1.
	 */

	#define R8B_EXTFFT 0
#endif // !defined( R8B_EXTFFT )

#if !defined( R8B_PFFFT )
	/**
	 * When defined as 1, enables PFFFT routines which are fast, but which
	 * are limited to 24-bit precision. May be a good choice for time-series
	 * interpolation, when stop-band attenuation higher than 120 dB is not
	 * required.
	 */

	#define R8B_PFFFT 0
#endif // !defined( R8B_PFFFT )

#if R8B_PFFFT
	#define R8B_FLOATFFT 1
#endif // R8B_PFFFT

#if !defined( R8B_PFFFT_DOUBLE )
	/**
	 * When defined as 1, enables PFFFT "double" routines which are fast, and
	 * which provide the highest precision.
	 */

	#define R8B_PFFFT_DOUBLE 0
#endif // !defined( R8B_PFFFT_DOUBLE )

#if !defined( R8B_FLOATFFT )
	/**
	 * The R8B_FLOATFFT definition enables double-to-float buffer conversions
	 * for FFT operations, for algorithms that work with "float" values. This
	 * macro should not be changed from the default "0" here.
	 */

	#define R8B_FLOATFFT 0
#endif // !defined( R8B_FLOATFFT )

#endif // R8BCONF_INCLUDED