{-# LANGUAGE TypeFamilies, StandaloneDeriving, FlexibleInstances, FlexibleContexts, UndecidableInstances #-} -- | This module declares some commonly used functions and instances. module JVM.Common (toCharList, poolSize, (!), showListIx, byteString ) where import Codec.Binary.UTF8.String (encodeString, decodeString) 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.Char import Data.String import JVM.ClassFile instance IsString B.ByteString where fromString s = B.pack $ map (fromIntegral . ord) $ encodeString s 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 a) => [a] -> String showListIx list = unlines $ zipWith s [1..] list where s i x = show i ++ ":\t" ++ show x byteString :: (Binary t) => t -> B.ByteString byteString x = runPut (put x)