{-# LANGUAGE FlexibleInstances #-} module HaskellWorks.Data.Xml.Index ( Index(..) , indexVersion ) where import Data.Serialize import Data.Word import HaskellWorks.Data.Bits.BitShown import qualified Data.Vector.Storable as DVS indexVersion :: String indexVersion = "1.0" data Index = Index { xiVersion :: String , xiInterests :: BitShown (DVS.Vector Word64) , xiBalancedParens :: BitShown (DVS.Vector Word64) } deriving (Eq, Show) putBitShownVector :: Putter (BitShown (DVS.Vector Word64)) putBitShownVector = putVector . bitShown getBitShownVector :: Get (BitShown (DVS.Vector Word64)) getBitShownVector = BitShown <$> getVector putVector :: DVS.Vector Word64 -> Put putVector v = do let len = DVS.length v put len DVS.forM_ v put getVector :: Get (DVS.Vector Word64) getVector = do len <- get DVS.generateM len (const get) instance Serialize Index where put xi = do put $ xiVersion xi putBitShownVector $ xiInterests xi putBitShownVector $ xiBalancedParens xi get = do version <- get ib <- getBitShownVector bp <- getBitShownVector return $ Index version ib bp