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

{- |
  Module     : Holumbus.Index.Compression
  Copyright  : Copyright (C) 2008 Timo B. Huebel
  License    : MIT
  
  Maintainer : Timo B. Huebel (tbh@holumbus.org)
  Stability  : experimental
  Portability: portable
  Version    : 0.1
  
  This module provides several specific compression mechanisms for different
  parts of indexes. Right now, just a general compression scheme for 
  the 'Occurrences' and 'Positions' are provided.

-}

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

module Holumbus.Index.Compression 
  (
  -- * Compression types
  CompressedOccurrences
  , CompressedPositions
  
  -- * Compress
  , deflateOcc
  , deflatePos
  
  -- * Decompress
  , inflateOcc
  , inflatePos
  )
where

import Holumbus.Index.Common.DocIdMap
import Holumbus.Index.Common.Occurences
import Holumbus.Index.Common.DiffList

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

type CompressedOccurrences      = DocIdMap CompressedPositions
type CompressedPositions        = DiffList

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

-- | Decompressing the occurrences by just decompressing all contained positions.

inflateOcc :: CompressedOccurrences -> Occurrences
inflateOcc = mapDocIdMap inflatePos

-- | Compress the occurrences by just compressing all contained positions.

deflateOcc :: Occurrences -> CompressedOccurrences
deflateOcc = mapDocIdMap deflatePos

-- | Convert the compressed differences back to a set of integers.

inflatePos :: CompressedPositions -> Positions
inflatePos = toPositions

-- | Save some memory on the positions by just saving their differences and compressing these.

deflatePos :: Positions -> CompressedPositions
deflatePos = fromPositions

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