[contrib][haskell] add Hkl.C.Detector and Hkl.C.GeometryList
[hkl.git] / contrib / haskell / src / Hkl / C / Detector.hsc
blob73c6b1dc26a2ea8e22e81e7008b671d54700e450
1 {-# LANGUAGE CPP #-}
2 {-# LANGUAGE ForeignFunctionInterface #-}
3 {-# LANGUAGE GADTs #-}
5 module Hkl.C.Detector
6        ( HklDetector
7        , newDetector
8        , withDetector
9        ) where
11 import Prelude hiding (min, max)
13 import Foreign ( ForeignPtr
14                , FunPtr
15                , Ptr
16                , newForeignPtr
17                , withForeignPtr)
18 import Foreign.C (CInt(..))
20 import Hkl.Detector
22 #include "hkl.h"
24 data HklDetector
26 -- Detector
28 withDetector :: Detector a -> (Ptr HklDetector -> IO b) -> IO b
29 withDetector d func = do
30   fptr <- newDetector d
31   withForeignPtr fptr func
33 newDetector :: Detector a -> IO (ForeignPtr HklDetector)
34 newDetector ZeroD = c_hkl_detector_new 0 >>= newForeignPtr c_hkl_detector_free
35 newDetector _ = error "Can not use 2D detector with the hkl library"
37 foreign import ccall unsafe "hkl.h hkl_detector_new"
38   c_hkl_detector_new:: CInt -> IO (Ptr HklDetector)
40 foreign import ccall unsafe "hkl.h &hkl_detector_free"
41   c_hkl_detector_free :: FunPtr (Ptr HklDetector -> IO ())