module Data.Binary.Conversion.Fast where
-- This module provides a conversion function from
-- nats which uses built-in functions.
-- It is dramatically faster than the normal conversion
-- even at smaller numbers.
open import Data.Binary.Definition
open import Data.Binary.Helpers
⟦_⇑⟧⟨_⟩ : ℕ → ℕ → 𝔹
⟦ suc n ⇑⟧⟨ suc w ⟩ =
if even n
then 1ᵇ ⟦ div2 n ⇑⟧⟨ w ⟩
else 2ᵇ ⟦ div2 n ⇑⟧⟨ w ⟩
⟦ zero ⇑⟧⟨ _ ⟩ = 0ᵇ
⟦ suc _ ⇑⟧⟨ zero ⟩ = 0ᵇ -- will not happen
-- We build the output by repeatedly halving the input,
-- but we also pass in the number to reduce as we go so that
-- we satisfy the termination checker.
⟦_⇑⟧ : ℕ → 𝔹
⟦ n ⇑⟧ = ⟦ n ⇑⟧⟨ n ⟩
{-# INLINE ⟦_⇑⟧ #-}