module Data.Tree.AVL.Internals.HPush
(pushHL,pushHR,pushHL_,pushHR_,
) where
import Data.Tree.AVL.Internals.Types(AVL(..))
import GHC.Base
#include "ghcdefs.h"
{-# INLINE pushHL #-}
pushHL :: e -> AVL e -> UINT -> UBT2(AVL e,UINT)
pushHL :: forall e. e -> AVL e -> Int# -> (# AVL e, Int# #)
pushHL e
e AVL e
t Int#
h = AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
forall e. AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
pushHL_ (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e AVL e
forall e. AVL e
E) AVL e
t Int#
h
{-# INLINE pushHR #-}
pushHR :: AVL e -> UINT -> e -> UBT2(AVL e,UINT)
pushHR :: forall e. AVL e -> Int# -> e -> (# AVL e, Int# #)
pushHR AVL e
t Int#
h e
e = AVL e -> Int# -> AVL e -> (# AVL e, Int# #)
forall e. AVL e -> Int# -> AVL e -> (# AVL e, Int# #)
pushHR_ AVL e
t Int#
h (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e AVL e
forall e. AVL e
E)
pushHL_ :: AVL e -> AVL e -> UINT -> UBT2(AVL e,UINT)
pushHL_ :: forall e. AVL e -> AVL e -> Int# -> (# AVL e, Int# #)
pushHL_ AVL e
t0 AVL e
t Int#
h = case AVL e
t of
AVL e
E -> UBT2(t0, INCINT1(h))
N AVL e
l e
e AVL e
r -> let t_ :: AVL e
t_ = AVL e -> e -> AVL e -> AVL e
putNL AVL e
l e
e AVL e
r in AVL e
t_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(t_,h)
P AVL e
l e
e AVL e
r -> let t_ :: AVL e
t_ = AVL e -> e -> AVL e -> AVL e
putPL AVL e
l e
e AVL e
r in AVL e
t_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(t_,h)
Z AVL e
l e
e AVL e
r -> let t_ :: AVL e
t_ = AVL e -> e -> AVL e -> AVL e
putZL AVL e
l e
e AVL e
r
in case AVL e
t_ of
Z AVL e
_ e
_ AVL e
_ -> UBT2(t_, h )
P AVL e
_ e
_ AVL e
_ -> UBT2(t_, INCINT1(h))
AVL e
_ -> [Char] -> (# AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"pushHL_: Bug0"
where
putNL :: AVL e -> e -> AVL e -> AVL e
putNL AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
t0 e
e AVL e
r
putNL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
ll e
le AVL e
lr
in AVL e
l' 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
r
putNL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
ll e
le AVL e
lr
in AVL e
l' 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
r
putNL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZL AVL e
ll e
le AVL e
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]
"pushHL_: Bug1"
putZL :: AVL e -> e -> AVL e -> AVL e
putZL AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
t0 e
e AVL e
r
putZL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
ll e
le AVL e
lr
in AVL e
l' 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
Z AVL e
l' e
e AVL e
r
putZL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
ll e
le AVL e
lr
in AVL e
l' 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
Z AVL e
l' e
e AVL e
r
putZL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZL AVL e
ll e
le AVL e
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
N AVL e
_ e
_ AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushHL_: Bug2"
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
putPL :: AVL e -> e -> AVL e -> AVL e
putPL AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushHL_: Bug3"
putPL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
ll e
le AVL e
lr
in AVL e
l' 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
l' e
e AVL e
r
putPL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
ll e
le AVL e
lr
in AVL e
l' 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
l' e
e AVL e
r
putPL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
ll e
le AVL e
lr e
e AVL e
r
{-# INLINE putPLL #-}
putPLL :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
E e
le AVL e
lr e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
t0 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)
putPLL (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 -> AVL e -> AVL e
putNL AVL e
lll e
lle AVL e
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
putPLL (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 -> AVL e -> AVL e
putPL AVL e
lll e
lle AVL e
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
putPLL (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 -> AVL e -> AVL e
putZL AVL e
lll e
lle AVL e
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
N AVL e
_ e
_ AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushHL_: Bug4"
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)
pushHR_ :: AVL e -> UINT -> AVL e -> UBT2(AVL e,UINT)
pushHR_ :: forall e. AVL e -> Int# -> AVL e -> (# AVL e, Int# #)
pushHR_ AVL e
t Int#
h AVL e
t0 = case AVL e
t of
AVL e
E -> UBT2(t0, INCINT1(h))
N AVL e
l e
e AVL e
r -> let t_ :: AVL e
t_ = AVL e -> e -> AVL e -> AVL e
putNR AVL e
l e
e AVL e
r in AVL e
t_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(t_,h)
P AVL e
l e
e AVL e
r -> let t_ :: AVL e
t_ = AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
r in AVL e
t_ AVL e -> (# AVL e, Int# #) -> (# AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT2(t_,h)
Z AVL e
l e
e AVL e
r -> let t_ :: AVL e
t_ = AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
r
in case AVL e
t_ of
Z AVL e
_ e
_ AVL e
_ -> UBT2(t_, h )
N AVL e
_ e
_ AVL e
_ -> UBT2(t_, INCINT1(h))
AVL e
_ -> [Char] -> (# AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"pushHR_: Bug0"
where
putZR :: AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
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
t0
putZR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rl e
re AVL e
rr
in AVL e
r' 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
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rl e
re AVL e
rr
in AVL e
r' 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
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZR AVL e
rl e
re AVL e
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]
"pushHR_: Bug1"
putPR :: AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
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
t0
putPR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rl e
re AVL e
rr
in AVL e
r' 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
l e
e AVL e
r'
putPR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rl e
re AVL e
rr
in AVL e
r' 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
l e
e AVL e
r'
putPR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZR AVL e
rl e
re AVL e
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]
"pushHR_: Bug2"
putNR :: AVL e -> e -> AVL e -> AVL e
putNR AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushHR_: Bug3"
putNR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rl e
re AVL e
rr
in AVL e
r' 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
r'
putNR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rl e
re AVL e
rr
in AVL e
r' 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
r'
putNR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
rr
{-# INLINE putNRR #-}
putNRR :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
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
t0
putNRR 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 -> AVL e -> AVL e
putNR AVL e
rrl e
rre AVL e
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')
putNRR 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 -> AVL e -> AVL e
putPR AVL e
rrl e
rre AVL e
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')
putNRR 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 -> AVL e -> AVL e
putZR AVL e
rrl e
rre AVL e
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]
"pushHR_: Bug4"