module Data.RadixNTree.Word8.Conversion
  ( Lazy.LazyRadixTree
  , Lazy.LazyRadix1Tree
  , toLazy0
  , toLazy1

  , Strict.StrictRadixTree
  , Strict.StrictRadix1Tree
  , toStrict0
  , toStrict1
  ) where

import qualified Data.RadixNTree.Word8.Lazy as Lazy
import qualified Data.RadixNTree.Word8.Strict as Strict



toLazy0 :: Strict.StrictRadixTree a -> Lazy.LazyRadixTree a
toLazy0 :: forall a. StrictRadixTree a -> LazyRadixTree a
toLazy0 (Strict.RadixTree Maybe a
mx Radix1Tree a
t) = Maybe a -> Radix1Tree a -> RadixTree a
forall a. Maybe a -> Radix1Tree a -> RadixTree a
Lazy.RadixTree Maybe a
mx (Radix1Tree a -> Radix1Tree a
forall a. StrictRadix1Tree a -> LazyRadix1Tree a
toLazy1 Radix1Tree a
t)

toLazy1 :: Strict.StrictRadix1Tree a -> Lazy.LazyRadix1Tree a
toLazy1 :: forall a. StrictRadix1Tree a -> LazyRadix1Tree a
toLazy1 StrictRadix1Tree a
t =
  case StrictRadix1Tree a
t of
    Strict.Bin Prefix
p StrictRadix1Tree a
l StrictRadix1Tree a
r     -> Prefix -> LazyRadix1Tree a -> LazyRadix1Tree a -> LazyRadix1Tree a
forall a. Prefix -> Radix1Tree a -> Radix1Tree a -> Radix1Tree a
Lazy.Bin Prefix
p (StrictRadix1Tree a -> LazyRadix1Tree a
forall a. StrictRadix1Tree a -> LazyRadix1Tree a
toLazy1 StrictRadix1Tree a
l) (StrictRadix1Tree a -> LazyRadix1Tree a
forall a. StrictRadix1Tree a -> LazyRadix1Tree a
toLazy1 StrictRadix1Tree a
r)
    Strict.Tip ByteArray
arr Maybe a
mx StrictRadix1Tree a
dx -> ByteArray -> Maybe a -> LazyRadix1Tree a -> LazyRadix1Tree a
forall a. ByteArray -> Maybe a -> Radix1Tree a -> Radix1Tree a
Lazy.Tip ByteArray
arr Maybe a
mx (StrictRadix1Tree a -> LazyRadix1Tree a
forall a. StrictRadix1Tree a -> LazyRadix1Tree a
toLazy1 StrictRadix1Tree a
dx)
    StrictRadix1Tree a
Strict.Nil           -> LazyRadix1Tree a
forall a. Radix1Tree a
Lazy.Nil



toStrict0 :: Lazy.LazyRadixTree a -> Strict.StrictRadixTree a
toStrict0 :: forall a. LazyRadixTree a -> StrictRadixTree a
toStrict0 (Lazy.RadixTree Maybe a
mx Radix1Tree a
t) = Maybe a -> Radix1Tree a -> RadixTree a
forall a. Maybe a -> Radix1Tree a -> RadixTree a
Strict.RadixTree Maybe a
mx (Radix1Tree a -> Radix1Tree a
forall a. LazyRadix1Tree a -> StrictRadix1Tree a
toStrict1 Radix1Tree a
t)

toStrict1 :: Lazy.LazyRadix1Tree a -> Strict.StrictRadix1Tree a
toStrict1 :: forall a. LazyRadix1Tree a -> StrictRadix1Tree a
toStrict1 LazyRadix1Tree a
t =
  case LazyRadix1Tree a
t of
    Lazy.Bin Prefix
p LazyRadix1Tree a
l LazyRadix1Tree a
r     -> Prefix
-> StrictRadix1Tree a -> StrictRadix1Tree a -> StrictRadix1Tree a
forall a. Prefix -> Radix1Tree a -> Radix1Tree a -> Radix1Tree a
Strict.Bin Prefix
p (LazyRadix1Tree a -> StrictRadix1Tree a
forall a. LazyRadix1Tree a -> StrictRadix1Tree a
toStrict1 LazyRadix1Tree a
l) (LazyRadix1Tree a -> StrictRadix1Tree a
forall a. LazyRadix1Tree a -> StrictRadix1Tree a
toStrict1 LazyRadix1Tree a
r)
    Lazy.Tip ByteArray
arr Maybe a
mx LazyRadix1Tree a
dx -> ByteArray -> Maybe a -> StrictRadix1Tree a -> StrictRadix1Tree a
forall a. ByteArray -> Maybe a -> Radix1Tree a -> Radix1Tree a
Strict.Tip ByteArray
arr Maybe a
mx (LazyRadix1Tree a -> StrictRadix1Tree a
forall a. LazyRadix1Tree a -> StrictRadix1Tree a
toStrict1 LazyRadix1Tree a
dx)
    LazyRadix1Tree a
Lazy.Nil           -> StrictRadix1Tree a
forall a. Radix1Tree a
Strict.Nil