module Data.Tree.AVL.Internals.HJoin
( spliceH,joinH,joinH',
) where
import Data.Tree.AVL.Internals.Types(AVL(..))
import Data.Tree.AVL.Push(pushL,pushR)
import Data.Tree.AVL.Internals.HPush(pushHL_,pushHR_)
import Data.Tree.AVL.Internals.DelUtils(popRN,popRZ,popRP,popLN,popLZ,popLP)
import GHC.Base
#include "ghcdefs.h"
joinH'
:: AVL e -> UINT -> AVL e -> UINT -> AVL e
joinH' :: forall e. AVL e -> Int# -> AVL e -> Int# -> AVL e
joinH' AVL e
l Int#
hl AVL e
r Int#
hr
= if Int# -> Bool
isTrue# (Int#
hl Int# -> Int# -> Int#
LEQ Int#
hr) then let d :: Int#
d = SUBINT(hr,hl) in joinHL d l r
else let d :: Int#
d = SUBINT(hl,hr) in joinHR d l r
{-# INLINE joinHL #-}
joinHL :: UINT -> AVL e -> AVL e -> AVL e
joinHL :: forall e. Int# -> AVL e -> AVL e -> AVL e
joinHL Int#
_ AVL e
E AVL e
r = AVL e
r
joinHL Int#
d (N AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"joinHL: Bug0"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceL AVL e
l_ e
e INCINT1(d) r
AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceL AVL e
l_ e
e Int#
d AVL e
r
joinHL Int#
d (Z AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRZ AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
AVL e
E -> e
e e -> AVL e -> AVL e
forall e. e -> AVL e -> AVL e
`pushL` AVL e
r
AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceL AVL e
l_ e
e Int#
d AVL e
r
joinHL Int#
d (P AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"joinHL: Bug1"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceL AVL e
l_ e
e INCINT1(d) r
AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceL AVL e
l_ e
e Int#
d AVL e
r
{-# INLINE joinHR #-}
joinHR :: UINT -> AVL e -> AVL e -> AVL e
joinHR :: forall e. Int# -> AVL e -> AVL e -> AVL e
joinHR Int#
_ AVL e
l AVL e
E = AVL e
l
joinHR Int#
d AVL e
l (N AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
rl e
re AVL e
rr of
UBT2(e,r_) -> case AVL e
r_ of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"joinHR: Bug0"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceR AVL e
r_ e
e INCINT1(d) l
AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceR AVL e
r_ e
e Int#
d AVL e
l
joinHR Int#
d AVL e
l (Z AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLZ AVL e
rl e
re AVL e
rr of
UBT2(e,r_) -> case AVL e
r_ of
AVL e
E -> AVL e
l AVL e -> e -> AVL e
forall e. AVL e -> e -> AVL e
`pushR` e
e
AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceR AVL e
r_ e
e Int#
d AVL e
l
joinHR Int#
d AVL e
l (P AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
rl e
re AVL e
rr of
UBT2(e,r_) -> case AVL e
r_ of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"joinHL: Bug1"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceR AVL e
r_ e
e INCINT1(d) l
AVL e
_ -> AVL e -> e -> Int# -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceR AVL e
r_ e
e Int#
d AVL e
l
joinH :: AVL e -> UINT -> AVL e -> UINT -> UBT2(AVL e,UINT)
joinH :: forall e. AVL e -> Int# -> AVL e -> Int# -> (# AVL e, Int# #)
joinH AVL e
l Int#
hl AVL e
r Int#
hr =
case Int# -> Int# -> Ordering
COMPAREUINT Int#
hl Int#
hr of
Ordering
LT -> case AVL e
l of
AVL e
E -> UBT2(r,hr)
N AVL e
ll e
le AVL e
lr -> case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ DECINT1(hl) e r hr
AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ Int#
hl e
e AVL e
r Int#
hr
Z AVL e
ll e
le AVL e
lr -> case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRZ AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
AVL e
E -> AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
pushHL_ AVL e
l AVL e
r Int#
hr
AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ Int#
hl e
e AVL e
r Int#
hr
P AVL e
ll e
le AVL e
lr -> case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ DECINT1(hl) e r hr
AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ Int#
hl e
e AVL e
r Int#
hr
Ordering
EQ -> case AVL e
l of
AVL e
E -> UBT2(l,hl)
N AVL e
ll e
le AVL e
lr -> case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ DECINT1(hl) e r hr
AVL e
_ -> UBT2(Z l_ e r, INCINT1(hr))
Z AVL e
ll e
le AVL e
lr -> case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRZ AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
AVL e
E -> AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
pushHL_ AVL e
l AVL e
r Int#
hr
AVL e
_ -> UBT2(Z l_ e r, INCINT1(hr))
P AVL e
ll e
le AVL e
lr -> case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
ll e
le AVL e
lr of
UBT2(l_,e) -> case AVL e
l_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l_ DECINT1(hl) e r hr
AVL e
_ -> UBT2(Z l_ e r, INCINT1(hr))
Ordering
GT -> case AVL e
r of
AVL e
E -> UBT2(l,hl)
N AVL e
rl e
re AVL e
rr -> case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
rl e
re AVL e
rr of
UBT2(e,r_) -> case AVL e
r_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
e AVL e
r_ DECINT1(hr)
AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
e AVL e
r_ Int#
hr
Z AVL e
rl e
re AVL e
rr -> case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLZ AVL e
rl e
re AVL e
rr of
UBT2(e,r_) -> case AVL e
r_ of
AVL e
E -> AVL e -> Int# -> AVL e -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> AVL e -> (# AVL e, Int# #)
pushHR_ AVL e
l Int#
hl AVL e
r
AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
e AVL e
r_ Int#
hr
P AVL e
rl e
re AVL e
rr -> case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
rl e
re AVL e
rr of
UBT2(e,r_) -> case AVL e
r_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
e AVL e
r_ DECINT1(hr)
AVL e
_ -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
e AVL e
r_ Int#
hr
spliceH :: AVL e -> UINT -> e -> AVL e -> UINT -> UBT2(AVL e,UINT)
spliceH :: forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceH AVL e
l Int#
hl e
b AVL e
r Int#
hr =
case Int# -> Int# -> Ordering
COMPAREUINT Int#
hl Int#
hr of
Ordering
LT -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l Int#
hl e
b AVL e
r Int#
hr
Ordering
EQ -> UBT2(Z l b r, INCINT1(hl))
Ordering
GT -> AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
b AVL e
r Int#
hr
spliceHL :: AVL e -> UINT -> e -> AVL e -> UINT -> UBT2(AVL e,UINT)
spliceHL :: forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHL AVL e
l Int#
hl e
b AVL e
r Int#
hr = let d :: Int#
d = SUBINT(hr,hl)
in if Int# -> Bool
isTrue# (Int#
d Int# -> Int# -> Int#
EQL L(1)) then UBT2(N l b r, INCINT1(hr))
else Int# -> Int# -> AVL e -> e -> AVL e -> (# AVL e, Int# #)
forall e. Int# -> Int# -> AVL e -> e -> AVL e -> (# AVL e, Int# #)
spliceHL_ Int#
hr Int#
d AVL e
l e
b AVL e
r
spliceHR :: AVL e -> UINT -> e -> AVL e -> UINT -> UBT2(AVL e,UINT)
spliceHR :: forall e. AVL e -> Int# -> e -> AVL e -> Int# -> (# AVL e, Int# #)
spliceHR AVL e
l Int#
hl e
b AVL e
r Int#
hr = let d :: Int#
d = SUBINT(hl,hr)
in if Int# -> Bool
isTrue# (Int#
d Int# -> Int# -> Int#
EQL L(1)) then UBT2(P l b r, INCINT1(hl))
else Int# -> Int# -> AVL e -> e -> AVL e -> (# AVL e, Int# #)
forall e. Int# -> Int# -> AVL e -> e -> AVL e -> (# AVL e, Int# #)
spliceHR_ Int#
hl Int#
d AVL e
l e
b AVL e
r
{-# INLINE spliceHL_ #-}
spliceHL_ :: UINT -> UINT -> AVL e -> e -> AVL e -> UBT2(AVL e,UINT)
spliceHL_ :: forall e. Int# -> Int# -> AVL e -> e -> AVL e -> (# AVL e, Int# #)
spliceHL_ Int#
_ Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> (# AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceHL_: Bug0"
spliceHL_ Int#
hr Int#
d AVL e
l e
b (N AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
l e
b DECINT2(d) rl re rr
in AVL e
r_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(r_,hr)
spliceHL_ Int#
hr Int#
d AVL e
l e
b (Z AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLZ AVL e
l e
b DECINT1(d) rl re rr
in case AVL e
r_ of
AVL e
E -> [Char] -> (# AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceHL_: Bug1"
Z AVL e
_ e
_ AVL e
_ -> UBT2(r_, hr )
AVL e
_ -> UBT2(r_,INCINT1(hr))
spliceHL_ Int#
hr Int#
d AVL e
l e
b (P AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
l e
b DECINT1(d) rl re rr
in AVL e
r_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(r_,hr)
{-# INLINE spliceHR_ #-}
spliceHR_ :: UINT -> UINT -> AVL e -> e -> AVL e -> UBT2(AVL e,UINT)
spliceHR_ :: forall e. Int# -> Int# -> AVL e -> e -> AVL e -> (# AVL e, Int# #)
spliceHR_ Int#
_ Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> (# AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceHR_: Bug0"
spliceHR_ Int#
hl Int#
d (N AVL e
ll e
le AVL e
lr) e
b AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
r e
b DECINT1(d) ll le lr
in AVL e
l_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(l_,hl)
spliceHR_ Int#
hl Int#
d (Z AVL e
ll e
le AVL e
lr) e
b AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRZ AVL e
r e
b DECINT1(d) ll le lr
in case AVL e
l_ of
AVL e
E -> [Char] -> (# AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceHR_: Bug1"
Z AVL e
_ e
_ AVL e
_ -> UBT2(l_, hl )
AVL e
_ -> UBT2(l_,INCINT1(hl))
spliceHR_ Int#
hl Int#
d (P AVL e
ll e
le AVL e
lr) e
b AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
r e
b DECINT2(d) ll le lr
in AVL e
l_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(l_,hl)
spliceL :: AVL e -> e -> UINT -> AVL e -> AVL e
spliceL :: forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceL AVL e
s e
b L(0AVL e
) r = Z s b r
spliceL AVL e
s e
b L(1AVL e
) r = N s b r
spliceL AVL e
s e
b Int#
d (N AVL e
rl e
re AVL e
rr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
s e
b DECINT2(d) rl re rr
spliceL AVL e
s e
b Int#
d (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLZ AVL e
s e
b DECINT1(d) rl re rr
spliceL AVL e
s e
b Int#
d (P AVL e
rl e
re AVL e
rr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
s e
b DECINT1(d) rl re rr
spliceL AVL e
_ e
_ Int#
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceL: Bug0"
spliceLN :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> AVL e
spliceLN :: forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
s e
b L(0AVL e
) l AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
Z e
s AVL e
b le
) AVL e
e r
spliceLN AVL e
s e
b L(1AVL e
) l AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
N e
s AVL e
b le
) AVL e
e r
spliceLN AVL e
s e
b Int#
d (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
s e
b DECINT2(d) ll le lr in l_ `seq` N l_ e r
spliceLN AVL e
s e
b Int#
d (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLZ AVL e
s e
b DECINT1(d) ll le lr
in case AVL e
l_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l_ e
e AVL e
r
P AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l_ e
e AVL e
r
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLN: Bug0"
spliceLN AVL e
s e
b Int#
d (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
s e
b DECINT1(d) ll le lr in l_ `seq` N l_ e r
spliceLN AVL e
_ e
_ Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLN: Bug1"
spliceLZ :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> AVL e
spliceLZ :: forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLZ AVL e
s e
b L(1AVL e
) l AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= P (AVL e
N e
s AVL e
b le
) AVL e
e r
spliceLZ AVL e
s e
b Int#
d (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
s e
b DECINT2(d) ll le lr in l_ `seq` Z l_ e r
spliceLZ AVL e
s e
b Int#
d (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLZ AVL e
s e
b DECINT1(d) ll le lr
in case AVL e
l_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l_ e
e AVL e
r
P AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l_ e
e AVL e
r
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLZ: Bug0"
spliceLZ AVL e
s e
b Int#
d (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
s e
b DECINT1(d) ll le lr in l_ `seq` Z l_ e r
spliceLZ AVL e
_ e
_ Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLZ: Bug1"
spliceLP :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> AVL e
spliceLP :: forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
s e
b L(1) (N ll le lre
) AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
P e
s b ll) le (Z lr e r)
spliceLP AVL e
s e
b L(1) (Z ll le lre
) AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
Z e
s b ll) le (Z lr e r)
spliceLP AVL e
s e
b L(1) (P ll le lre
) AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
Z e
s b ll) le (N lr e r)
spliceLP AVL e
s e
b Int#
d (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
s e
b DECINT2(d) ll le lr in l_ `seq` P l_ e r
spliceLP AVL e
s e
b Int#
d (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e.
AVL e -> e -> Int# -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
spliceLPZ AVL e
s e
b DECINT1(d) ll le lr e r
spliceLP AVL e
s e
b Int#
d (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l_ :: AVL e
l_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
s e
b DECINT1(d) ll le lr in l_ `seq` P l_ e r
spliceLP AVL e
_ e
_ Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLP: Bug0"
{-# INLINE spliceLPZ #-}
spliceLPZ :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
spliceLPZ :: forall e.
AVL e -> e -> Int# -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
spliceLPZ AVL e
s e
b L(1) ll le lr AVL e
e r AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
N e
s b ll) le (Z lr e r)
spliceLPZ AVL e
s e
b Int#
d (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll_ :: AVL e
ll_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLN AVL e
s e
b DECINT2(d) lll lle llr
in AVL e
ll_ AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll_ e
le AVL e
lr) e
e AVL e
r
spliceLPZ AVL e
s e
b Int#
d (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll_ :: AVL e
ll_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLZ AVL e
s e
b DECINT1(d) lll lle llr
in case AVL e
ll_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll_ e
le AVL e
lr) e
e AVL e
r
P AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll_ e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLPZ: Bug0"
spliceLPZ AVL e
s e
b Int#
d (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll_ :: AVL e
ll_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceLP AVL e
s e
b DECINT1(d) lll lle llr
in AVL e
ll_ AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll_ e
le AVL e
lr) e
e AVL e
r
spliceLPZ AVL e
_ e
_ Int#
_ AVL e
E e
_ AVL e
_ e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceLPZ: Bug1"
spliceR :: AVL e -> e -> UINT -> AVL e -> AVL e
spliceR :: forall e. AVL e -> e -> Int# -> AVL e -> AVL e
spliceR AVL e
s e
b L(0AVL e
) l = Z l b s
spliceR AVL e
s e
b L(1AVL e
) l = P l b s
spliceR AVL e
s e
b Int#
d (N AVL e
ll e
le AVL e
lr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
s e
b DECINT1(d) ll le lr
spliceR AVL e
s e
b Int#
d (Z AVL e
ll e
le AVL e
lr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRZ AVL e
s e
b DECINT1(d) ll le lr
spliceR AVL e
s e
b Int#
d (P AVL e
ll e
le AVL e
lr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
s e
b DECINT2(d) ll le lr
spliceR AVL e
_ e
_ Int#
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceR: Bug0"
spliceRP :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> AVL e
spliceRP :: forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
s e
b L(0AVL e
) e
l e r = Z l e (Z r b s)
spliceRP AVL e
s e
b L(1AVL e
) e
l e r = Z l e (P r b s)
spliceRP AVL e
s e
b Int#
d AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
s e
b DECINT1(d) rl re rr in r_ `seq` P l e r_
spliceRP AVL e
s e
b Int#
d AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRZ AVL e
s e
b DECINT1(d) rl re rr
in case AVL e
r_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r_
N AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r_
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRP: Bug0"
spliceRP AVL e
s e
b Int#
d AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
s e
b DECINT2(d) rl re rr in r_ `seq` P l e r_
spliceRP AVL e
_ e
_ Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRP: Bug1"
spliceRZ :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> AVL e
spliceRZ :: forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRZ AVL e
s e
b L(1AVL e
) e
l e r = N l e (P r b s)
spliceRZ AVL e
s e
b Int#
d AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
s e
b DECINT1(d) rl re rr in r_ `seq` Z l e r_
spliceRZ AVL e
s e
b Int#
d AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRZ AVL e
s e
b DECINT1(d) rl re rr
in case AVL e
r_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r_
N AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r_
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRZ: Bug0"
spliceRZ AVL e
s e
b Int#
d AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
s e
b DECINT2(d) rl re rr in r_ `seq` Z l e r_
spliceRZ AVL e
_ e
_ Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRZ: Bug1"
spliceRN :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> AVL e
spliceRN :: forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
s e
b L(1AVL e
) e
l e (N rl re rr) AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
P e
l e rl) re (Z rr b s)
spliceRN AVL e
s e
b L(1AVL e
) e
l e (Z rl re rr) AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
Z e
l e rl) re (Z rr b s)
spliceRN AVL e
s e
b L(1AVL e
) e
l e (P rl re rr) AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
= Z (AVL e
Z e
l e rl) re (N rr b s)
spliceRN AVL e
s e
b Int#
d AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
s e
b DECINT1(d) rl re rr in r_ `seq` N l e r_
spliceRN AVL e
s e
b Int#
d AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e.
AVL e -> e -> Int# -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
spliceRNZ AVL e
s e
b DECINT1(d) l e rl re rr
spliceRN AVL e
s e
b Int#
d AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r_ :: AVL e
r_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
s e
b DECINT2(d) rl re rr in r_ `seq` N l e r_
spliceRN AVL e
_ e
_ Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRN: Bug0"
{-# INLINE spliceRNZ #-}
spliceRNZ :: AVL e -> e -> UINT -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
spliceRNZ :: forall e.
AVL e -> e -> Int# -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
spliceRNZ AVL e
s e
b L(1AVL e
) e
l e rl re rr = Z (Z l e rl) re (P rr b s)
spliceRNZ AVL e
s e
b Int#
d AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let rr_ :: AVL e
rr_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRN AVL e
s e
b DECINT1(d) rrl rre rrr
in AVL e
rr_ AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr_)
spliceRNZ AVL e
s e
b Int#
d AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let rr_ :: AVL e
rr_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRZ AVL e
s e
b DECINT1(d) rrl rre rrr
in case AVL e
rr_ of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr_)
N AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re AVL e
rr_
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRNZ: Bug0"
spliceRNZ AVL e
s e
b Int#
d AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let rr_ :: AVL e
rr_ = AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> Int# -> AVL e -> e -> AVL e -> AVL e
spliceRP AVL e
s e
b DECINT2(d) rrl rre rrr
in AVL e
rr_ AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr_)
spliceRNZ AVL e
_ e
_ Int#
_ AVL e
_ e
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"spliceRNZ: Bug1"