module Data.RangeMin.Common (
	module Data.RangeMin.Common.Combinators,
	module Data.RangeMin.Common.Math,
	module Data.RangeMin.Common.Types,
	module Data.RangeMin.Common.Vector,
	module Data.RangeMin.Common.ST,
	module Data.RangeMin.Common.Unf,
	module Data.RangeMin.Common.Unf.Slice,
	n2Cross,
	nlognCross,
	nearNCross,
	forceBlockN2,
	forceNLogN,
	forceBlockMins) where

import Data.RangeMin.Common.Combinators
import Data.RangeMin.Common.Math
import Data.RangeMin.Common.Types
import Data.RangeMin.Common.Vector
import Data.RangeMin.Common.ST
import Data.RangeMin.Common.Unf
import Data.RangeMin.Common.Unf.Slice

n2Cross, nlognCross, nearNCross :: Int
n2Cross = 10
nlognCross = 400
nearNCross = 5000

 -- Whether or not the internal block range-mins must be done with the O(n^2) algorithm.
forceBlockN2 :: Bool
forceBlockN2 = True

 -- Whether or not the O(n) algorithms should force recursion to the O(n log n) algorithm or may allow
 -- the O(n), O(log n) algorithm.
forceNLogN :: Bool
forceNLogN = True

 -- Whether or not the O(n) algorithms must force the block-internal range min thunks.
forceBlockMins :: Bool
forceBlockMins = True