module JVM.Common
(toCharList,
poolSize,
(!),
showListIx,
mapFindIndex,
byteString
) where
import Data.Binary
import Data.Binary.Put
import qualified Data.ByteString.Lazy as B
import qualified Data.Map as M
import Data.Default
import Data.List
import JVM.ClassFile
instance Default B.ByteString where
def = B.empty
instance Default Word16 where
def = 0
toCharList :: B.ByteString -> [Int]
toCharList bstr = map fromIntegral $ B.unpack bstr
poolSize :: Pool stage -> Int
poolSize = M.size
(!) :: (Ord k) => M.Map k a -> k -> a
(!) = (M.!)
showListIx :: (Show i, Show a) => [(i,a)] -> String
showListIx list = unlines $ map s list
where s (i, x) = show i ++ ":\t" ++ show x
byteString :: (Binary t) => t -> B.ByteString
byteString x = runPut (put x)
mapFindIndex :: (Num k) => (v -> Bool) -> M.Map k v -> Maybe k
mapFindIndex check m =
case find (check . snd) (M.assocs m) of
Nothing -> Nothing
Just (k,_) -> Just k