{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- ---------------------------------------------------------------------------- {- | Module : Holumbus.Index.Common.DocId Copyright : Copyright (C) 2011 Sebastian M. Schlatt, Timo B. Huebel, Uwe Schmidt License : MIT Maintainer : Timo B. Huebel (tbh@holumbus.org) Stability : experimental Portability: none portable The document identifier type DocId -} -- ---------------------------------------------------------------------------- module Holumbus.Index.Common.DocId where import Control.DeepSeq import Data.Binary ( Binary (..) ) import qualified Data.Binary as B import Data.Int ( Int64 ) import Text.XML.HXT.Core -- ------------------------------------------------------------ -- | The unique identifier of a document -- (created upon insertion into the document table). newtype DocId = DocId { theDocId :: Int64 } deriving (Eq, Ord, Enum, NFData) instance Show DocId where show = show . theDocId {-# INLINE show #-} instance Binary DocId where put = B.put . theDocId get = B.get >>= return . DocId {-# INLINE put #-} {-# INLINE get #-} incrDocId :: DocId -> DocId incrDocId = DocId . (1+) . theDocId addDocId :: DocId -> DocId -> DocId addDocId id1 id2 = DocId $ theDocId id1 + theDocId id2 subDocId :: DocId -> DocId -> DocId subDocId id1 id2 = DocId $ theDocId id1 - theDocId id2 nullDocId :: DocId nullDocId = DocId 0 firstDocId :: DocId firstDocId = DocId 1 mkDocId :: Integer -> DocId mkDocId = DocId . fromIntegral xpDocId :: PU DocId xpDocId = xpWrap (DocId, theDocId) xpPrim {-# INLINE incrDocId #-} {-# INLINE addDocId #-} {-# INLINE subDocId #-} {-# INLINE nullDocId #-} {-# INLINE firstDocId #-} {-# INLINE mkDocId #-} -- ------------------------------------------------------------