hsc3-server-0.6.0: SuperCollider server resource management and synchronization.

Safe HaskellSafe-Inferred

Sound.SC3.Server.Allocator.Range

Contents

Synopsis

Documentation

data Range a Source

Open ended interval [begin, end).

Instances

Eq a => Eq (Range a) 
Show a => Show (Range a) 

range :: Ord a => a -> a -> Range aSource

Construct a range from a lower bound (included) and an upper bound (excluded).

prop> (r :: Range Int) -> begin r == end r

sized :: Num a => Int -> a -> Range aSource

Construct a range from a size and a lower bound.

>>> sized 20 10
Range 10 30

empty :: Num a => a -> Range aSource

The empty range starting at some value.

>>> empty 10
Range 10 10

null (empty 10) True

size (empty 10) 0

begin :: Range a -> aSource

end :: Range a -> aSource

last :: Enum a => Range a -> aSource

The last value in the range.

>>> last (range 10 20)
19

size :: Integral a => Range a -> IntSource

The size of the range.

>>> size (range 10 20)
10
>>> size (sized 100 10)
100

null :: Eq a => Range a -> BoolSource

True if range is empty.

>>> null (range 10 10)
True
>>> null (range 10 20)
False

toList :: Enum a => Range a -> [a]Source

Convert range to a list of its values.

Interval operations

within :: Ord a => a -> Range a -> BoolSource

Return true if a given value is contained within the range.

>>> within 12 (sized 3 10)
True
>>> within 20 (range 10 20)
False
>>> within 30 (range 30 30)
False

adjoins :: Eq a => Range a -> Range a -> BoolSource

Return true if two ranges adjoin each other.

>>> range 10 20 `adjoins` range 20 30
True
>>> range 10 20 `adjoins` range 21 30
False

overlaps :: Ord a => Range a -> Range a -> BoolSource

Return true if two ranges overlap each other.

contains :: Ord a => Range a -> Range a -> BoolSource

Return true if the second range lies completely within the first range.

split :: Integral a => Int -> Range a -> (Range a, Range a)Source

Split a range at an index.

>>> let (r1, r2) = split 6 (range 10 20)
>>> size r1
6
>>> size r2
4
>>> let (r1, r2) = split 6 (empty 6)
>>> null r1 && null r2
True
>>> let (r1, r2) = split 10 (sized 4 10)
>>> size r1
4
>>> size r2
0

join :: Ord a => Range a -> Range a -> Range aSource