content: {-# LANGUAGE ConstraintKinds #-}
  {-# LANGUAGE FlexibleContexts #-}
  
  -- | Functions for manipulating remappings.
  --
  -- This module is intended to be imported qualified.
  module Clang.Remapping
  ( getRemappings
  , getRemappingsFromFileList
  , getRemappedFiles
  ) where
  
  import Control.Monad.IO.Class
  
  import qualified Clang.Internal.FFI as FFI
  import Clang.Internal.Monad
  
  -- | Given a 'FilePath' for a file, returns information about the remappings that
  -- apply to that file. If an error occurs, returns 'Nothing'.
  getRemappings :: ClangBase m => FilePath -> ClangT s m (Maybe (FFI.Remapping s))
  getRemappings = FFI.getRemappings
  
  -- | Given a list of 'FilePath's, returns information about the
  -- remappings that apply to the corresponding files. If an error
  -- occurs, returns 'Nothing'.
  getRemappingsFromFileList :: ClangBase m => [FilePath] -> ClangT s m (Maybe (FFI.Remapping s))
  getRemappingsFromFileList = FFI.getRemappingsFromFileList
  
  -- | Retrieves a list of the remappings described by a
  -- 'FFI.Remapping'. Each entry in the list consists of a pair.
  -- The first element is the original filename, and the second element
  -- is the filename it has been remapped to.
  getRemappedFiles :: ClangBase m => FFI.Remapping s'
                   -> ClangT s m [(FFI.ClangString s, FFI.ClangString s)]
  getRemappedFiles remaps = do
    numRemaps <- liftIO $ FFI.remap_getNumFiles remaps
    mapM (FFI.remap_getFilenames remaps) [0..(numRemaps - 1)]
  