content: {-# language CPP #-}
  {-# language QuasiQuotes #-}
  {-# language TemplateHaskell #-}
  
  #ifndef ENABLE_INTERNAL_DOCUMENTATION
  {-# OPTIONS_HADDOCK hide #-}
  #endif
  
  -- | Interface between OpenCV (extra modules) and inline-c(pp) (Haskell)
  module OpenCV.Extra.Internal.C.Inline ( openCvExtraCtx ) where
  
  import "base" Data.Monoid ( (<>) )
  import qualified "containers" Data.Map as M
  import qualified "inline-c" Language.C.Inline as C
  import qualified "inline-c" Language.C.Types  as C
  import qualified "inline-c" Language.C.Inline.Context as C
  import "opencv" OpenCV.Internal.C.Inline ( openCvCtx )
  import "this" OpenCV.Extra.Internal.C.Types
  
  -- | Context useful to work with the OpenCV library's extra modules.
  --
  -- Based on 'C.cppCtx', 'C.bsCtx', 'C.vecCtx' and most importantly 'openCvCtx'.
  --
  -- 'C.ctxTypesTable': converts OpenCV basic types to their counterparts in
  -- "OpenCV.Internal.C.Inline".
  --
  -- No 'C.ctxAntiQuoters'.
  openCvExtraCtx :: C.Context
  openCvExtraCtx = openCvCtx <> ctx
    where
      ctx = mempty { C.ctxTypesTable = openCvExtraTypesTable }
  
  openCvExtraTypesTable :: C.TypesTable
  openCvExtraTypesTable = M.fromList
    [ ( C.TypeName "Ptr_BackgroundSubtractorGMG", [t| C'Ptr_BackgroundSubtractorGMG |] )
    , ( C.TypeName "Ptr_BackgroundSubtractorMOG", [t| C'Ptr_BackgroundSubtractorMOG |] )
    , ( C.TypeName "Ptr_Tracker"                , [t| C'Ptr_Tracker                 |] )
    , ( C.TypeName "Ptr_TrackerFeature"         , [t| C'Ptr_TrackerFeature          |] )
    , ( C.TypeName "Ptr_MultiTracker"           , [t| C'Ptr_MultiTracker            |] )
    , ( C.TypeName "Ptr_MultiTrackerAlt"        , [t| C'Ptr_MultiTrackerAlt         |] )
    , ( C.TypeName "Ptr_SURF"                   , [t| C'Ptr_SURF                    |] )
    , ( C.TypeName "Ptr_SIFT"                   , [t| C'Ptr_SIFT                    |] )
    , ( C.TypeName "Ptr_GrayworldWB"            , [t| C'Ptr_GrayworldWB             |] )
    , ( C.TypeName "Ptr_LearningBasedWB"        , [t| C'Ptr_LearningBasedWB         |] )
    , ( C.TypeName "Ptr_SimpleWB"               , [t| C'Ptr_SimpleWB                |] )
    , ( C.TypeName "Ptr_CharucoBoard"           , [t| C'Ptr_CharucoBoard            |] )
    , ( C.TypeName "Ptr_Dictionary"             , [t| C'Ptr_Dictionary              |] )
    , ( C.TypeName "VectorVectorPoint2f"        , [t| C'Vector_Vector_Point2f       |] )
    , ( C.TypeName "VectorInt"                  , [t| C'Vector_Int                  |] )
    ]
  