packages feed

fficxx-0.6: src/FFICXX/Generate/Type/Config.hs

{-# LANGUAGE DeriveGeneric #-}
module FFICXX.Generate.Type.Config where

import Data.Hashable            ( Hashable(..) )
import Data.HashMap.Strict      ( HashMap )
import GHC.Generics             ( Generic )
--
import FFICXX.Runtime.CodeGen.Cxx ( HeaderName(..), Namespace(..) )


data ModuleUnit = MU_TopLevel 
                | MU_Class String
                deriving (Show,Eq,Generic)

instance Hashable ModuleUnit

data ModuleUnitImports =
  ModuleUnitImports {
    muimports_namespaces :: [Namespace]
  , muimports_headers    :: [HeaderName]
  }
  deriving (Show)

emptyModuleUnitImports = ModuleUnitImports [] []

newtype ModuleUnitMap = ModuleUnitMap { unModuleUnitMap :: HashMap ModuleUnit ModuleUnitImports }

modImports ::
     String
  -> [String]
  -> [HeaderName]
  -> (ModuleUnit,ModuleUnitImports)
modImports n ns hs =
  ( MU_Class n
  , ModuleUnitImports {
      muimports_namespaces = map NS ns
    , muimports_headers    = hs
    }
  )