hdf5-1.8.9: src/Bindings/HDF5/PropertyList/OCPL.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Bindings.HDF5.PropertyList.OCPL
( module Bindings.HDF5.PropertyList
, OCPL
, ObjectCreationPropertyList
, setAttrPhaseChange
, getAttrPhaseChange
, setAttrCreationOrder
, getAttrCreationOrder
, setObjTrackTimes
, getObjTrackTimes
, modifyFilter
, setFilter
, getNFilters
, allFiltersAvail
, removeFilter
, setDeflate
, setFletcher32
) where
import Bindings.HDF5.Raw.H5
import Bindings.HDF5.Raw.H5P
import Bindings.HDF5.Raw.H5Z
import Bindings.HDF5.Core
import Bindings.HDF5.Error
import Bindings.HDF5.PropertyList
import qualified Data.Vector.Storable as SV
import Foreign.C
import Foreign.Ptr.Conventions
class PropertyList t => ObjectCreationPropertyList t where
newtype OCPL = OCPL PropertyListID
deriving (Eq, HId, FromHId, HDFResultType, PropertyListOrClass)
instance PropertyList OCPL where
staticPlistClass = Tagged objectCreate
instance ObjectCreationPropertyList OCPL
setAttrPhaseChange :: ObjectCreationPropertyList t => t -> CUInt -> CUInt -> IO ()
setAttrPhaseChange plist max_compact min_dense =
withErrorCheck_ $
h5p_set_attr_phase_change (hid plist) max_compact min_dense
getAttrPhaseChange :: ObjectCreationPropertyList t => t -> IO (CUInt, CUInt)
getAttrPhaseChange plist =
withOut $ \max_compact ->
withOut_ $ \min_dense ->
withErrorCheck_ $
h5p_get_attr_phase_change (hid plist) max_compact min_dense
setAttrCreationOrder :: ObjectCreationPropertyList t => t -> CUInt -> IO ()
setAttrCreationOrder plist crt_order_flags =
withErrorCheck_ $
h5p_set_attr_creation_order (hid plist) crt_order_flags
getAttrCreationOrder :: ObjectCreationPropertyList t => t -> IO CUInt
getAttrCreationOrder plist =
withOut_ $ \crt_order_flags ->
withErrorCheck_ $
h5p_get_attr_creation_order (hid plist) crt_order_flags
setObjTrackTimes :: ObjectCreationPropertyList t => t -> Bool -> IO ()
setObjTrackTimes plist track_times =
withErrorCheck_ $
h5p_set_obj_track_times (hid plist) (HBool_t $ if track_times then 1 else 0)
getObjTrackTimes :: ObjectCreationPropertyList t => t -> IO Bool
getObjTrackTimes plist =
fmap (\(HBool_t x) -> x > 0) $
withOut_ $ \track_times ->
withErrorCheck_ $
h5p_get_obj_track_times (hid plist) track_times
modifyFilter :: ObjectCreationPropertyList t => t -> H5Z_filter_t -> Bool -> SV.Vector CUInt -> IO ()
modifyFilter plist filt optional cd_values =
withErrorCheck_ $
withInVector cd_values $ \ccd_values ->
h5p_modify_filter (hid plist) filt flags n_elmts ccd_values
where
flags
| optional = h5z_FLAG_OPTIONAL
| otherwise = 0
n_elmts = fromIntegral (SV.length cd_values)
setFilter :: ObjectCreationPropertyList t => t -> H5Z_filter_t -> Bool -> SV.Vector CUInt -> IO ()
setFilter plist filt optional cd_values =
withErrorCheck_ $
withInVector cd_values $ \ccd_values ->
h5p_set_filter (hid plist) filt flags n_elmts ccd_values
where
flags
| optional = h5z_FLAG_OPTIONAL
| otherwise = 0
n_elmts = fromIntegral (SV.length cd_values)
getNFilters :: ObjectCreationPropertyList t => t -> IO CInt
getNFilters plist =
withErrorWhen (< 0) $
h5p_get_nfilters (hid plist)
-- getFilter :: ObjectCreationPropertyList t => t -> CUInt -> ...
-- getFilterById
allFiltersAvail :: ObjectCreationPropertyList t => t -> IO Bool
allFiltersAvail plist =
htriToBool $
h5p_all_filters_avail (hid plist)
removeFilter :: ObjectCreationPropertyList t => t -> H5Z_filter_t -> IO ()
removeFilter plist filt =
withErrorCheck_ $
h5p_remove_filter (hid plist) filt
setDeflate :: ObjectCreationPropertyList t => t -> CUInt -> IO ()
setDeflate plist aggression =
withErrorCheck_ $
h5p_set_deflate (hid plist) aggression
setFletcher32 :: ObjectCreationPropertyList t => t -> IO ()
setFletcher32 plist =
withErrorCheck_ $
h5p_set_fletcher32 (hid plist)