{-# 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.Word                ( Word64 )

import Text.XML.HXT.Core

-- ------------------------------------------------------------

-- | The unique identifier of a document
-- (created upon insertion into the document table).

newtype DocId                   = DocId { theDocId :: Word64 }
                                  deriving (Eq, Ord, Enum)
instance Show DocId where
    show                        = show . theDocId

instance NFData DocId where
    rnf (DocId i)               = rnf i

instance Binary DocId where
    put                         = B.put . theDocId
    get                         = B.get >>= return . DocId

incrDocId                       :: DocId -> DocId
incrDocId                       = DocId . (1+) . theDocId

nullDocId                       :: DocId
nullDocId                       = DocId 0

firstDocId                      :: DocId
firstDocId                      = DocId 1

mkDocId                         :: Word64 -> DocId
mkDocId                         = DocId

xpDocId                         :: PU DocId
xpDocId                         = xpWrap (DocId, theDocId) xpPrim

-- ------------------------------------------------------------