module Dcore ( int_to_str , list_to_str , str_to_int , str_to_list , encode ) where import Sub_Core1 import Sub_Core2 import Sub_Core3 import Sub_Core4 import Vtslib import Core_datatype int_to_str :: Int -> String int_to_str i | i < 256 = [ toEnum 0 , toEnum i ] | i < 65536 = [] -- [ toEnum ((i `div` 256) `rem` 256) , toEnum (i `rem` 256) ] | otherwise = error "Bind" -- ** exn list_to_str obj_to_str_fn objL = int_to_str (length objL) ++ concat (map obj_to_str_fn objL) str_to_int :: [Int] -> (Int, [Int]) str_to_int ( ch1 : ch2 : s ) = (ch1*256+ch2,s) str_to_list :: ([Int] -> (b, [Int])) -> [Int] -> ([b], [Int]) str_to_list str_to_fn s = f i s1 where f 0 s = ([],s) f i s = (obj:objL,s2) where (obj,s1) = str_to_fn s (objL,s2) = f (i-1) s1 (i, s1) = str_to_int s encode :: (Eq b) => b -> [b] -> Int encode obj objL = enc 0 objL where enc i [] = error "Encode" -- ** exn enc i (obj1:objL) | obj == obj1 = i | otherwise = enc (i+1) objL