{-# OPTIONS #-}

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

{- |
  Module     : Holumbus.Index.Common.RawResult
  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 RawResult data type

-}

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

module Holumbus.Index.Common.RawResult
where

import           Data.Map       (Map)
import qualified Data.Map       as M

import Holumbus.Index.Common.BasicTypes
import Holumbus.Index.Common.DocIdMap
import Holumbus.Index.Common.Occurences

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

-- | The raw result returned when searching the index.

type RawResult                  = [(Word, Occurrences)]

-- | Transform the raw result into a tree structure ordered by word.

resultByWord :: Context -> RawResult -> Map Word (Map Context Occurrences)
resultByWord c
    = M.fromList . map (\ (w, o) -> (w, M.singleton c o))

-- | Transform the raw result into a tree structure ordered by document.

resultByDocument :: Context -> RawResult -> DocIdMap (Map Context (Map Word Positions))
resultByDocument c os
    = mapDocIdMap transform $
      unionsWithDocIdMap (flip $ (:) . head) (map insertWords os)
    where
      insertWords (w, o) = mapDocIdMap (\p -> [(w, p)]) o   
      transform w        = M.singleton c (M.fromList w)

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