    {-# LINE 1 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    module Bindings.HDF5.Raw.H5P where

    import Data.Word
    import Foreign.C.String
    import Foreign.C.Types
    import Foreign.Ptr
    import Foreign.Storable
    import System.Posix.Types (COff(..))

    import Bindings.HDF5.Raw.H5
    import Bindings.HDF5.Raw.H5AC
    import Bindings.HDF5.Raw.H5D
    import Bindings.HDF5.Raw.H5F
    import Bindings.HDF5.Raw.H5FD
    import Bindings.HDF5.Raw.H5I
    import Bindings.HDF5.Raw.H5L
    import Bindings.HDF5.Raw.H5MM
    import Bindings.HDF5.Raw.H5O
    import Bindings.HDF5.Raw.H5T
    import Bindings.HDF5.Raw.H5Z
    import Foreign.Ptr.Conventions

    foreign import ccall "inline_H5P_ROOT" h5p_ROOT
      :: HId_t

    {-# LINE 27 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_OBJECT_CREATE" h5p_OBJECT_CREATE
      :: HId_t

    {-# LINE 28 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_FILE_CREATE" h5p_FILE_CREATE
      :: HId_t

    {-# LINE 29 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_FILE_ACCESS" h5p_FILE_ACCESS
      :: HId_t

    {-# LINE 30 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATASET_CREATE" h5p_DATASET_CREATE
      :: HId_t

    {-# LINE 31 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATASET_ACCESS" h5p_DATASET_ACCESS
      :: HId_t

    {-# LINE 32 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATASET_XFER" h5p_DATASET_XFER
      :: HId_t

    {-# LINE 33 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_FILE_MOUNT" h5p_FILE_MOUNT
      :: HId_t

    {-# LINE 34 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_GROUP_CREATE" h5p_GROUP_CREATE
      :: HId_t

    {-# LINE 35 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_GROUP_ACCESS" h5p_GROUP_ACCESS
      :: HId_t

    {-# LINE 36 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATATYPE_CREATE" h5p_DATATYPE_CREATE
      :: HId_t

    {-# LINE 37 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATATYPE_ACCESS" h5p_DATATYPE_ACCESS
      :: HId_t

    {-# LINE 38 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_STRING_CREATE" h5p_STRING_CREATE
      :: HId_t

    {-# LINE 39 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_ATTRIBUTE_CREATE" h5p_ATTRIBUTE_CREATE
      :: HId_t

    {-# LINE 40 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_OBJECT_COPY" h5p_OBJECT_COPY
      :: HId_t

    {-# LINE 41 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_LINK_CREATE" h5p_LINK_CREATE
      :: HId_t

    {-# LINE 42 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_LINK_ACCESS" h5p_LINK_ACCESS
      :: HId_t

    {-# LINE 43 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    foreign import ccall "inline_H5P_FILE_CREATE_DEFAULT" h5p_FILE_CREATE_DEFAULT
      :: HId_t

    {-# LINE 45 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_FILE_ACCESS_DEFAULT" h5p_FILE_ACCESS_DEFAULT
      :: HId_t

    {-# LINE 46 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATASET_CREATE_DEFAULT" h5p_DATASET_CREATE_DEFAULT
      :: HId_t

    {-# LINE 47 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATASET_ACCESS_DEFAULT" h5p_DATASET_ACCESS_DEFAULT
      :: HId_t

    {-# LINE 48 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATASET_XFER_DEFAULT" h5p_DATASET_XFER_DEFAULT
      :: HId_t

    {-# LINE 49 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_FILE_MOUNT_DEFAULT" h5p_FILE_MOUNT_DEFAULT
      :: HId_t

    {-# LINE 50 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_GROUP_CREATE_DEFAULT" h5p_GROUP_CREATE_DEFAULT
      :: HId_t

    {-# LINE 51 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_GROUP_ACCESS_DEFAULT" h5p_GROUP_ACCESS_DEFAULT
      :: HId_t

    {-# LINE 52 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    foreign import ccall "inline_H5P_DATATYPE_CREATE_DEFAULT" h5p_DATATYPE_CREATE_DEFAULT
      :: HId_t

    {-# LINE 54 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_DATATYPE_ACCESS_DEFAULT" h5p_DATATYPE_ACCESS_DEFAULT
      :: HId_t

    {-# LINE 55 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_ATTRIBUTE_CREATE_DEFAULT" h5p_ATTRIBUTE_CREATE_DEFAULT
      :: HId_t

    {-# LINE 56 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_OBJECT_COPY_DEFAULT" h5p_OBJECT_COPY_DEFAULT
      :: HId_t

    {-# LINE 57 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_LINK_CREATE_DEFAULT" h5p_LINK_CREATE_DEFAULT
      :: HId_t

    {-# LINE 58 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    foreign import ccall "inline_H5P_LINK_ACCESS_DEFAULT" h5p_LINK_ACCESS_DEFAULT
      :: HId_t

    {-# LINE 59 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Default value for all property list classes
    h5p_DEFAULT :: HId_t
    h5p_DEFAULT :: HId_t
    h5p_DEFAULT = Int64 -> HId_t
    HId_t (Int64
    0)

    {-# LINE 62 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    h5p_CRT_ORDER_TRACKED = 1
    h5p_CRT_ORDER_TRACKED :: (Num a) => a

    {-# LINE 64 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5p_CRT_ORDER_INDEXED = 2
    h5p_CRT_ORDER_INDEXED :: (Num a) => a

    {-# LINE 65 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- /* Define property list class callback function pointer types */

    -- |
    -- > typedef herr_t (*H5P_cls_create_func_t)(hid_t prop_id, void *create_data);
    type H5P_cls_create_func_t a = FunPtr (HId_t -> Ptr a -> IO HErr_t)

    -- |
    -- > typedef herr_t (*H5P_cls_copy_func_t)(hid_t new_prop_id, hid_t old_prop_id,
    -- >                                       void *copy_data);
    type H5P_cls_copy_func_t a = FunPtr (HId_t -> HId_t -> Ptr a -> IO HErr_t)

    -- |
    -- > typedef herr_t (*H5P_cls_close_func_t)(hid_t prop_id, void *close_data);
    type H5P_cls_close_func_t a = FunPtr (HId_t -> Ptr a -> IO HErr_t)

    -- |Parameters:
    --
    -- [@ prop_id       :: 'HId_t'        @]  The ID of the property list being created.
    --
    -- [@ name          :: 'CString'      @]  The name of the property being modified.
    --
    -- [@ size          :: 'CSize'        @]  The size of the property value
    --
    -- [@ initial_value :: 'InOut' a      @]  The initial value for the property being created. (The 'default' value passed to 'h5p_register2')
    --
    -- > typedef herr_t (*H5P_prp_create_func_t)(hid_t prop_id, const char *name,
    -- >         size_t size, void *initial_value);
    type H5P_prp_create_func_t a = FunPtr (CString -> CSize -> InOut a -> IO HErr_t)

    -- |Parameters:
    --
    -- [@ prop_id   :: 'HId_t'   @] The ID of the property list being modified.
    --
    -- [@ name      :: 'CString' @] The name of the property being modified.
    --
    -- [@ size      :: 'CSize'   @] The size of the property value
    --
    -- [@ new_value :: 'InOut' a @] The value being set for the property.
    --
    -- The 'set' routine may modify the value to be set and those changes will be
    -- stored as the value of the property.  If the 'set' routine returns a
    -- negative value, the new property value is not copied into the property and
    -- the property list set routine returns an error value.

    -- > typedef herr_t (*H5P_prp_set_func_t)(hid_t prop_id, const char *name,
    -- >     size_t size, void *value);
    type H5P_prp_set_func_t    a = FunPtr (HId_t -> CString -> CSize -> InOut a -> IO HErr_t)

    -- |Parameters:
    --
    -- [@ prop_id :: 'HId_t'   @] The ID of the property list being queried.
    --
    -- [@ name    :: 'CString' @] The name of the property being queried.
    --
    -- [@ size    :: 'CSize'   @] The size of the property value
    --
    -- [@ value   :: 'InOut' a @] The value being retrieved for the property.
    --
    -- The 'get' routine may modify the value to be retrieved and those changes
    -- will be returned to the calling function.  If the 'get' routine returns a
    -- negative value, the property value is returned and the property list get
    -- routine returns an error value.
    --
    -- > typedef herr_t (*H5P_prp_get_func_t)(hid_t prop_id, const char *name,
    -- >     size_t size, void *value);
    type H5P_prp_get_func_t    a = FunPtr (HId_t -> CString -> CSize -> InOut a -> IO HErr_t)

    -- |Parameters:
    --
    -- [@ prop_id :: 'HId_t'   @] The ID of the property list the property is deleted from.
    -- [@ name    :: 'CString' @] The name of the property being deleted.
    -- [@ size    :: 'CSize'   @] The size of the property value
    -- [@ value   :: 'InOut' a @] The value of the property being deleted.
    --
    -- The 'delete' routine may modify the value passed in, but the value is not
    -- used by the library when the 'delete' routine returns.  If the
    -- 'delete' routine returns a negative value, the property list deletion
    -- routine returns an error value but the property is still deleted.
    --
    -- > typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
    -- >     size_t size, void *value);
    type H5P_prp_delete_func_t a = FunPtr (HId_t -> CString -> CSize -> InOut a -> IO HErr_t)

    -- |Parameters:
    --
    -- [@ name  :: 'CString' @] The name of the property being copied.
    --
    -- [@ size  :: 'CSize'   @] The size of the property value
    --
    -- [@ value :: 'InOut' a @] The value of the property being copied.
    --
    -- The 'copy' routine may modify the value to be copied and those changes will be
    -- stored as the value of the property.  If the 'copy' routine returns a
    -- negative value, the new property value is not copied into the property and
    -- the property list copy routine returns an error value.
    --
    -- > typedef herr_t (*H5P_prp_copy_func_t)(const char *name, size_t size,
    -- >     void *value);
    type H5P_prp_copy_func_t   a = FunPtr (CString -> CSize -> InOut a -> IO HErr_t)

    -- |Parameters:
    --
    -- [@ value1 :: 'In' a  @]    The value of the first property being compared.
    --
    -- [@ value2 :: 'In' a  @]    The value of the second property being compared.
    --
    -- [@ size   :: 'CSize' @]    The size of the property value
    --
    -- The 'compare' routine may not modify the values to be compared.  The
    -- 'compare' routine should return a positive value if 'value1' is greater than
    -- 'value2', a negative value if 'value2' is greater than 'value1' and zero if
    -- 'value1' and 'value2' are equal.
    --
    -- > typedef int (*H5P_prp_compare_func_t)( void *value1, void *value2,
    -- >     size_t size);
    type H5P_prp_compare_func_t a = FunPtr (In a -> In a -> CSize -> IO CInt)

    -- |Parameters:
    --
    -- [@ name  :: 'CString' @] The name of the property being closed.
    --
    -- [@ size  :: 'CSize'   @] The size of the property value
    --
    -- [@ value :: 'In' a    @] The value of the property being closed.
    --
    -- > typedef herr_t (*H5P_prp_close_func_t)(const char *name, size_t size,
    -- >     void *value);
    type H5P_prp_close_func_t a = FunPtr (CString -> CSize -> InOut a -> IO HErr_t)

    -- |Type of operator callback for 'h5p_iterate'.
    --
    -- The operation receives the property list or class identifier for the object
    -- being iterated over, 'id', the name of the current property within the object,
    -- 'name', and the pointer to the operator data passed in to H5Piterate, 'iter_data'.
    --
    -- The return values from an operator are:
    --
    -- * Zero causes the iterator to continue, returning zero when all properties
    --   have been processed.
    --
    -- * Positive causes the iterator to immediately return that positive value,
    --   indicating short-circuit success. The iterator can be restarted at the
    --   index of the next property.
    --
    -- * Negative causes the iterator to immediately return that value, indicating
    --   failure. The iterator can be restarted at the index of the next
    --   property.
    --
    -- > typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
    type H5P_iterate_t a = FunPtr (HId_t -> CString -> InOut a -> IO HErr_t)

    -- |Actual IO mode property
    newtype H5D_mpio_actual_chunk_opt_mode_t = H5D_mpio_actual_chunk_opt_mode_t Word32 deriving (Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> IO H5D_mpio_actual_chunk_opt_mode_t
    Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t
    Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    H5D_mpio_actual_chunk_opt_mode_t -> Int
    (H5D_mpio_actual_chunk_opt_mode_t -> Int)
    -> (H5D_mpio_actual_chunk_opt_mode_t -> Int)
    -> (Ptr H5D_mpio_actual_chunk_opt_mode_t
        -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t)
    -> (Ptr H5D_mpio_actual_chunk_opt_mode_t
        -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ())
    -> (forall b. Ptr b -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t)
    -> (forall b.
        Ptr b -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ())
    -> (Ptr H5D_mpio_actual_chunk_opt_mode_t
        -> IO H5D_mpio_actual_chunk_opt_mode_t)
    -> (Ptr H5D_mpio_actual_chunk_opt_mode_t
        -> H5D_mpio_actual_chunk_opt_mode_t -> IO ())
    -> Storable H5D_mpio_actual_chunk_opt_mode_t
    forall b. Ptr b -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t
    forall b. Ptr b -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    forall a.
    (a -> Int)
    -> (a -> Int)
    -> (Ptr a -> Int -> IO a)
    -> (Ptr a -> Int -> a -> IO ())
    -> (forall b. Ptr b -> Int -> IO a)
    -> (forall b. Ptr b -> Int -> a -> IO ())
    -> (Ptr a -> IO a)
    -> (Ptr a -> a -> IO ())
    -> Storable a
    $csizeOf :: H5D_mpio_actual_chunk_opt_mode_t -> Int
    sizeOf :: H5D_mpio_actual_chunk_opt_mode_t -> Int
    $calignment :: H5D_mpio_actual_chunk_opt_mode_t -> Int
    alignment :: H5D_mpio_actual_chunk_opt_mode_t -> Int
    $cpeekElemOff :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t
    peekElemOff :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t
    $cpokeElemOff :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    pokeElemOff :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    $cpeekByteOff :: forall b. Ptr b -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t
    peekByteOff :: forall b. Ptr b -> Int -> IO H5D_mpio_actual_chunk_opt_mode_t
    $cpokeByteOff :: forall b. Ptr b -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    pokeByteOff :: forall b. Ptr b -> Int -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    $cpeek :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> IO H5D_mpio_actual_chunk_opt_mode_t
    peek :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> IO H5D_mpio_actual_chunk_opt_mode_t
    $cpoke :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    poke :: Ptr H5D_mpio_actual_chunk_opt_mode_t
    -> H5D_mpio_actual_chunk_opt_mode_t -> IO ()
    Storable, Int -> H5D_mpio_actual_chunk_opt_mode_t -> ShowS
    [H5D_mpio_actual_chunk_opt_mode_t] -> ShowS
    H5D_mpio_actual_chunk_opt_mode_t -> String
    (Int -> H5D_mpio_actual_chunk_opt_mode_t -> ShowS)
    -> (H5D_mpio_actual_chunk_opt_mode_t -> String)
    -> ([H5D_mpio_actual_chunk_opt_mode_t] -> ShowS)
    -> Show H5D_mpio_actual_chunk_opt_mode_t
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> H5D_mpio_actual_chunk_opt_mode_t -> ShowS
    showsPrec :: Int -> H5D_mpio_actual_chunk_opt_mode_t -> ShowS
    $cshow :: H5D_mpio_actual_chunk_opt_mode_t -> String
    show :: H5D_mpio_actual_chunk_opt_mode_t -> String
    $cshowList :: [H5D_mpio_actual_chunk_opt_mode_t] -> ShowS
    showList :: [H5D_mpio_actual_chunk_opt_mode_t] -> ShowS
    Show)

    {-# LINE 220 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |The default value, H5D_MPIO_NO_CHUNK_OPTIMIZATION, is used for all I/O
    -- operations that do not use chunk optimizations, including non-collective
    -- I/O and contiguous collective I/O.
    h5d_MPIO_NO_CHUNK_OPTIMIZATION :: H5D_mpio_actual_chunk_opt_mode_t
    h5d_MPIO_NO_CHUNK_OPTIMIZATION :: H5D_mpio_actual_chunk_opt_mode_t
    h5d_MPIO_NO_CHUNK_OPTIMIZATION = Word32 -> H5D_mpio_actual_chunk_opt_mode_t
    H5D_mpio_actual_chunk_opt_mode_t (Word32
    0)

    {-# LINE 225 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_LINK_CHUNK :: H5D_mpio_actual_chunk_opt_mode_t
    h5d_MPIO_LINK_CHUNK = H5D_mpio_actual_chunk_opt_mode_t (1)

    {-# LINE 226 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_MULTI_CHUNK :: H5D_mpio_actual_chunk_opt_mode_t
    h5d_MPIO_MULTI_CHUNK = H5D_mpio_actual_chunk_opt_mode_t (2)

    {-# LINE 227 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |The following four values are conveniently defined as a bit field so that
    -- we can switch from the default to indpendent or collective and then to
    -- mixed without having to check the original value.
    newtype H5D_mpio_actual_io_mode_t = H5D_mpio_actual_io_mode_t Word32 deriving (Ptr H5D_mpio_actual_io_mode_t -> IO H5D_mpio_actual_io_mode_t
    Ptr H5D_mpio_actual_io_mode_t
    -> Int -> IO H5D_mpio_actual_io_mode_t
    Ptr H5D_mpio_actual_io_mode_t
    -> Int -> H5D_mpio_actual_io_mode_t -> IO ()
    Ptr H5D_mpio_actual_io_mode_t -> H5D_mpio_actual_io_mode_t -> IO ()
    H5D_mpio_actual_io_mode_t -> Int
    (H5D_mpio_actual_io_mode_t -> Int)
    -> (H5D_mpio_actual_io_mode_t -> Int)
    -> (Ptr H5D_mpio_actual_io_mode_t
        -> Int -> IO H5D_mpio_actual_io_mode_t)
    -> (Ptr H5D_mpio_actual_io_mode_t
        -> Int -> H5D_mpio_actual_io_mode_t -> IO ())
    -> (forall b. Ptr b -> Int -> IO H5D_mpio_actual_io_mode_t)
    -> (forall b. Ptr b -> Int -> H5D_mpio_actual_io_mode_t -> IO ())
    -> (Ptr H5D_mpio_actual_io_mode_t -> IO H5D_mpio_actual_io_mode_t)
    -> (Ptr H5D_mpio_actual_io_mode_t
        -> H5D_mpio_actual_io_mode_t -> IO ())
    -> Storable H5D_mpio_actual_io_mode_t
    forall b. Ptr b -> Int -> IO H5D_mpio_actual_io_mode_t
    forall b. Ptr b -> Int -> H5D_mpio_actual_io_mode_t -> IO ()
    forall a.
    (a -> Int)
    -> (a -> Int)
    -> (Ptr a -> Int -> IO a)
    -> (Ptr a -> Int -> a -> IO ())
    -> (forall b. Ptr b -> Int -> IO a)
    -> (forall b. Ptr b -> Int -> a -> IO ())
    -> (Ptr a -> IO a)
    -> (Ptr a -> a -> IO ())
    -> Storable a
    $csizeOf :: H5D_mpio_actual_io_mode_t -> Int
    sizeOf :: H5D_mpio_actual_io_mode_t -> Int
    $calignment :: H5D_mpio_actual_io_mode_t -> Int
    alignment :: H5D_mpio_actual_io_mode_t -> Int
    $cpeekElemOff :: Ptr H5D_mpio_actual_io_mode_t
    -> Int -> IO H5D_mpio_actual_io_mode_t
    peekElemOff :: Ptr H5D_mpio_actual_io_mode_t
    -> Int -> IO H5D_mpio_actual_io_mode_t
    $cpokeElemOff :: Ptr H5D_mpio_actual_io_mode_t
    -> Int -> H5D_mpio_actual_io_mode_t -> IO ()
    pokeElemOff :: Ptr H5D_mpio_actual_io_mode_t
    -> Int -> H5D_mpio_actual_io_mode_t -> IO ()
    $cpeekByteOff :: forall b. Ptr b -> Int -> IO H5D_mpio_actual_io_mode_t
    peekByteOff :: forall b. Ptr b -> Int -> IO H5D_mpio_actual_io_mode_t
    $cpokeByteOff :: forall b. Ptr b -> Int -> H5D_mpio_actual_io_mode_t -> IO ()
    pokeByteOff :: forall b. Ptr b -> Int -> H5D_mpio_actual_io_mode_t -> IO ()
    $cpeek :: Ptr H5D_mpio_actual_io_mode_t -> IO H5D_mpio_actual_io_mode_t
    peek :: Ptr H5D_mpio_actual_io_mode_t -> IO H5D_mpio_actual_io_mode_t
    $cpoke :: Ptr H5D_mpio_actual_io_mode_t -> H5D_mpio_actual_io_mode_t -> IO ()
    poke :: Ptr H5D_mpio_actual_io_mode_t -> H5D_mpio_actual_io_mode_t -> IO ()
    Storable, Int -> H5D_mpio_actual_io_mode_t -> ShowS
    [H5D_mpio_actual_io_mode_t] -> ShowS
    H5D_mpio_actual_io_mode_t -> String
    (Int -> H5D_mpio_actual_io_mode_t -> ShowS)
    -> (H5D_mpio_actual_io_mode_t -> String)
    -> ([H5D_mpio_actual_io_mode_t] -> ShowS)
    -> Show H5D_mpio_actual_io_mode_t
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> H5D_mpio_actual_io_mode_t -> ShowS
    showsPrec :: Int -> H5D_mpio_actual_io_mode_t -> ShowS
    $cshow :: H5D_mpio_actual_io_mode_t -> String
    show :: H5D_mpio_actual_io_mode_t -> String
    $cshowList :: [H5D_mpio_actual_io_mode_t] -> ShowS
    showList :: [H5D_mpio_actual_io_mode_t] -> ShowS
    Show)

    {-# LINE 232 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |NO_COLLECTIVE means that either collective I/O wasn't requested or that
    -- no I/O took place.
    h5d_MPIO_NO_COLLECTIVE :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_NO_COLLECTIVE :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_NO_COLLECTIVE = Word32 -> H5D_mpio_actual_io_mode_t
    H5D_mpio_actual_io_mode_t (Word32
    0)

    {-# LINE 236 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |CHUNK_INDEPENDENT means that collective I/O was requested, but the
    -- chunk optimization scheme chose independent I/O for each chunk.
    h5d_MPIO_CHUNK_INDEPENDENT :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_CHUNK_INDEPENDENT :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_CHUNK_INDEPENDENT = H5D_mpio_actual_io_mode_t (Word32
    1)

    {-# LINE 240 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_CHUNK_COLLECTIVE :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_CHUNK_COLLECTIVE = H5D_mpio_actual_io_mode_t (2)

    {-# LINE 241 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_CHUNK_MIXED :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_CHUNK_MIXED = H5D_mpio_actual_io_mode_t (3)

    {-# LINE 242 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |The contiguous case is separate from the bit field.
    h5d_MPIO_CONTIGUOUS_COLLECTIVE :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_CONTIGUOUS_COLLECTIVE :: H5D_mpio_actual_io_mode_t
    h5d_MPIO_CONTIGUOUS_COLLECTIVE = Word32 -> H5D_mpio_actual_io_mode_t
    H5D_mpio_actual_io_mode_t (Word32
    4)

    {-# LINE 245 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- | Broken collective IO property
    newtype H5D_mpio_no_collective_cause_t = H5D_mpio_no_collective_cause_t Word32 deriving (Storable, Show)

    {-# LINE 248 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    h5d_MPIO_COLLECTIVE :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_COLLECTIVE :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_COLLECTIVE = H5D_mpio_no_collective_cause_t (0)

    {-# LINE 250 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_SET_INDEPENDENT :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_SET_INDEPENDENT = H5D_mpio_no_collective_cause_t (1)

    {-# LINE 251 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_DATATYPE_CONVERSION :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_DATATYPE_CONVERSION = H5D_mpio_no_collective_cause_t (2)

    {-# LINE 252 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_DATA_TRANSFORMS :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_DATA_TRANSFORMS = H5D_mpio_no_collective_cause_t (4)

    {-# LINE 253 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES = H5D_mpio_no_collective_cause_t (16)

    {-# LINE 254 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET = H5D_mpio_no_collective_cause_t (32)

    {-# LINE 255 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- /*********************/
    -- /* Public Prototypes */
    -- /*********************/

    -- /* Generic property list routines */

    -- |Create a new property list class.  Allocates memory and attaches
    -- a class to the property list class hierarchy.
    --
    -- Parameters
    --
    -- [@ parent      :: 'HId_t'                   @] Property list class ID of parent class
    --
    -- [@ name        :: 'CString'                 @] Name of class we are creating
    --
    -- [@ cls_create  :: 'H5P_cls_create_func_t' a @] The callback function to call when each property list in this class is created.
    --
    -- [@ create_data :: 'InOut' a                 @] Pointer to user data to pass along to class creation callback.
    --
    -- [@ cls_copy    :: 'H5P_cls_copy_func_t' b   @] The callback function to call when each property list in this class is copied.
    --
    -- [@ copy_data   :: 'InOut' b                 @] Pointer to user data to pass along to class copy callback.
    --
    -- [@ cls_close   :: 'H5P_cls_close_func_t' c  @] The callback function to call when each property list in this class is closed.
    --
    -- [@ close_data  :: 'InOut' c                 @] Pointer to user data to pass along to class close callback.
    --
    -- Returns a valid property list class ID on success, NULL on failure.
    --
    -- > hid_t H5Pcreate_class(hid_t parent, const char *name,
    -- >     H5P_cls_create_func_t cls_create, void *create_data,
    -- >     H5P_cls_copy_func_t cls_copy, void *copy_data,
    -- >     H5P_cls_close_func_t cls_close, void *close_data);
    foreign import ccall "H5Pcreate_class" h5p_create_class
      :: HId_t -> CString -> H5P_cls_create_func_t a -> Ptr a -> H5P_cls_copy_func_t b -> Ptr b -> H5P_cls_close_func_t c -> Ptr c -> IO HId_t
    foreign import ccall "&H5Pcreate_class" p_H5Pcreate_class
      :: FunPtr (HId_t -> CString -> H5P_cls_create_func_t a -> Ptr a -> H5P_cls_copy_func_t b -> Ptr b -> H5P_cls_close_func_t c -> Ptr c -> IO HId_t)

    {-# LINE 291 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This routine retrieves the name of a generic property list class.
    -- The pointer to the name must be 'free'd by the user for successful calls.
    --
    -- Parameters
    --
    -- [@ pclass_id :: 'HId_t' @]   Property class to query
    --
    -- On success, returns a pointer to a malloc'ed string containing the class name
    -- On failure, returns NULL.
    --
    -- > char *H5Pget_class_name(hid_t pclass_id);
    foreign import ccall "H5Pget_class_name" h5p_get_class_name
      :: HId_t -> IO CString
    foreign import ccall "&H5Pget_class_name" p_H5Pget_class_name
      :: FunPtr (HId_t -> IO CString)

    {-# LINE 304 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to create a new property list of a property list class.
    --
    -- Creates a property list of a given class.  If a 'create' callback
    -- exists for the property list class, it is called before the
    -- property list is passed back to the user.  If 'create' callbacks exist for
    -- any individual properties in the property list, they are called before the
    -- class 'create' callback.
    --
    -- Parameters:
    --
    -- [@ cls_id :: 'HId_t' @]  Property list class create list from
    --
    -- Returns a valid property list ID on success, a negative value on failure.
    --
    -- > hid_t H5Pcreate(hid_t cls_id);
    foreign import ccall "H5Pcreate" h5p_create
      :: HId_t -> IO HId_t
    foreign import ccall "&H5Pcreate" p_H5Pcreate
      :: FunPtr (HId_t -> IO HId_t)

    {-# LINE 321 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to register a new property in a property list class.
    --
    -- Registers a new property with a property list class.  The property will
    -- exist in all property list objects of that class after this routine is
    -- finished.  The name of the property must not already exist.  The default
    -- property value must be provided and all new property lists created with this
    -- property will have the property value set to the default provided.  Any of
    -- the callback routines may be set to NULL if they are not needed.
    --
    -- Zero-sized properties are allowed and do not store any data in the
    -- property list.  These may be used as flags to indicate the presence or
    -- absence of a particular piece of information.  The 'default' pointer for a
    -- zero-sized property may be set to NULL.  The property 'create' & 'close'
    -- callbacks are called for zero-sized properties, but the 'set' and 'get'
    -- callbacks are never called.
    --
    -- The 'create' callback is called when a new property list with this
    -- property is being created.  'H5P_prp_create_func_t' is defined as:
    --
    -- The 'create' routine may modify the value to be set and those changes will
    -- be stored as the initial value of the property.  If the 'create' routine
    -- returns a negative value, the new property value is not copied into the
    -- property and the property list creation routine returns an error value.
    --
    -- The 'set' callback is called before a new value is copied into the
    -- property.  The 'set' routine may modify the value to be set and those
    -- changes will be stored as the value of the property.  If the 'set' routine
    -- returns a negative value, the new property value is not copied into the
    -- property and the property list set routine returns an error value.
    --
    -- The 'get' callback is called before a value is retrieved from the
    -- property.  The 'get' routine may modify the value to be retrieved and
    -- those changes will be returned to the calling function.  If the 'get'
    -- routine returns a negative value, the property value is returned and
    -- the property list get routine returns an error value.
    --
    -- The 'delete' callback is called when a property is deleted from a
    -- property list.  The 'delete' routine may modify the value passed in,
    -- but the value is not used by the library when the 'delete' routine
    -- returns.  If the 'delete' routine returns a negative value, the
    -- property list deletion routine returns an error value but the property
    -- is still deleted.
    --
    -- The 'copy' callback is called when a property list with this property
    -- is copied.  The 'copy' routine may modify the value to be copied and
    -- those changes will be stored as the value of the property.  If the
    -- 'copy' routine returns a negative value, the new property value is not
    -- copied into the property and the property list copy routine returns an
    -- error value.
    --
    -- The 'compare' callback is called when a property list with this property
    -- is compared to another property list.  The 'compare' routine may not
    -- modify the values to be compared.  The 'compare' routine should return
    -- a positive value if 'value1' is greater than 'value2', a negative value
    -- if 'value2' is greater than 'value1' and zero if 'value1' and 'value2'
    -- are equal.
    --
    -- The 'close' callback is called when a property list with this property
    -- is being destroyed.  The 'close' routine may modify the value passed in,
    -- but the value is not used by the library when the 'close' routine returns.
    -- If the 'close' routine returns a negative value, the property list close
    -- routine returns an error value but the property list is still closed.
    --
    -- Parameters:
    --
    -- [@ class       :: HId_t                      @]        IN: Property list class to close
    --
    -- [@ name        :: CString                    @]        IN: Name of property to register
    --
    -- [@ size        :: CSize                      @]        IN: Size of property in bytes
    --
    -- [@ def_value   :: In a                       @]        IN: Pointer to buffer containing default value for property in newly created property lists
    --
    -- [@ prp_create  :: H5P_prp_create_func_t a    @]        IN: Function pointer to property creation callback
    --
    -- [@ prp_set     :: H5P_prp_set_func_t a       @]        IN: Function pointer to property set callback
    --
    -- [@ prp_get     :: H5P_prp_get_func_t a       @]        IN: Function pointer to property get callback
    --
    -- [@ prp_delete  :: H5P_prp_delete_func_t a    @]        IN: Function pointer to property delete callback
    --
    -- [@ prp_copy    :: H5P_prp_copy_func_t a      @]        IN: Function pointer to property copy callback
    --
    -- [@ prp_cmp     :: H5P_prp_compare_func_t a   @]        IN: Function pointer to property compare callback
    --
    -- [@ prp_close   :: H5P_prp_close_func_t a     @]        IN: Function pointer to property close callback
    --
    -- Returns non-negative on success, negative on failure.
    --
    --  COMMENTS, BUGS, ASSUMPTIONS:
    --
    -- The 'set' callback function may be useful to range check the value being
    -- set for the property or may perform some tranformation/translation of the
    -- value set.  The 'get' callback would then [probably] reverse the
    -- transformation, etc.  A single 'get' or 'set' callback could handle
    -- multiple properties by performing different actions based on the property
    -- name or other properties in the property list.
    --
    -- I would like to say \"the property list is not closed\" when a 'close'
    -- routine fails, but I don't think that's possible due to other properties in
    -- the list being successfully closed & removed from the property list.  I
    -- suppose that it would be possible to just remove the properties which have
    -- successful 'close' callbacks, but I'm not happy with the ramifications
    -- of a mangled, un-closable property list hanging around...  Any comments? -QAK
    --
    -- > herr_t H5Pregister2(hid_t cls_id, const char *name, size_t size,
    -- >     void *def_value, H5P_prp_create_func_t prp_create,
    -- >     H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
    -- >     H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
    -- >     H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
    foreign import ccall "H5Pregister2" h5p_register2
      :: HId_t -> CString -> CSize -> In a -> H5P_prp_create_func_t a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_compare_func_t a -> H5P_prp_close_func_t a -> IO HErr_t
    foreign import ccall "&H5Pregister2" p_H5Pregister2
      :: FunPtr (HId_t -> CString -> CSize -> In a -> H5P_prp_create_func_t a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_compare_func_t a -> H5P_prp_close_func_t a -> IO HErr_t)

    {-# LINE 433 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to insert a new property in a property list.
    --
    -- Inserts a temporary property into a property list.  The property will
    -- exist only in this property list object.  The name of the property must not
    -- already exist.  The value must be provided unless the property is zero-
    -- sized.  Any of the callback routines may be set to NULL if they are not
    -- needed.
    --
    -- Zero-sized properties are allowed and do not store any data in the
    -- property list.  These may be used as flags to indicate the presence or
    -- absence of a particular piece of information.  The 'value' pointer for a
    -- zero-sized property may be set to NULL.  The property 'close' callback is
    -- called for zero-sized properties, but the 'set' and 'get' callbacks are
    -- never called.
    --
    -- There is no 'create' callback routine for temporary property list
    -- objects, the initial value is assumed to have any necessary setup already
    -- performed on it.
    -- Aside from that, the callbacks are the same as for 'h5p_register'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pinsert2(hid_t plist_id, const char *name, size_t size,
    -- >     void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
    -- >     H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
    -- >     H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
    foreign import ccall "H5Pinsert2" h5p_insert2
      :: HId_t -> CString -> CSize -> In a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_compare_func_t a -> H5P_prp_close_func_t a -> IO HErr_t
    foreign import ccall "&H5Pinsert2" p_H5Pinsert2
      :: FunPtr (HId_t -> CString -> CSize -> In a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_compare_func_t a -> H5P_prp_close_func_t a -> IO HErr_t)

    {-# LINE 461 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to set a property's value in a property list.
    --
    -- Sets a new value for a property in a property list.  The property name
    -- must exist or this routine will fail.  If there is a 'set' callback routine
    -- registered for this property, the 'value' will be passed to that routine and
    -- any changes to the 'value' will be used when setting the property value.
    -- The information pointed at by the 'value' pointer (possibly modified by the
    -- 'set' callback) is copied into the property list value and may be changed
    -- by the application making the H5Pset call without affecting the property
    -- value.
    --
    -- If the 'set' callback routine returns an error, the property value will
    -- not be modified.  This routine may not be called for zero-sized properties
    -- and will return an error in that case.
    --
    -- Parameters:
    --
    -- [@ plist_id :: 'HId_t'   @]    Property list to find property in
    --
    -- [@ name     :: 'CString' @]    Name of property to set
    --
    -- [@ value    :: 'In' a    @]    Pointer to the value for the property
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset(hid_t plist_id, const char *name, void *value);
    foreign import ccall "H5Pset" h5p_set
      :: HId_t -> CString -> In a -> IO HErr_t
    foreign import ccall "&H5Pset" p_H5Pset
      :: FunPtr (HId_t -> CString -> In a -> IO HErr_t)

    {-# LINE 489 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to query the existence of a property in a property object.
    --
    -- Parameters:
    --
    -- [@ id   :: 'HId_t'   @]    Property object ID to check
    --
    -- [@ name :: 'CString' @]    Name of property to check for
    --
    -- > htri_t H5Pexist(hid_t plist_id, const char *name);
    foreign import ccall "H5Pexist" h5p_exist
      :: HId_t -> CString -> IO HTri_t
    foreign import ccall "&H5Pexist" p_H5Pexist
      :: FunPtr (HId_t -> CString -> IO HTri_t)

    {-# LINE 500 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to query the size of a property in a property list or class.
    --
    -- This routine retrieves the size of a property's value in bytes.  Zero-
    -- sized properties are allowed and return a value of 0.  This function works
    -- for both property lists and classes.
    --
    -- Parameters:
    --
    -- [@ id   :: 'HId_t'       @]  ID of property list or class to check
    --
    -- [@ name :: 'CString'     @]  Name of property to query
    --
    -- [@ size :: 'Out' 'CSize' @]  Size of property
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_size(hid_t id, const char *name, size_t *size);
    foreign import ccall "H5Pget_size" h5p_get_size
      :: HId_t -> CString -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_size" p_H5Pget_size
      :: FunPtr (HId_t -> CString -> Out CSize -> IO HErr_t)

    {-# LINE 519 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to query the size of a property in a property list or class.
    --
    -- This routine retrieves the number of properties in a property list or
    -- class.  If a property class ID is given, the number of registered properties
    -- in the class is returned in 'nprops'.  If a property list ID is given, the
    -- current number of properties in the list is returned in 'nprops'.
    --
    -- Parameters:
    --
    -- [@ id     'HId_t'       @]   ID of Property list or class to check
    --
    -- [@ nprops 'Out' 'CSize' @]   Number of properties in the property object
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_nprops(hid_t id, size_t *nprops);
    foreign import ccall "H5Pget_nprops" h5p_get_nprops
      :: HId_t -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_nprops" p_H5Pget_nprops
      :: FunPtr (HId_t -> Out CSize -> IO HErr_t)

    {-# LINE 537 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to query the name of a generic property list class
    --
    -- This routine retrieves the name of a generic property list class.
    -- The pointer to the name must be free'd by the user for successful calls.
    --
    -- Parameters:
    --
    -- [@ pclass_id :: 'HId_t' @] Property class to query
    --
    -- Returns a pointer to a malloc'ed string containing the class name, or
    -- NULL on failure.
    --
    -- > hid_t H5Pget_class(hid_t plist_id);
    foreign import ccall "H5Pget_class" h5p_get_class
      :: HId_t -> IO HId_t
    foreign import ccall "&H5Pget_class" p_H5Pget_class
      :: FunPtr (HId_t -> IO HId_t)

    {-# LINE 552 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This routine retrieves an ID for the parent class of a property class.
    --
    -- Parameters:
    --
    -- [@ pclass_id :: 'HId_t' @] Property class to query
    --
    -- Returns the ID of the parent class object or NULL on failure.
    --
    -- > hid_t H5Pget_class_parent(hid_t pclass_id);
    foreign import ccall "H5Pget_class_parent" h5p_get_class_parent
      :: HId_t -> IO HId_t
    foreign import ccall "&H5Pget_class_parent" p_H5Pget_class_parent
      :: FunPtr (HId_t -> IO HId_t)

    {-# LINE 563 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Routine to query the value of a property in a property list.
    --
    -- Retrieves a copy of the value for a property in a property list.  The
    -- property name must exist or this routine will fail.  If there is a
    -- 'get' callback routine registered for this property, the copy of the
    -- value of the property will first be passed to that routine and any changes
    -- to the copy of the value will be used when returning the property value
    -- from this routine.
    --
    -- If the 'get' callback routine returns an error, 'value' will not be
    -- modified and this routine will return an error.  This routine may not be
    -- called for zero-sized properties.
    --
    -- Parameters:
    --
    -- [@ plist_id :: 'HId_t'   @]  Property list to check
    --
    -- [@ name     :: 'CString' @]  Name of property to query
    --
    -- [@ value    :: 'Out' a   @]  Pointer to the buffer for the property value
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget(hid_t plist_id, const char *name, void * value);
    foreign import ccall "H5Pget" h5p_get
      :: HId_t -> CString -> Out a -> IO HErr_t
    foreign import ccall "&H5Pget" p_H5Pget
      :: FunPtr (HId_t -> CString -> Out a -> IO HErr_t)

    {-# LINE 589 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Determines whether two property lists or two property classes are equal.
    --
    -- Parameters:
    --
    -- [@ id1 :: 'HId_t' @] Property list or class ID to compare
    --
    -- [@ id2 :: 'HId_t' @] Property list or class ID to compare
    --
    -- > htri_t H5Pequal(hid_t id1, hid_t id2);
    foreign import ccall "H5Pequal" h5p_equal
      :: HId_t -> HId_t -> IO HTri_t
    foreign import ccall "&H5Pequal" p_H5Pequal
      :: FunPtr (HId_t -> HId_t -> IO HTri_t)

    {-# LINE 600 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This routine queries whether a property list is a member of the property
    -- list class.
    --
    -- Parameters:
    --
    -- [@ plist_id  :: 'HId_t' @] Property list to query
    --
    -- [@ pclass_id :: 'HId_t' @] Property class to query
    --
    -- > htri_t H5Pisa_class(hid_t plist_id, hid_t pclass_id);
    foreign import ccall "H5Pisa_class" h5p_isa_class
      :: HId_t -> HId_t -> IO HTri_t
    foreign import ccall "&H5Pisa_class" p_H5Pisa_class
      :: FunPtr (HId_t -> HId_t -> IO HTri_t)

    {-# LINE 612 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This routine iterates over the properties in the property object specified
    -- with ID.  The properties in both property lists and classes may be iterated
    -- over with this function.  For each property in the object, the 'iter_data' and
    -- some additional information, specified below, are passed to the 'iter_func'
    -- function.  The iteration begins with the 'idx' property in the object and the
    -- next element to be processed by the operator is returned in 'idx'.  If 'idx' is
    -- NULL, then the iterator starts at the first property; since no stopping point
    -- is returned in this case, the iterator cannot be restarted if one of the calls
    -- to its operator returns non-zero.  The 'idx' value is 0-based (ie. to start at
    -- the "first" property, the 'idx' value should be 0).
    --
    -- 'h5p_iterate' assumes that the properties in the object identified by ID remains
    -- unchanged through the iteration.  If the membership changes during the
    -- iteration, the function's behavior is undefined.
    --
    -- Parameters:
    --
    -- [@ id        :: 'HId_t'           @] ID of property object to iterate over
    --
    -- [@ idx       :: 'InOut' 'CInt'    @] Index of the property to begin with
    --
    -- [@ iter_func :: 'H5P_iterate_t' a @] Function pointer to function to be called with each property iterated over.
    --
    -- [@ iter_data :: 'InOut' a         @] Pointer to iteration data from user
    --
    -- Returns the return value of the last call to 'iter_func' if it was
    -- non-zero, or zero if all properties have been processed.  Returns a
    -- negative value on failure.
    --
    -- > int H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func,
    -- >             void *iter_data);
    foreign import ccall "H5Piterate" h5p_iterate
      :: HId_t -> InOut CInt -> H5P_iterate_t a -> InOut a -> IO CInt
    foreign import ccall "&H5Piterate" p_H5Piterate
      :: FunPtr (HId_t -> InOut CInt -> H5P_iterate_t a -> InOut a -> IO CInt)

    {-# LINE 645 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Copies a property from one property list or class to another.
    --
    -- If a property is copied from one class to another, all the property
    -- information will be first deleted from the destination class and then the
    -- property information will be copied from the source class into the
    -- destination class.
    --
    -- If a property is copied from one list to another, the property will be
    -- first deleted from the destination list (generating a call to the 'close'
    -- callback for the property, if one exists) and then the property is copied
    -- from the source list to the destination list (generating a call to the
    -- 'copy' callback for the property, if one exists).
    --
    -- If the property does not exist in the destination class or list, this call
    -- is equivalent to calling H5Pregister2 or H5Pinsert2 (for a class or list, as
    -- appropriate) and the 'create' callback will be called in the case of the
    -- property being copied into a list (if such a callback exists for the
    -- property).
    --
    -- Parameters:
    --
    -- [@ dst_id :: 'HId_t'   @]    ID of destination property list or class
    --
    -- [@ src_id :: 'HId_t'   @]    ID of source property list or class
    --
    -- [@ name   :: 'CString' @]    Name of property to copy
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pcopy_prop(hid_t dst_id, hid_t src_id, const char *name);
    foreign import ccall "H5Pcopy_prop" h5p_copy_prop
      :: HId_t -> HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Pcopy_prop" p_H5Pcopy_prop
      :: FunPtr (HId_t -> HId_t -> CString -> IO HErr_t)

    {-# LINE 677 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Removes a property from a property list.  Both properties which were
    -- in existance when the property list was created (i.e. properties registered
    -- with 'h5p_register2') and properties added to the list after it was created
    -- (i.e. added with 'h5p_insert2') may be removed from a property list.
    -- Properties do not need to be removed a property list before the list itself
    -- is closed, they will be released automatically when 'h5p_close' is called.
    -- The 'close' callback for this property is called before the property is
    -- release, if the callback exists.
    --
    -- Parameters:
    --
    -- [@ plist_id :: 'HId_t'   @]  Property list to modify
    --
    -- [@ name     :: 'CString' @]  Name of property to remove
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Premove(hid_t plist_id, const char *name);
    foreign import ccall "H5Premove" h5p_remove
      :: HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Premove" p_H5Premove
      :: FunPtr (HId_t -> CString -> IO HErr_t)

    {-# LINE 697 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Removes a property from a property list class.  Future property lists
    -- created of that class will not contain this property.  Existing property
    -- lists containing this property are not affected.
    --
    -- Parameters:
    -- [@ pclass_id :: 'HId_t'   @] Property list class to modify
    -- [@ name      :: 'CString' @] Name of property to remove
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Punregister(hid_t pclass_id, const char *name);
    foreign import ccall "H5Punregister" h5p_unregister
      :: HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Punregister" p_H5Punregister
      :: FunPtr (HId_t -> CString -> IO HErr_t)

    {-# LINE 710 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Release memory and de-attach a class from the property list class hierarchy.
    --
    -- Parameters:
    --
    -- [@ cls_id :: 'HId_t' @]  Property list class ID to class
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pclose_class(hid_t plist_id);
    foreign import ccall "H5Pclose_class" h5p_close_class
      :: HId_t -> IO HErr_t
    foreign import ccall "&H5Pclose_class" p_H5Pclose_class
      :: FunPtr (HId_t -> IO HErr_t)

    {-# LINE 721 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Closes a property list.  If a 'close' callback exists for the property
    -- list class, it is called before the property list is destroyed.  If 'close'
    -- callbacks exist for any individual properties in the property list, they are
    -- called after the class 'close' callback.
    --
    -- Parameters:
    -- [@ plist_id :: 'HId_t' @]    Property list to close
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pclose(hid_t plist_id);
    foreign import ccall "H5Pclose" h5p_close
      :: HId_t -> IO HErr_t
    foreign import ccall "&H5Pclose" p_H5Pclose
      :: FunPtr (HId_t -> IO HErr_t)

    {-# LINE 734 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Copy a property list or class and return the ID.  This routine calls the
    -- class 'copy' callback after any property 'copy' callbacks are called
    -- (assuming all property 'copy' callbacks return successfully).
    --
    -- Parameters:
    --     hid_t id;           IN: Property list or class ID to copy
    --
    -- Returns a valid (non-negative) property list ID on success, negative on failure.
    --
    -- > hid_t H5Pcopy(hid_t plist_id);
    foreign import ccall "H5Pcopy" h5p_copy
      :: HId_t -> IO HId_t
    foreign import ccall "&H5Pcopy" p_H5Pcopy
      :: FunPtr (HId_t -> IO HId_t)

    {-# LINE 746 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Object creation property list (OCPL) routines

    -- |Sets the cutoff values for indexes storing attributes
    -- in object headers for this file.  If more than 'max_compact'
    -- attributes are in an object header, the attributes will be
    -- moved to a heap and indexed with a B-tree.
    --
    -- Likewise, an object header containing fewer than 'min_dense'
    -- attributes will be converted back to storing the attributes
    -- directly in the object header.
    --
    -- If the 'max_compact' is zero then attributes for this object will
    -- never be stored in the object header but will be always be
    -- stored in a heap.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_attr_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense);
    foreign import ccall "H5Pset_attr_phase_change" h5p_set_attr_phase_change
      :: HId_t -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_attr_phase_change" p_H5Pset_attr_phase_change
      :: FunPtr (HId_t -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 766 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the phase change values for attribute storage
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_attr_phase_change(hid_t plist_id, unsigned *max_compact, unsigned *min_dense);
    foreign import ccall "H5Pget_attr_phase_change" h5p_get_attr_phase_change
      :: HId_t -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_attr_phase_change" p_H5Pget_attr_phase_change
      :: FunPtr (HId_t -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 773 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the flags for creation order of attributes on an object
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_attr_creation_order(hid_t plist_id, unsigned crt_order_flags);
    foreign import ccall "H5Pset_attr_creation_order" h5p_set_attr_creation_order
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_attr_creation_order" p_H5Pset_attr_creation_order
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 780 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the flags indicating creation order is tracked/indexed
    -- for attributes on an object.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_attr_creation_order(hid_t plist_id, unsigned *crt_order_flags);
    foreign import ccall "H5Pget_attr_creation_order" h5p_get_attr_creation_order
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_attr_creation_order" p_H5Pget_attr_creation_order
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 788 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set whether the birth, access, modification & change times for
    -- an object are stored.
    --
    -- Birth time is the time the object was created.  Access time is
    -- the last time that metadata or raw data was read from this
    -- object.  Modification time is the last time the data for
    -- this object was changed (either writing raw data to a dataset
    -- or inserting/modifying/deleting a link in a group).  Change
    -- time is the last time the metadata for this object was written
    -- (adding/modifying/deleting an attribute on an object, extending
    -- the size of a dataset, etc).
    --
    -- If these times are not tracked, they will be reported as
    -- 12:00 AM UDT, Jan. 1, 1970 (i.e. 0 seconds past the UNIX
    -- epoch) when queried.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_obj_track_times(hid_t plist_id, hbool_t track_times);
    foreign import ccall "H5Pset_obj_track_times" h5p_set_obj_track_times
      :: HId_t -> HBool_t -> IO HErr_t
    foreign import ccall "&H5Pset_obj_track_times" p_H5Pset_obj_track_times
      :: FunPtr (HId_t -> HBool_t -> IO HErr_t)

    {-# LINE 809 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns whether times are tracked for an object.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_obj_track_times(hid_t plist_id, hbool_t *track_times);
    foreign import ccall "H5Pget_obj_track_times" h5p_get_obj_track_times
      :: HId_t -> Out HBool_t -> IO HErr_t
    foreign import ccall "&H5Pget_obj_track_times" p_H5Pget_obj_track_times
      :: FunPtr (HId_t -> Out HBool_t -> IO HErr_t)

    {-# LINE 816 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Modifies the specified 'filter' in the transient or permanent
    -- output filter pipeline depending on whether 'plist' is a dataset
    -- creation or dataset transfer property list.  The 'flags' argument
    -- specifies certain general properties of the filter and is
    -- documented below.  The 'cd_values' is an array of 'cd_nelmts'
    -- integers which are auxiliary data for the filter.  The integer
    -- values will be stored in the dataset object header as part of
    -- the filter information.
    --
    -- The 'flags' argument is a bit vector of the following fields:
    --
    -- ['h5z_FLAG_OPTIONAL']
    -- If this bit is set then the filter is optional.  If the
    -- filter fails during an 'h5d_write' operation then the filter
    -- is just excluded from the pipeline for the chunk for which it
    -- failed; the filter will not participate in the pipeline
    -- during an 'h5d_read' of the chunk.  If this bit is clear and
    -- the filter fails then the entire I/O operation fails.
    -- If this bit is set but encoding is disabled for a filter,
    -- attempting to write will generate an error.
    --
    -- Note:  This function currently supports only the permanent filter
    -- pipeline.  That is, 'plist_id' must be a dataset creation
    -- property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pmodify_filter(hid_t plist_id, H5Z_filter_t filter,
    -- >         unsigned int flags, size_t cd_nelmts,
    -- >         const unsigned int cd_values[/*cd_nelmts*/]);
    foreign import ccall "H5Pmodify_filter" h5p_modify_filter
      :: HId_t -> H5Z_filter_t -> CUInt -> CSize -> InArray CUInt -> IO HErr_t
    foreign import ccall "&H5Pmodify_filter" p_H5Pmodify_filter
      :: FunPtr (HId_t -> H5Z_filter_t -> CUInt -> CSize -> InArray CUInt -> IO HErr_t)

    {-# LINE 848 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Adds the specified 'filter' and corresponding properties to the
    -- end of the data or link output filter pipeline
    -- depending on whether 'plist' is a dataset creation or group
    -- creation property list.  The 'flags' argument specifies certain
    -- general properties of the filter and is documented below.
    -- The 'cd_values' is an array of 'cd_nelmts' integers which are
    -- auxiliary data for the filter.  The integer vlues will be
    -- stored in the dataset object header as part of the filter
    -- information.
    --
    -- The 'flags' argument is a bit vector of the following fields:
    --
    -- ['h5z_FLAG_OPTIONAL']
    -- If this bit is set then the filter is optional.  If the
    -- filter fails during an 'h5d_write' operation then the filter
    -- is just excluded from the pipeline for the chunk for which it
    -- failed; the filter will not participate in the pipeline
    -- during an 'h5d_read' of the chunk.  If this bit is clear and
    -- the filter fails then the entire I/O operation fails.
    -- If this bit is set but encoding is disabled for a filter,
    -- attempting to write will generate an error.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_filter(hid_t plist_id, H5Z_filter_t filter,
    -- >         unsigned int flags, size_t cd_nelmts,
    -- >         const unsigned int c_values[]);
    foreign import ccall "H5Pset_filter" h5p_set_filter
      :: HId_t -> H5Z_filter_t -> CUInt -> CSize -> InArray CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_filter" p_H5Pset_filter
      :: FunPtr (HId_t -> H5Z_filter_t -> CUInt -> CSize -> InArray CUInt -> IO HErr_t)

    {-# LINE 877 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the number of filters in the data or link
    -- pipeline depending on whether 'plist_id' is a dataset creation
    -- or group creation property list.  In each pipeline the
    -- filters are numbered from zero through N-1 where N is the
    -- value returned by this function.  During output to the file
    -- the filters of a pipeline are applied in increasing order
    -- (the inverse is true for input).
    --
    -- Returns the number of filters or negative on failure.
    --
    -- > int H5Pget_nfilters(hid_t plist_id);
    foreign import ccall "H5Pget_nfilters" h5p_get_nfilters
      :: HId_t -> IO CInt
    foreign import ccall "&H5Pget_nfilters" p_H5Pget_nfilters
      :: FunPtr (HId_t -> IO CInt)

    {-# LINE 890 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This is the query counterpart of 'h5p_set_filter' and returns
    -- information about a particular filter number in a permanent
    -- or transient pipeline depending on whether 'plist_id' is a
    -- dataset creation or transfer property list.  On input,
    -- 'cd_nelmts' indicates the number of entries in the 'cd_values'
    -- array allocated by the caller while on exit it contains the
    -- number of values defined by the filter.  'filter_config' is a bit
    -- field contaning encode/decode flags from "Bindings.HDF5.Raw.H5Z".  The
    -- 'idx' should be a value between zero and N-1 as described for
    -- 'h5p_get_nfilters' and the function will return failure if the
    -- filter number is out of range.
    --
    -- Returns the filter identification number or 'h5z_FILTER_ERROR' on
    -- failure (which is negative).
    --
    -- > H5Z_filter_t H5Pget_filter2(hid_t plist_id, unsigned filter,
    -- >        unsigned int *flags/*out*/,
    -- >        size_t *cd_nelmts/*out*/,
    -- >        unsigned cd_values[]/*out*/,
    -- >        size_t namelen, char name[],
    -- >        unsigned *filter_config /*out*/);
    foreign import ccall "H5Pget_filter2" h5p_get_filter2
      :: HId_t -> CUInt -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> OutArray CChar -> Out CUInt -> IO H5Z_filter_t
    foreign import ccall "&H5Pget_filter2" p_H5Pget_filter2
      :: FunPtr (HId_t -> CUInt -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> OutArray CChar -> Out CUInt -> IO H5Z_filter_t)

    {-# LINE 913 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This is an additional query counterpart of 'h5p_set_filter' and
    -- returns information about a particular filter in a permanent
    -- or transient pipeline depending on whether 'plist_id' is a
    -- dataset creation or transfer property list.  On input,
    -- 'cd_nelmts' indicates the number of entries in the 'cd_values'
    -- array allocated by the caller while on exit it contains the
    -- number of values defined by the filter.  'filter_config' is a bit
    -- field contaning encode/decode flags from "Bindings.HDF5.Raw.H5Z".  The
    -- ID should be the filter ID to retrieve the parameters for.  If the
    -- filter is not set for the property list, an error will be returned.
    --
    -- Returns the number of filters or negative on failure.
    --
    -- > herr_t H5Pget_filter_by_id2(hid_t plist_id, H5Z_filter_t id,
    -- >        unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
    -- >        unsigned cd_values[]/*out*/, size_t namelen, char name[]/*out*/,
    -- >        unsigned *filter_config/*out*/);
    foreign import ccall "H5Pget_filter_by_id2" h5p_get_filter_by_id2
      :: HId_t -> H5Z_filter_t -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> OutArray CChar -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_filter_by_id2" p_H5Pget_filter_by_id2
      :: FunPtr (HId_t -> H5Z_filter_t -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> OutArray CChar -> Out CUInt -> IO HErr_t)

    {-# LINE 932 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This is a query routine to verify that all the filters set
    -- in the dataset creation property list are available currently.
    --
    -- > htri_t H5Pall_filters_avail(hid_t plist_id);
    foreign import ccall "H5Pall_filters_avail" h5p_all_filters_avail
      :: HId_t -> IO HTri_t
    foreign import ccall "&H5Pall_filters_avail" p_H5Pall_filters_avail
      :: FunPtr (HId_t -> IO HTri_t)

    {-# LINE 938 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Deletes a filter from the dataset creation property list;
    -- deletes all filters if 'filter' is 'h5z_FILTER_NONE'
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Premove_filter(hid_t plist_id, H5Z_filter_t filter);
    foreign import ccall "H5Premove_filter" h5p_remove_filter
      :: HId_t -> H5Z_filter_t -> IO HErr_t
    foreign import ccall "&H5Premove_filter" p_H5Premove_filter
      :: FunPtr (HId_t -> H5Z_filter_t -> IO HErr_t)

    {-# LINE 946 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the compression method for a dataset or group link
    -- filter pipeline (depending on whether 'plist_id' is a dataset
    -- creation or group creation property list) to 'h5z_FILTER_DEFLATE'
    -- and the compression level to 'level' which should be a value
    -- between zero and nine, inclusive.  Lower compression levels
    -- are faster but result in less compression.  This is the same
    -- algorithm as used by the GNU gzip program.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_deflate(hid_t plist_id, unsigned aggression);
    foreign import ccall "H5Pset_deflate" h5p_set_deflate
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_deflate" p_H5Pset_deflate
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 959 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets Fletcher32 checksum of EDC for a dataset creation
    -- property list or group creation property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_fletcher32(hid_t plist_id);
    foreign import ccall "H5Pset_fletcher32" h5p_set_fletcher32
      :: HId_t -> IO HErr_t
    foreign import ccall "&H5Pset_fletcher32" p_H5Pset_fletcher32
      :: FunPtr (HId_t -> IO HErr_t)

    {-# LINE 967 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * File creation property list (FCPL) routines

    -- |Retrieves version information for various parts of a file.
    --
    -- Any (or even all) of the output arguments can be null
    -- pointers.
    --
    -- Parameters:
    --
    -- [@ plist_id :: 'HId_t'       @]  The file creation property list ID
    --
    -- [@ boot	   :: 'Out' 'CUInt' @]  The file super block.
    --
    -- [@ freelist :: 'Out' 'CUInt' @]  The global free list.
    --
    -- [@ stab	   :: 'Out' 'CUInt' @]  The root symbol table entry.
    --
    -- [@ shhdr    :: 'Out' 'CUInt' @]  Shared object headers.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_version(hid_t plist_id, unsigned *boot/*out*/,
    -- >          unsigned *freelist/*out*/, unsigned *stab/*out*/,
    -- >          unsigned *shhdr/*out*/);
    foreign import ccall "H5Pget_version" h5p_get_version
      :: HId_t -> Out CUInt -> Out CUInt -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_version" p_H5Pget_version
      :: FunPtr (HId_t -> Out CUInt -> Out CUInt -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 994 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the userblock size field of a file creation property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_userblock(hid_t plist_id, hsize_t size);
    foreign import ccall "H5Pset_userblock" h5p_set_userblock
      :: HId_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_userblock" p_H5Pset_userblock
      :: FunPtr (HId_t -> HSize_t -> IO HErr_t)

    {-# LINE 1001 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Queries the size of a user block in a file creation property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_userblock(hid_t plist_id, hsize_t *size);
    foreign import ccall "H5Pget_userblock" h5p_get_userblock
      :: HId_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_userblock" p_H5Pget_userblock
      :: FunPtr (HId_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 1008 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets file size-of addresses and sizes.  'plist_id' should be a
    -- file creation property list.  A value of zero causes the
    -- property to not change.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_sizes(hid_t plist_id, size_t sizeof_addr,
    -- >        size_t sizeof_size);
    foreign import ccall "H5Pset_sizes" h5p_set_sizes
      :: HId_t -> CSize -> CSize -> IO HErr_t
    foreign import ccall "&H5Pset_sizes" p_H5Pset_sizes
      :: FunPtr (HId_t -> CSize -> CSize -> IO HErr_t)

    {-# LINE 1018 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the size of address and size quantities stored in a
    -- file according to a file creation property list.  Either (or
    -- even both) 'sizeof_addr' and 'sizeof_size' may be null pointers.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr/*out*/,
    -- >        size_t *sizeof_size/*out*/);
    foreign import ccall "H5Pget_sizes" h5p_get_sizes
      :: HId_t -> Out CSize -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_sizes" p_H5Pget_sizes
      :: FunPtr (HId_t -> Out CSize -> Out CSize -> IO HErr_t)

    {-# LINE 1028 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |IK is one half the rank of a tree that stores a symbol
    -- table for a group.  Internal nodes of the symbol table are on
    -- average 75% full.  That is, the average rank of the tree is
    -- 1.5 times the value of IK.
    --
    -- LK is one half of the number of symbols that can be stored in
    -- a symbol table node.  A symbol table node is the leaf of a
    -- symbol table tree which is used to store a group.  When
    -- symbols are inserted randomly into a group, the group's
    -- symbol table nodes are 75% full on average.  That is, they
    -- contain 1.5 times the number of symbols specified by LK.
    --
    -- Either (or even both) of IK and LK can be zero in which case
    -- that value is left unchanged.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_sym_k(hid_t plist_id, unsigned ik, unsigned lk);
    foreign import ccall "H5Pset_sym_k" h5p_set_sym_k
      :: HId_t -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_sym_k" p_H5Pset_sym_k
      :: FunPtr (HId_t -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 1048 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieves the symbol table B-tree 1/2 rank (IK) and the
    -- symbol table leaf node 1/2 size (LK).  See 'h5p_set_sym_k' for
    -- details. Either (or even both) IK and LK may be null
    -- pointers.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_sym_k(hid_t plist_id, unsigned *ik/*out*/, unsigned *lk/*out*/);
    foreign import ccall "H5Pget_sym_k" h5p_get_sym_k
      :: HId_t -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_sym_k" p_H5Pget_sym_k
      :: FunPtr (HId_t -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 1058 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |IK is one half the rank of a tree that stores chunked raw
    -- data.  On average, such a tree will be 75% full, or have an
    -- average rank of 1.5 times the value of IK.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_istore_k(hid_t plist_id, unsigned ik);
    foreign import ccall "H5Pset_istore_k" h5p_set_istore_k
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_istore_k" p_H5Pset_istore_k
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 1067 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Queries the 1/2 rank of an indexed storage B-tree.  See
    -- 'h5p_set_istore_k' for details.  The argument IK may be the
    -- null pointer.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_istore_k(hid_t plist_id, unsigned *ik/*out*/);
    foreign import ccall "H5Pget_istore_k" h5p_get_istore_k
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_istore_k" p_H5Pget_istore_k
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 1076 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the number of Shared Object Header Message (SOHM)
    -- indexes specified in this property list.  If this is
    -- zero then shared object header messages are disabled
    -- for this file.
    --
    -- These indexes can then be configured with
    -- H5Pset_shared_mesg_index.  'h5p_set_shared_mesg_phase_chage'
    -- also controls settings for all indexes.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_shared_mesg_nindexes(hid_t plist_id, unsigned nindexes);
    foreign import ccall "H5Pset_shared_mesg_nindexes" h5p_set_shared_mesg_nindexes
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_shared_mesg_nindexes" p_H5Pset_shared_mesg_nindexes
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 1090 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Get the number of Shared Object Header Message (SOHM)
    -- indexes specified in this property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_shared_mesg_nindexes(hid_t plist_id, unsigned *nindexes);
    foreign import ccall "H5Pget_shared_mesg_nindexes" h5p_get_shared_mesg_nindexes
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_shared_mesg_nindexes" p_H5Pget_shared_mesg_nindexes
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 1098 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Configure a given shared message index.  Sets the types of
    -- message that should be stored in this index and the minimum
    -- size of a message in the index.
    --
    -- 'index_num' is zero-indexed (in a file with three indexes,
    -- they are numbered 0, 1, and 2).
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned mesg_type_flags, unsigned min_mesg_size);
    foreign import ccall "H5Pset_shared_mesg_index" h5p_set_shared_mesg_index
      :: HId_t -> CUInt -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_shared_mesg_index" p_H5Pset_shared_mesg_index
      :: FunPtr (HId_t -> CUInt -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 1110 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Get information about a given shared message index.  Gets
    -- the types of message that are stored in the index and the
    -- minimum size of a message in the index.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type_flags, unsigned *min_mesg_size);
    foreign import ccall "H5Pget_shared_mesg_index" h5p_get_shared_mesg_index
      :: HId_t -> CUInt -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_shared_mesg_index" p_H5Pget_shared_mesg_index
      :: FunPtr (HId_t -> CUInt -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 1119 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the cutoff values for indexes storing shared object
    -- header messages in this file.  If more than 'max_list'
    -- messages are in an index, that index will become a B-tree.
    -- Likewise, a B-tree index containing fewer than 'min_btree'
    -- messages will be converted to a list.
    --
    -- If the 'max_list' is zero then SOHM indexes in this file will
    -- never be lists but will be created as B-trees.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_shared_mesg_phase_change(hid_t plist_id, unsigned max_list, unsigned min_btree);
    foreign import ccall "H5Pset_shared_mesg_phase_change" h5p_set_shared_mesg_phase_change
      :: HId_t -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_shared_mesg_phase_change" p_H5Pset_shared_mesg_phase_change
      :: FunPtr (HId_t -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 1133 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the maximum size of a SOHM list index before it becomes
    -- a B-tree.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_shared_mesg_phase_change(hid_t plist_id, unsigned *max_list, unsigned *min_btree);
    foreign import ccall "H5Pget_shared_mesg_phase_change" h5p_get_shared_mesg_phase_change
      :: HId_t -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_shared_mesg_phase_change" p_H5Pget_shared_mesg_phase_change
      :: FunPtr (HId_t -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 1141 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * File access property list (FAPL) routines

    -- |Sets the alignment properties of a file access property list
    -- so that any file object >= 'threshold' bytes will be aligned on
    -- an address which is a multiple of 'alignment'.  The addresses
    -- are relative to the end of the user block; the alignment is
    -- calculated by subtracting the user block size from the
    -- absolute file address and then adjusting the address to be a
    -- multiple of 'alignment'.
    --
    -- Default values for 'threshold' and 'alignment' are one, implying
    -- no alignment.  Generally the default values will result in
    -- the best performance for single-process access to the file.
    -- For MPI-IO and other parallel systems, choose an alignment
    -- which is a multiple of the disk block size.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_alignment(hid_t fapl_id, hsize_t threshold,
    -- >     hsize_t alignment);
    foreign import ccall "H5Pset_alignment" h5p_set_alignment
      :: HId_t -> HSize_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_alignment" p_H5Pset_alignment
      :: FunPtr (HId_t -> HSize_t -> HSize_t -> IO HErr_t)

    {-# LINE 1163 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the current settings for alignment properties from a
    -- file access property list.  The 'threshold' and/or 'alignment'
    -- pointers may be null pointers.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
    -- >     hsize_t *alignment/*out*/);
    foreign import ccall "H5Pget_alignment" h5p_get_alignment
      :: HId_t -> Out HSize_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_alignment" p_H5Pget_alignment
      :: FunPtr (HId_t -> Out HSize_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 1173 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the file driver ('driver_id') for a file access or data
    -- transfer property list ('plist_id') and supply an optional
    -- struct containing the driver-specific properites
    -- ('driver_info').  The driver properties will be copied into the
    -- property list and the reference count on the driver will be
    -- incremented, allowing the caller to close the driver ID but
    -- still use the property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_driver(hid_t plist_id, hid_t driver_id,
    -- >         const void *driver_info);
    foreign import ccall "H5Pset_driver" h5p_set_driver
      :: HId_t -> HId_t -> In a -> IO HErr_t
    foreign import ccall "&H5Pset_driver" p_H5Pset_driver
      :: FunPtr (HId_t -> HId_t -> In a -> IO HErr_t)

    {-# LINE 1187 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Return the ID of the low-level file driver.  'plist_id' should
    -- be a file access property list or data transfer propert list.
    --
    -- Returns a low-level driver ID which is the same ID
    -- used when the driver was set for the property
    -- list. The driver ID is only valid as long as
    -- the file driver remains registered.
    --
    -- Returns a negative value on failure.
    --
    -- > hid_t H5Pget_driver(hid_t plist_id);
    foreign import ccall "H5Pget_driver" h5p_get_driver
      :: HId_t -> IO HId_t
    foreign import ccall "&H5Pget_driver" p_H5Pget_driver
      :: FunPtr (HId_t -> IO HId_t)

    {-# LINE 1200 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns a pointer directly to the file driver-specific
    -- information of a file access or data transfer property list.
    --
    -- On success, returns a pointer to *uncopied* driver specific data
    -- structure if any.
    --
    -- On failure, returns NULL. Null is also returned if the driver has
    -- not registered any driver-specific properties although no error is
    -- pushed on the stack in this case.
    --
    -- > void *H5Pget_driver_info(hid_t plist_id);
    foreign import ccall "H5Pget_driver_info" h5p_get_driver_info
      :: HId_t -> IO (Ptr a)
    foreign import ccall "&H5Pget_driver_info" p_H5Pget_driver_info
      :: FunPtr (HId_t -> IO (Ptr a))

    {-# LINE 1213 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set offset for family driver.  This file access property
    -- list will be passed to H5Fget_vfd_handle or 'h5fd_get_vfd_handle'
    -- to retrieve VFD file handle.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_family_offset(hid_t fapl_id, hsize_t offset);
    foreign import ccall "H5Pset_family_offset" h5p_set_family_offset
      :: HId_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_family_offset" p_H5Pset_family_offset
      :: FunPtr (HId_t -> HSize_t -> IO HErr_t)

    {-# LINE 1222 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Get offset for family driver.  This file access property
    -- list will be passed to H5Fget_vfd_handle or 'h5fd_get_vfd_handle'
    -- to retrieve VFD file handle.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_family_offset(hid_t fapl_id, hsize_t *offset);
    foreign import ccall "H5Pget_family_offset" h5p_get_family_offset
      :: HId_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_family_offset" p_H5Pget_family_offset
      :: FunPtr (HId_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 1231 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set data type for multi driver.  This file access property
    -- list will be passed to 'h5f_get_vfd_handle' or 'h5fd_get_vfd_handle'
    -- to retrieve VFD file handle.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_multi_type(hid_t fapl_id, H5FD_mem_t type);
    foreign import ccall "H5Pset_multi_type" h5p_set_multi_type
      :: HId_t -> H5FD_mem_t -> IO HErr_t
    foreign import ccall "&H5Pset_multi_type" p_H5Pset_multi_type
      :: FunPtr (HId_t -> H5FD_mem_t -> IO HErr_t)

    {-# LINE 1240 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Get data type for multi driver.  This file access property
    -- list will be passed to H5Fget_vfd_handle or 'h5fd_get_vfd_handle'
    -- to retrieve VFD file handle.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type);
    foreign import ccall "H5Pget_multi_type" h5p_get_multi_type
      :: HId_t -> Out H5FD_mem_t -> IO HErr_t
    foreign import ccall "&H5Pget_multi_type" p_H5Pget_multi_type
      :: FunPtr (HId_t -> Out H5FD_mem_t -> IO HErr_t)

    {-# LINE 1249 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the number of objects in the meta data cache and the
    -- maximum number of chunks and bytes in the raw data chunk
    -- cache.
    --
    -- The 'rdcc_w0' value should be between 0 and 1 inclusive and
    -- indicates how much chunks that have been fully read or fully
    -- written are favored for preemption.  A value of zero means
    -- fully read or written chunks are treated no differently than
    -- other chunks (the preemption is strictly LRU) while a value
    -- of one means fully read chunks are always preempted before
    -- other chunks.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_cache(hid_t plist_id, int mdc_nelmts,
    -- >        size_t rdcc_nslots, size_t rdcc_nbytes,
    -- >        double rdcc_w0);
    foreign import ccall "H5Pset_cache" h5p_set_cache
      :: HId_t -> CInt -> CSize -> CSize -> CDouble -> IO HErr_t
    foreign import ccall "&H5Pset_cache" p_H5Pset_cache
      :: FunPtr (HId_t -> CInt -> CSize -> CSize -> CDouble -> IO HErr_t)

    {-# LINE 1268 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieves the maximum possible number of elements in the meta
    -- data cache and the maximum possible number of elements and
    -- bytes and the 'rdcc_w0' value in the raw data chunk cache.  Any
    -- (or all) arguments may be null pointers in which case the
    -- corresponding datum is not returned.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_cache(hid_t plist_id,
    -- >        int *mdc_nelmts, /* out */
    -- >        size_t *rdcc_nslots/*out*/,
    -- >        size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
    foreign import ccall "H5Pget_cache" h5p_get_cache
      :: HId_t -> Out CInt -> Out CSize -> Out CSize -> Out CDouble -> IO HErr_t
    foreign import ccall "&H5Pget_cache" p_H5Pget_cache
      :: FunPtr (HId_t -> Out CInt -> Out CSize -> Out CSize -> Out CDouble -> IO HErr_t)

    {-# LINE 1282 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the initial metadata cache resize configuration in the
    -- target FAPL.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_mdc_config(hid_t    plist_id,
    -- >        H5AC_cache_config_t * config_ptr);
    foreign import ccall "H5Pset_mdc_config" h5p_set_mdc_config
      :: HId_t -> In H5AC_cache_config_t -> IO HErr_t
    foreign import ccall "&H5Pset_mdc_config" p_H5Pset_mdc_config
      :: FunPtr (HId_t -> In H5AC_cache_config_t -> IO HErr_t)

    {-# LINE 1291 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieve the metadata cache initial resize configuration
    -- from the target FAPL.
    --
    -- Observe that the function will fail if 'config_ptr' is
    -- NULL, or if 'config_ptr'->'version' specifies an unknown
    -- version of 'H5AC_cache_config_t'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_mdc_config(hid_t     plist_id,
    -- >        H5AC_cache_config_t * config_ptr);	/* out */
    foreign import ccall "H5Pget_mdc_config" h5p_get_mdc_config
      :: HId_t -> Out H5AC_cache_config_t -> IO HErr_t
    foreign import ccall "&H5Pget_mdc_config" p_H5Pget_mdc_config
      :: FunPtr (HId_t -> Out H5AC_cache_config_t -> IO HErr_t)

    {-# LINE 1304 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the flag for garbage collecting references for the file.
    -- Dataset region references (and other reference types
    -- probably) use space in the file heap.  If garbage collection
    -- is on and the user passes in an uninitialized value in a
    -- reference structure, the heap might get corrupted.  When
    -- garbage collection is off however and the user re-uses a
    -- reference, the previous heap block will be orphaned and not
    -- returned to the free heap space.  When garbage collection is
    -- on, the user must initialize the reference structures to 0 or
    -- risk heap corruption.
    --
    -- Default value for garbage collecting references is off, just
    -- to be on the safe side.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
    foreign import ccall "H5Pset_gc_references" h5p_set_gc_references
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_gc_references" p_H5Pset_gc_references
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 1323 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the current setting for the garbage collection
    -- references property from a file access property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_gc_references(hid_t fapl_id, unsigned *gc_ref/*out*/);
    foreign import ccall "H5Pget_gc_references" h5p_get_gc_references
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_gc_references" p_H5Pget_gc_references
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 1331 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the degree for the file close behavior.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_fclose_degree(hid_t fapl_id, H5F_close_degree_t degree);
    foreign import ccall "H5Pset_fclose_degree" h5p_set_fclose_degree
      :: HId_t -> H5F_close_degree_t -> IO HErr_t
    foreign import ccall "&H5Pset_fclose_degree" p_H5Pset_fclose_degree
      :: FunPtr (HId_t -> H5F_close_degree_t -> IO HErr_t)

    {-# LINE 1338 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the degree for the file close behavior.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_fclose_degree(hid_t fapl_id, H5F_close_degree_t *degree);
    foreign import ccall "H5Pget_fclose_degree" h5p_get_fclose_degree
      :: HId_t -> Out H5F_close_degree_t -> IO HErr_t
    foreign import ccall "&H5Pget_fclose_degree" p_H5Pget_fclose_degree
      :: FunPtr (HId_t -> Out H5F_close_degree_t -> IO HErr_t)

    {-# LINE 1345 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the minimum size of metadata block allocations when
    -- the 'h5fd_FEAT_AGGREGATE_METADATA' is set by a VFL driver.
    -- Each \"raw\" metadata block is allocated to be this size and then
    -- specific pieces of metadata (object headers, local heaps, B-trees, etc)
    -- are sub-allocated from this block.
    --
    -- The default value is set to 2048 (bytes), indicating that metadata
    -- will be attempted to be bunched together in (at least) 2K blocks in
    -- the file.  Setting the value to 0 with this API function will
    -- turn off the metadata aggregation, even if the VFL driver attempts to
    -- use that strategy.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_meta_block_size(hid_t fapl_id, hsize_t size);
    foreign import ccall "H5Pset_meta_block_size" h5p_set_meta_block_size
      :: HId_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_meta_block_size" p_H5Pset_meta_block_size
      :: FunPtr (HId_t -> HSize_t -> IO HErr_t)

    {-# LINE 1362 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the current settings for the metadata block allocation
    -- property from a file access property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_meta_block_size(hid_t fapl_id, hsize_t *size/*out*/);
    foreign import ccall "H5Pget_meta_block_size" h5p_get_meta_block_size
      :: HId_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_meta_block_size" p_H5Pget_meta_block_size
      :: FunPtr (HId_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 1370 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the maximum size of the data seive buffer used for file
    -- drivers which are capable of using data sieving.  The data sieve
    -- buffer is used when performing I/O on datasets in the file.  Using a
    -- buffer which is large anough to hold several pieces of the dataset
    -- being read in for hyperslab selections boosts performance by quite a
    -- bit.
    --
    -- The default value is set to 64KB, indicating that file I/O for raw data
    -- reads and writes will occur in at least 64KB blocks.
    -- Setting the value to 0 with this API function will turn off the
    -- data sieving, even if the VFL driver attempts to use that strategy.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_sieve_buf_size(hid_t fapl_id, size_t size);
    foreign import ccall "H5Pset_sieve_buf_size" h5p_set_sieve_buf_size
      :: HId_t -> CSize -> IO HErr_t
    foreign import ccall "&H5Pset_sieve_buf_size" p_H5Pset_sieve_buf_size
      :: FunPtr (HId_t -> CSize -> IO HErr_t)

    {-# LINE 1387 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the current settings for the data sieve buffer size
    -- property from a file access property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_sieve_buf_size(hid_t fapl_id, size_t *size/*out*/);
    foreign import ccall "H5Pget_sieve_buf_size" h5p_get_sieve_buf_size
      :: HId_t -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_sieve_buf_size" p_H5Pget_sieve_buf_size
      :: FunPtr (HId_t -> Out CSize -> IO HErr_t)

    {-# LINE 1395 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the minimum size of \"small\" raw data block allocations
    -- when the 'h5fd_FEAT_AGGREGATE_SMALLDATA' is set by a VFL driver.
    -- Each \"small\" raw data block is allocated to be this size and then
    -- pieces of raw data which are small enough to fit are sub-allocated from
    -- this block.
    --
    -- The default value is set to 2048 (bytes), indicating that raw data
    -- smaller than this value will be attempted to be bunched together in (at
    -- least) 2K blocks in the file.  Setting the value to 0 with this API
    -- function will turn off the \"small\" raw data aggregation, even if the
    -- VFL driver attempts to use that strategy.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size);
    foreign import ccall "H5Pset_small_data_block_size" h5p_set_small_data_block_size
      :: HId_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_small_data_block_size" p_H5Pset_small_data_block_size
      :: FunPtr (HId_t -> HSize_t -> IO HErr_t)

    {-# LINE 1412 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the current settings for the \"small\" raw data block
    -- allocation property from a file access property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_small_data_block_size(hid_t fapl_id, hsize_t *size/*out*/);
    foreign import ccall "H5Pget_small_data_block_size" h5p_get_small_data_block_size
      :: HId_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_small_data_block_size" p_H5Pget_small_data_block_size
      :: FunPtr (HId_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 1420 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Indicates which versions of the file format the library should
    -- use when creating objects.  'low' is the earliest version of the HDF5
    -- library that is guaranteed to be able to access the objects created
    -- (the format of some objects in an HDF5 file may not have changed between
    -- versions of the HDF5 library, possibly allowing earlier versions of the
    -- HDF5 library to access those objects) and 'high' is the latest version
    -- of the library required to access the objects created (later versions
    -- of the HDF5 library will also be able to access those objects).
    --
    -- 'low' is used to require that objects use a more modern format and 'high'
    -- is used to restrict objects from using a more modern format.
    --
    -- The special values of 'h5f_FORMAT_EARLIEST' and 'h5f_FORMAT_LATEST' can be
    -- used in the following manner:  Setting 'low' and 'high' to 'h5f_FORMAT_LATEST'
    -- will produce files whose objects use the latest version of the file
    -- format available in the current HDF5 library for each object created.
    -- Setting 'low' and 'high' to 'h5f_FORMAT_EARLIEST' will produce files that that
    -- always require the use of the earliest version of the file format for
    -- each object created. [NOTE!  'low'='high'='h5f_FORMAT_EARLIEST' is not
    -- implemented as of version 1.8.0 and setting 'low' and 'high' to
    -- 'h5f_FORMAT_EARLIEST' will produce an error currently].
    --
    -- Currently, the only two valid combinations for this routine are:
    -- 'low' = 'h5f_FORMAT_EARLIEST' and 'high' = 'h5f_FORMAT_LATEST' (the default
    -- setting, which creates objects with the ealiest version possible for
    -- each object, but no upper limit on the version allowed to be created if
    -- a newer version of an object's format is required to support a feature
    -- requested with an HDF5 library API routine), and 'low' = 'h5f_FORMAT_LATEST'
    -- and 'high' = 'h5f_FORMAT_LATEST' (which is described above).
    --
    -- The 'low' and 'high' values set with this routine at imposed with each
    -- HDF5 library API call that creates objects in the file.  API calls that
    -- would violate the 'low' or 'high' format bound will fail.
    --
    -- Setting the 'low' and 'high' values will not affect reading / writing existing
    -- objects, only the creation of new objects.
    --
    -- Note:  Eventually we want to add more values to the 'H5F_libver_t'
    -- enumerated type that indicate library release values where the file
    -- format was changed (like 'h5f_FORMAT_1_2_0' for the file format changes
    -- in the 1.2.x release branch and possily even 'h5f_FORMAT_1_4_2' for
    -- a change mid-way through the 1.4.x release branch, etc).
    --
    -- Adding more values will allow applications to make settings like the
    -- following:
    --
    -- ['low' = 'h5f_FORMAT_EARLIEST', 'high' = 'h5f_FORMAT_1_2_0']
    --      Create objects with the earliest possible format and don't allow
    --      any objects to be created that require a library version greater
    --      than 1.2.x (This is the \"make certain that \<application\> linked
    --      with v1.2.x of the library can read the file produced\" use case)
    --
    -- ['low' = 'h5f_FORMAT_1_4_2', 'high' = 'h5f_FORMAT_LATEST']
    --      Create objects with at least the version of their format that
    --      the 1.4.2 library uses and allow any later version of the object's
    --      format necessary to represent features used.
    --      (This is the \"make certain to take advantage of \<new feature\>
    --      in the file format\" use case (maybe \<new feature\> is smaller
    --      or scales better than an ealier version, which would otherwise
    --      be used))
    --
    -- ['low' = 'h5f_FORMAT_1_2_0', 'high' = 'h5f_FORMAT_1_6_0']
    --      Creates objects with at least the version of their format that
    --      the 1.2.x library uses and don't allow any objects to be created
    --      that require a library version greater than 1.6.x.
    --      (Not certain of a particular use case for these settings,
    --      although its probably just the logical combination of the
    --      previous two; it just falls out as possible/logical (if it turns
    --      out to be hard to implement in some way, we can always disallow
    --      it))
    --
    -- Note #2:  We talked about whether to include enum values for only library
    -- versions where the format changed and decided it would be less confusing
    -- for application developers if we include enum values for _all_ library
    -- releases and then map down to the previous actual library release which
    -- had a format change.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_libver_bounds(hid_t plist_id, H5F_libver_t low,
    -- >     H5F_libver_t high);
    foreign import ccall "H5Pset_libver_bounds" h5p_set_libver_bounds
      :: HId_t -> H5F_libver_t -> H5F_libver_t -> IO HErr_t
    foreign import ccall "&H5Pset_libver_bounds" p_H5Pset_libver_bounds
      :: FunPtr (HId_t -> H5F_libver_t -> H5F_libver_t -> IO HErr_t)

    {-# LINE 1503 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the current settings for the library version format bounds
    -- from a file access property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_libver_bounds(hid_t plist_id, H5F_libver_t *low,
    -- >     H5F_libver_t *high);
    foreign import ccall "H5Pget_libver_bounds" h5p_get_libver_bounds
      :: HId_t -> Out H5F_libver_t -> Out H5F_libver_t -> IO HErr_t
    foreign import ccall "&H5Pget_libver_bounds" p_H5Pget_libver_bounds
      :: FunPtr (HId_t -> Out H5F_libver_t -> Out H5F_libver_t -> IO HErr_t)

    {-# LINE 1512 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the number of files opened through external links
    -- from the file associated with this fapl to be held open
    -- in that file's external file cache.  When the maximum
    -- number of files is reached, the least recently used file
    -- is closed (unless it is opened from somewhere else).
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_elink_file_cache_size(hid_t plist_id, unsigned efc_size);
    foreign import ccall "H5Pset_elink_file_cache_size" h5p_set_elink_file_cache_size
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_elink_file_cache_size" p_H5Pset_elink_file_cache_size
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 1523 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the number of files opened through external links
    -- from the file associated with this fapl to be held open
    -- in that file's external file cache.  When the maximum
    -- number of files is reached, the least recently used file
    -- is closed (unless it is opened from somewhere else).
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_elink_file_cache_size(hid_t plist_id, unsigned *efc_size);
    foreign import ccall "H5Pget_elink_file_cache_size" h5p_get_elink_file_cache_size
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_elink_file_cache_size" p_H5Pget_elink_file_cache_size
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 1534 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the initial file image. Some file drivers can initialize
    -- the starting data in a file from a buffer.
    --
    -- Returns non-negative on success, negative on failure
    --
    -- > herr_t H5Pset_file_image(hid_t fapl_id, void *buf_ptr, size_t buf_len);
    foreign import ccall "H5Pset_file_image" h5p_set_file_image
      :: HId_t -> Ptr a -> CSize -> IO HErr_t
    foreign import ccall "&H5Pset_file_image" p_H5Pset_file_image
      :: FunPtr (HId_t -> Ptr a -> CSize -> IO HErr_t)

    {-# LINE 1542 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |If the file image exists and buf_ptr_ptr is not NULL,
    -- allocate a buffer of the correct size, copy the image into
    -- the new buffer, and return the buffer to the caller in
    -- *buf_ptr_ptr.  Do this using the file image callbacks
    -- if defined.
    --
    -- NB: It is the responsibility of the caller to free the
    -- buffer whose address is returned in *buf_ptr_ptr.  Do
    -- this using free if the file image callbacks are not
    -- defined, or with whatever method is appropriate if
    -- the callbacks are defined.
    --
    -- If buf_ptr_ptr is not NULL, and no image exists, set
    -- *buf_ptr_ptr to NULL.
    --
    -- If buf_len_ptr is not NULL, set *buf_len_ptr equal
    -- to the length of the file image if it exists, and
    -- to 0 if it does not.
    --
    -- Returns non-negative on success, negative on failure
    --
    -- > herr_t H5Pget_file_image(hid_t fapl_id, void **buf_ptr_ptr, size_t *buf_len_ptr);
    foreign import ccall "H5Pget_file_image" h5p_get_file_image
      :: HId_t -> Ptr (Ptr a) -> CSize -> IO HErr_t
    foreign import ccall "&H5Pget_file_image" p_H5Pget_file_image
      :: FunPtr (HId_t -> Ptr (Ptr a) -> CSize -> IO HErr_t)

    {-# LINE 1566 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the callbacks for file images. Some file drivers allow
    -- the use of user-defined callbacks for allocating, freeing and
    -- copying the drivers internal buffer, potentially allowing a
    -- clever user to do optimizations such as avoiding large mallocs
    -- and memcpys or to perform detailed logging.
    --
    -- Returns non-negative on success, negative on failure
    --
    -- > herr_t H5Pset_file_image_callbacks(hid_t fapl_id,
    -- >    H5FD_file_image_callbacks_t *callbacks_ptr);
    foreign import ccall "H5Pset_file_image_callbacks" h5p_set_file_image_callbacks
      :: HId_t -> In H5FD_file_image_callbacks_t -> IO HErr_t
    foreign import ccall "&H5Pset_file_image_callbacks" p_H5Pset_file_image_callbacks
      :: FunPtr (HId_t -> In H5FD_file_image_callbacks_t -> IO HErr_t)

    {-# LINE 1578 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the callbacks for file images. Some file drivers allow
    -- the use of user-defined callbacks for allocating, freeing and
    -- copying the drivers internal buffer, potentially allowing a
    -- clever user to do optimizations such as avoiding large mallocs
    --
    -- Returns non-negative on success, negative on failure
    --
    -- > herr_t H5Pget_file_image_callbacks(hid_t fapl_id,
    -- >    H5FD_file_image_callbacks_t *callbacks_ptr);
    foreign import ccall "H5Pget_file_image_callbacks" h5p_get_file_image_callbacks
      :: HId_t -> Out H5FD_file_image_callbacks_t -> IO HErr_t
    foreign import ccall "&H5Pget_file_image_callbacks" p_H5Pget_file_image_callbacks
      :: FunPtr (HId_t -> Out H5FD_file_image_callbacks_t -> IO HErr_t)

    {-# LINE 1589 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Dataset creation property list (DCPL) routines

    -- |Sets the layout of raw data in the file.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_layout(hid_t plist_id, H5D_layout_t layout);
    foreign import ccall "H5Pset_layout" h5p_set_layout
      :: HId_t -> H5D_layout_t -> IO HErr_t
    foreign import ccall "&H5Pset_layout" p_H5Pset_layout
      :: FunPtr (HId_t -> H5D_layout_t -> IO HErr_t)

    {-# LINE 1598 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieves layout type of a dataset creation property list.
    --
    -- Returns the layout type on success, negative on failure.
    --
    -- > H5D_layout_t H5Pget_layout(hid_t plist_id);
    foreign import ccall "H5Pget_layout" h5p_get_layout
      :: HId_t -> IO H5D_layout_t
    foreign import ccall "&H5Pget_layout" p_H5Pget_layout
      :: FunPtr (HId_t -> IO H5D_layout_t)

    {-# LINE 1605 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the number of dimensions and the size of each chunk to
    -- the values specified.  The dimensionality of the chunk should
    -- match the dimensionality of the dataspace.
    --
    -- As a side effect, the layout method is changed to
    -- 'h5d_CHUNKED'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/]);
    foreign import ccall "H5Pset_chunk" h5p_set_chunk
      :: HId_t -> CInt -> InArray HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_chunk" p_H5Pset_chunk
      :: FunPtr (HId_t -> CInt -> InArray HSize_t -> IO HErr_t)

    {-# LINE 1617 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieves the chunk size of chunked layout.  The chunk
    -- dimensionality is returned and the chunk size in each
    -- dimension is returned through the DIM argument.  At most
    -- 'max_ndims' elements of 'dim' will be initialized.
    --
    -- Returns a negative value on failure.
    --
    -- > int H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/);
    foreign import ccall "H5Pget_chunk" h5p_get_chunk
      :: HId_t -> CInt -> OutArray HSize_t -> IO CInt
    foreign import ccall "&H5Pget_chunk" p_H5Pget_chunk
      :: FunPtr (HId_t -> CInt -> OutArray HSize_t -> IO CInt)

    {-# LINE 1627 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Adds an external file to the list of external files. 'plist_id'
    -- should be an object ID for a dataset creation property list.
    -- 'name' is the name of an external file, 'offset' is the location
    -- where the data starts in that file, and 'size' is the number of
    -- bytes reserved in the file for the data.
    --
    -- If a dataset is split across multiple files then the files
    -- should be defined in order. The total size of the dataset is
    -- the sum of the 'size' arguments for all the external files.  If
    -- the total size is larger than the size of a dataset then the
    -- dataset can be extended (provided the dataspace also allows
    -- the extending).
    --
    -- > herr_t H5Pset_external(hid_t plist_id, const char *name, off_t offset,
    -- >           hsize_t size);
    foreign import ccall "H5Pset_external" h5p_set_external
      :: HId_t -> CString -> COff -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_external" p_H5Pset_external
      :: FunPtr (HId_t -> CString -> COff -> HSize_t -> IO HErr_t)

    {-# LINE 1644 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the number of external files for this dataset, or negative
    -- on failure.
    --
    -- > int H5Pget_external_count(hid_t plist_id);
    foreign import ccall "H5Pget_external_count" h5p_get_external_count
      :: HId_t -> IO CInt
    foreign import ccall "&H5Pget_external_count" p_H5Pget_external_count
      :: FunPtr (HId_t -> IO CInt)

    {-# LINE 1650 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns information about an external file.  External files
    -- are numbered from zero to N-1 where N is the value returned
    -- by 'h5p_get_external_count'.  At most 'name_size' characters are
    -- copied into the 'name' array.  If the external file name is
    -- longer than 'name_size' with the null terminator, then the
    -- return value is not null terminated (similar to strncpy()).
    --
    -- If 'name_size' is zero or 'name' is the null pointer then the
    -- external file name is not returned.  If 'offset' or 'size' are
    -- null pointers then the corresponding information is not
    -- returned.
    --
    -- See Also:  'h5p_set_external'
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_external(hid_t plist_id, unsigned idx, size_t name_size,
    -- >           char *name/*out*/, off_t *offset/*out*/,
    -- >           hsize_t *size/*out*/);
    foreign import ccall "H5Pget_external" h5p_get_external
      :: HId_t -> CUInt -> CSize -> OutArray CChar -> Out COff -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_external" p_H5Pget_external
      :: FunPtr (HId_t -> CUInt -> CSize -> OutArray CChar -> Out COff -> Out HSize_t -> IO HErr_t)

    {-# LINE 1671 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the compression method for a permanent or transient
    -- filter pipeline (depending on whether 'plist_id' is a dataset
    -- creation or transfer property list) to 'h5z_FILTER_SZIP'.
    -- Szip is a special compression package that is said to be good
    -- for scientific data.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_szip(hid_t plist_id, unsigned options_mask, unsigned pixels_per_block);
    foreign import ccall "H5Pset_szip" h5p_set_szip
      :: HId_t -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_szip" p_H5Pset_szip
      :: FunPtr (HId_t -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 1682 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the shuffling method for a permanent
    -- filter to 'h5z_FILTER_SHUFFLE'
    -- and bytes of the datatype of the array to be shuffled
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_shuffle(hid_t plist_id);
    foreign import ccall "H5Pset_shuffle" h5p_set_shuffle
      :: HId_t -> IO HErr_t
    foreign import ccall "&H5Pset_shuffle" p_H5Pset_shuffle
      :: FunPtr (HId_t -> IO HErr_t)

    {-# LINE 1691 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets nbit filter for a dataset creation property list
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_nbit(hid_t plist_id);
    foreign import ccall "H5Pset_nbit" h5p_set_nbit
      :: HId_t -> IO HErr_t
    foreign import ccall "&H5Pset_nbit" p_H5Pset_nbit
      :: FunPtr (HId_t -> IO HErr_t)

    {-# LINE 1698 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets scaleoffset filter for a dataset creation property list
    -- and user-supplied parameters
    --
    -- Parameters:
    --
    -- [@ scale_factor :: 'CInt' @]
    --   For integer datatypes, this parameter will be
    --   minimum-bits, if this value is set to 0,
    --   scaleoffset filter will calculate the minimum-bits.
    --   For floating-point datatype,
    --   For variable-minimum-bits method, this will be
    --   the decimal precision of the filter,
    --   For fixed-minimum-bits method, this will be
    --   the minimum-bit of the filter.
    --
    -- [@ scale_type :: 'H5Z_SO_scale_type_t' @]
    --  0 for floating-point variable-minimum-bits,
    --  1 for floating-point fixed-minimum-bits,
    --  other values, for integer datatype
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_scaleoffset(hid_t plist_id, H5Z_SO_scale_type_t scale_type, int scale_factor);
    foreign import ccall "H5Pset_scaleoffset" h5p_set_scaleoffset
      :: HId_t -> H5Z_SO_scale_type_t -> CInt -> IO HErr_t
    foreign import ccall "&H5Pset_scaleoffset" p_H5Pset_scaleoffset
      :: FunPtr (HId_t -> H5Z_SO_scale_type_t -> CInt -> IO HErr_t)

    {-# LINE 1723 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the fill value for a dataset creation property list. The
    -- 'value' is interpretted as being of type 'type', which need not
    -- be the same type as the dataset but the library must be able
    -- to convert 'value' to the dataset type when the dataset is
    -- created.  If 'value' is NULL, it will be interpreted as
    -- undefining fill value.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_fill_value(hid_t plist_id, hid_t type_id,
    -- >      const void *value);
    foreign import ccall "H5Pset_fill_value" h5p_set_fill_value
      :: HId_t -> HId_t -> In a -> IO HErr_t
    foreign import ccall "&H5Pset_fill_value" p_H5Pset_fill_value
      :: FunPtr (HId_t -> HId_t -> In a -> IO HErr_t)

    {-# LINE 1736 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Queries the fill value property of a dataset creation
    -- property list.  The fill value is returned through the 'value'
    -- pointer and the memory is allocated by the caller.  The fill
    -- value will be converted from its current datatype to the
    -- specified 'type'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_fill_value(hid_t plist_id, hid_t type_id,
    -- >      void *value/*out*/);
    foreign import ccall "H5Pget_fill_value" h5p_get_fill_value
      :: HId_t -> HId_t -> Out a -> IO HErr_t
    foreign import ccall "&H5Pget_fill_value" p_H5Pget_fill_value
      :: FunPtr (HId_t -> HId_t -> Out a -> IO HErr_t)

    {-# LINE 1748 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Check if fill value is defined.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pfill_value_defined(hid_t plist, H5D_fill_value_t *status);
    foreign import ccall "H5Pfill_value_defined" h5p_fill_value_defined
      :: HId_t -> Out H5D_fill_value_t -> IO HErr_t
    foreign import ccall "&H5Pfill_value_defined" p_H5Pfill_value_defined
      :: FunPtr (HId_t -> Out H5D_fill_value_t -> IO HErr_t)

    {-# LINE 1755 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set space allocation time for dataset during creation.
    -- Valid values are 'h5d_ALLOC_TIME_DEFAULT', 'h5d_ALLOC_TIME_EARLY',
    -- 'h5d_ALLOC_TIME_LATE', 'h5d_ALLOC_TIME_INCR'
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_alloc_time(hid_t plist_id, H5D_alloc_time_t
    -- >    alloc_time);
    foreign import ccall "H5Pset_alloc_time" h5p_set_alloc_time
      :: HId_t -> H5D_alloc_time_t -> IO HErr_t
    foreign import ccall "&H5Pset_alloc_time" p_H5Pset_alloc_time
      :: FunPtr (HId_t -> H5D_alloc_time_t -> IO HErr_t)

    {-# LINE 1765 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Get space allocation time for dataset creation.
    -- Valid values are 'h5d_ALLOC_TIME_DEFAULT', 'h5d_ALLOC_TIME_EARLY',
    -- 'h5d_ALLOC_TIME_LATE', 'h5d_ALLOC_TIME_INCR'
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_alloc_time(hid_t plist_id, H5D_alloc_time_t
    -- >    *alloc_time/*out*/);
    foreign import ccall "H5Pget_alloc_time" h5p_get_alloc_time
      :: HId_t -> Out H5D_alloc_time_t -> IO HErr_t
    foreign import ccall "&H5Pget_alloc_time" p_H5Pget_alloc_time
      :: FunPtr (HId_t -> Out H5D_alloc_time_t -> IO HErr_t)

    {-# LINE 1775 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set fill value writing time for dataset.  Valid values are
    -- 'h5d_FILL_TIME_ALLOC' and 'h5d_FILL_TIME_NEVER'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time);
    foreign import ccall "H5Pset_fill_time" h5p_set_fill_time
      :: HId_t -> H5D_fill_time_t -> IO HErr_t
    foreign import ccall "&H5Pset_fill_time" p_H5Pset_fill_time
      :: FunPtr (HId_t -> H5D_fill_time_t -> IO HErr_t)

    {-# LINE 1783 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Get fill value writing time.  Valid values are 'h5d_NEVER'
    -- and 'h5d_ALLOC'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_fill_time(hid_t plist_id, H5D_fill_time_t
    -- >    *fill_time/*out*/);
    foreign import ccall "H5Pget_fill_time" h5p_get_fill_time
      :: HId_t -> Out H5D_fill_time_t -> IO HErr_t
    foreign import ccall "&H5Pget_fill_time" p_H5Pget_fill_time
      :: FunPtr (HId_t -> Out H5D_fill_time_t -> IO HErr_t)

    {-# LINE 1792 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Dataset access property list (DAPL) routines

    -- |Set the number of objects in the meta data cache and the
    -- maximum number of chunks and bytes in the raw data chunk cache.
    -- Once set, these values will override the values in the file access
    -- property list.  Each of these values can be individually unset
    -- (or not set at all) by passing the macros:
    -- 'h5d_CHUNK_CACHE_NCHUNKS_DEFAULT',
    -- 'h5d_CHUNK_CACHE_NSLOTS_DEFAULT', and/or
    -- 'h5d_CHUNK_CACHE_W0_DEFAULT'
    -- as appropriate.
    --
    -- The 'rdcc_w0' value should be between 0 and 1 inclusive and
    -- indicates how much chunks that have been fully read or fully
    -- written are favored for preemption.  A value of zero means
    -- fully read or written chunks are treated no differently than
    -- other chunks (the preemption is strictly LRU) while a value
    -- of one means fully read chunks are always preempted before
    -- other chunks.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_chunk_cache(hid_t dapl_id, size_t rdcc_nslots,
    -- >        size_t rdcc_nbytes, double rdcc_w0);
    foreign import ccall "H5Pset_chunk_cache" h5p_set_chunk_cache
      :: HId_t -> CSize -> CSize -> CDouble -> IO HErr_t
    foreign import ccall "&H5Pset_chunk_cache" p_H5Pset_chunk_cache
      :: FunPtr (HId_t -> CSize -> CSize -> CDouble -> IO HErr_t)

    {-# LINE 1818 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieves the maximum possible number of elements in the meta
    -- data cache and the maximum possible number of elements and
    -- bytes and the 'rdcc_w0' value in the raw data chunk cache.  Any
    -- (or all) arguments may be null pointers in which case the
    -- corresponding datum is not returned.  If these properties have
    -- not been set on this property list, the default values for a
    -- file access property list are returned.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_chunk_cache(hid_t dapl_id,
    -- >        size_t *rdcc_nslots/*out*/,
    -- >        size_t *rdcc_nbytes/*out*/,
    -- >        double *rdcc_w0/*out*/);
    foreign import ccall "H5Pget_chunk_cache" h5p_get_chunk_cache
      :: HId_t -> Out CSize -> Out CSize -> Out CDouble -> IO HErr_t
    foreign import ccall "&H5Pget_chunk_cache" p_H5Pget_chunk_cache
      :: FunPtr (HId_t -> Out CSize -> Out CSize -> Out CDouble -> IO HErr_t)

    {-# LINE 1834 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Dataset xfer property list (DXPL) routines

    -- |Sets data transform expression.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_data_transform(hid_t plist_id, const char* expression);
    foreign import ccall "H5Pset_data_transform" h5p_set_data_transform
      :: HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Pset_data_transform" p_H5Pset_data_transform
      :: FunPtr (HId_t -> CString -> IO HErr_t)

    {-# LINE 1843 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets data transform expression.
    --
    -- If 'expression' is non-NULL then write up to 'size' bytes into that
    -- buffer and always return the length of the transform name.
    -- Otherwise 'size' is ignored and the function does not store the expression,
    -- just returning the number of characters required to store the expression.
    -- If an error occurs then the buffer pointed to by 'expression' (NULL or non-NULL)
    -- is unchanged and the function returns a negative value.
    -- If a zero is returned for the name's length, then there is no name
    -- associated with the ID.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > ssize_t H5Pget_data_transform(hid_t plist_id, char* expression /*out*/, size_t size);
    foreign import ccall "H5Pget_data_transform" h5p_get_data_transform
      :: HId_t -> OutArray CChar -> CSize -> IO CSSize
    foreign import ccall "&H5Pget_data_transform" p_H5Pget_data_transform
      :: FunPtr (HId_t -> OutArray CChar -> CSize -> IO CSSize)

    {-# LINE 1859 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Given a dataset transfer property list, set the maximum size
    -- for the type conversion buffer and background buffer and
    -- optionally supply pointers to application-allocated buffers.
    -- If the buffer size is smaller than the entire amount of data
    -- being transfered between application and file, and a type
    -- conversion buffer or background buffer is required then
    -- strip mining will be used.
    --
    -- If 'tconv' and/or 'bkg' are null pointers then buffers will be
    -- allocated and freed during the data transfer.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv,
    -- >         void *bkg);
    foreign import ccall "H5Pset_buffer" h5p_set_buffer
      :: HId_t -> CSize -> Ptr a -> Ptr b -> IO HErr_t
    foreign import ccall "&H5Pset_buffer" p_H5Pset_buffer
      :: FunPtr (HId_t -> CSize -> Ptr a -> Ptr b -> IO HErr_t)

    {-# LINE 1876 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Reads values previously set with 'h5p_set_buffer'.
    --
    -- Returns buffer size on success, 0 on failure.
    --
    -- > size_t H5Pget_buffer(hid_t plist_id, void **tconv/*out*/,
    -- >         void **bkg/*out*/);
    foreign import ccall "H5Pget_buffer" h5p_get_buffer
      :: HId_t -> Out (Ptr a) -> Out (Ptr b) -> IO CSize
    foreign import ccall "&H5Pget_buffer" p_H5Pget_buffer
      :: FunPtr (HId_t -> Out (Ptr a) -> Out (Ptr b) -> IO CSize)

    {-# LINE 1884 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |When reading or writing compound data types and the
    -- destination is partially initialized and the read/write is
    -- intended to initialize the other members, one must set this
    -- property to TRUE.  Otherwise the I/O pipeline treats the
    -- destination datapoints as completely uninitialized.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_preserve(hid_t plist_id, hbool_t status);
    foreign import ccall "H5Pset_preserve" h5p_set_preserve
      :: HId_t -> HBool_t -> IO HErr_t
    foreign import ccall "&H5Pset_preserve" p_H5Pset_preserve
      :: FunPtr (HId_t -> HBool_t -> IO HErr_t)

    {-# LINE 1895 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |The inverse of 'h5p_set_preserve'
    --
    -- Returns TRUE or FALSE (C macros) on success, negative on failure.
    --
    -- > int H5Pget_preserve(hid_t plist_id);
    foreign import ccall "H5Pget_preserve" h5p_get_preserve
      :: HId_t -> IO CInt
    foreign import ccall "&H5Pget_preserve" p_H5Pget_preserve
      :: FunPtr (HId_t -> IO CInt)

    {-# LINE 1902 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Enable or disable error-detecting for a dataset reading
    -- process.  This error-detecting algorithm is whichever
    -- user chooses earlier.  This function cannot control
    -- writing process.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check);
    foreign import ccall "H5Pset_edc_check" h5p_set_edc_check
      :: HId_t -> H5Z_EDC_t -> IO HErr_t
    foreign import ccall "&H5Pset_edc_check" p_H5Pset_edc_check
      :: FunPtr (HId_t -> H5Z_EDC_t -> IO HErr_t)

    {-# LINE 1912 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |
    -- > H5Z_EDC_t H5Pget_edc_check(hid_t plist_id);
    foreign import ccall "H5Pget_edc_check" h5p_get_edc_check
      :: HId_t -> IO H5Z_EDC_t
    foreign import ccall "&H5Pget_edc_check" p_H5Pget_edc_check
      :: FunPtr (HId_t -> IO H5Z_EDC_t)

    {-# LINE 1916 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets user's callback function for dataset transfer property
    -- list.  This callback function defines what user wants to do
    -- if certain filter fails.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func,
    -- >                                      void* op_data);
    foreign import ccall "H5Pset_filter_callback" h5p_set_filter_callback
      :: HId_t -> H5Z_filter_func_t a b -> InOut b -> IO HErr_t
    foreign import ccall "&H5Pset_filter_callback" p_H5Pset_filter_callback
      :: FunPtr (HId_t -> H5Z_filter_func_t a b -> InOut b -> IO HErr_t)

    {-# LINE 1926 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets B-tree split ratios for a dataset transfer property
    -- list. The split ratios determine what percent of children go
    -- in the first node when a node splits.  The 'left' ratio is
    -- used when the splitting node is the left-most node at its
    -- level in the tree; the 'right' ratio is when the splitting node
    -- is the right-most node at its level; and the 'middle' ratio for
    -- all other cases.  A node which is the only node at its level
    -- in the tree uses the 'right' ratio when it splits.  All ratios
    -- are real numbers between 0 and 1, inclusive.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_btree_ratios(hid_t plist_id, double left, double middle,
    -- >        double right);
    foreign import ccall "H5Pset_btree_ratios" h5p_set_btree_ratios
      :: HId_t -> CDouble -> CDouble -> CDouble -> IO HErr_t
    foreign import ccall "&H5Pset_btree_ratios" p_H5Pset_btree_ratios
      :: FunPtr (HId_t -> CDouble -> CDouble -> CDouble -> IO HErr_t)

    {-# LINE 1942 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Queries B-tree split ratios.  See H5Pset_btree_ratios().
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/,
    -- >        double *middle/*out*/,
    -- >        double *right/*out*/);
    foreign import ccall "H5Pget_btree_ratios" h5p_get_btree_ratios
      :: HId_t -> Out CDouble -> Out CDouble -> Out CDouble -> IO HErr_t
    foreign import ccall "&H5Pget_btree_ratios" p_H5Pget_btree_ratios
      :: FunPtr (HId_t -> Out CDouble -> Out CDouble -> Out CDouble -> IO HErr_t)

    {-# LINE 1951 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the memory allocate/free pair for VL datatypes.  The
    -- allocation routine is called when data is read into a new
    -- array and the free routine is called when 'h5d_vlen_reclaim' is
    -- called.  The 'alloc_info' and 'free_info' are user parameters
    -- which are passed to the allocation and freeing functions
    -- respectively.  To reset the allocate/free functions to the
    -- default setting of using the system's malloc/free functions,
    -- call this routine with 'alloc_func' and 'free_func' set to NULL.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_vlen_mem_manager(hid_t plist_id,
    -- >        H5MM_allocate_t alloc_func,
    -- >        void *alloc_info, H5MM_free_t free_func,
    -- >        void *free_info);
    foreign import ccall "H5Pset_vlen_mem_manager" h5p_set_vlen_mem_manager
      :: HId_t -> H5MM_allocate_t allocInfo mem -> Ptr allocInfo -> H5MM_free_t freeInfo mem -> Ptr freeInfo -> IO HErr_t
    foreign import ccall "&H5Pset_vlen_mem_manager" p_H5Pset_vlen_mem_manager
      :: FunPtr (HId_t -> H5MM_allocate_t allocInfo mem -> Ptr allocInfo -> H5MM_free_t freeInfo mem -> Ptr freeInfo -> IO HErr_t)

    {-# LINE 1968 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |The inverse of 'h5p_set_vlen_mem_manager'
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_vlen_mem_manager(hid_t plist_id,
    -- >        H5MM_allocate_t *alloc_func,
    -- >        void **alloc_info,
    -- >        H5MM_free_t *free_func,
    -- >        void **free_info);
    foreign import ccall "H5Pget_vlen_mem_manager" h5p_get_vlen_mem_manager
      :: HId_t -> Out (H5MM_allocate_t allocInfo mem) -> Out (Ptr allocInfo) -> Out (H5MM_free_t freeInfo mem) -> Out (Ptr freeInfo) -> IO HErr_t
    foreign import ccall "&H5Pget_vlen_mem_manager" p_H5Pget_vlen_mem_manager
      :: FunPtr (HId_t -> Out (H5MM_allocate_t allocInfo mem) -> Out (Ptr allocInfo) -> Out (H5MM_free_t freeInfo mem) -> Out (Ptr freeInfo) -> IO HErr_t)

    {-# LINE 1979 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Given a dataset transfer property list, set the number of
    -- \"I/O vectors\" (offset and length pairs) which are to be
    -- accumulated in memory before being issued to the lower levels
    -- of the library for reading or writing the actual data.
    -- Increasing the number should give better performance, but use
    -- more memory during hyperslab I/O.  The vector size must be
    -- greater than 1.
    --
    -- The default is to use 1024 vectors for I/O during hyperslab
    -- reading/writing.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
    foreign import ccall "H5Pset_hyper_vector_size" h5p_set_hyper_vector_size
      :: HId_t -> CSize -> IO HErr_t
    foreign import ccall "&H5Pset_hyper_vector_size" p_H5Pset_hyper_vector_size
      :: FunPtr (HId_t -> CSize -> IO HErr_t)

    {-# LINE 1995 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Reads values previously set with 'h5p_set_hyper_vector_size'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
    foreign import ccall "H5Pget_hyper_vector_size" h5p_get_hyper_vector_size
      :: HId_t -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_hyper_vector_size" p_H5Pget_hyper_vector_size
      :: FunPtr (HId_t -> Out CSize -> IO HErr_t)

    {-# LINE 2002 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets user's callback function for dataset transfer property
    -- list.  This callback function defines what user wants to do
    -- if there's exception during datatype conversion.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t op, void* operate_data);
    foreign import ccall "H5Pset_type_conv_cb" h5p_set_type_conv_cb
      :: HId_t -> H5T_conv_except_func_t a b -> InOut b -> IO HErr_t
    foreign import ccall "&H5Pset_type_conv_cb" p_H5Pset_type_conv_cb
      :: FunPtr (HId_t -> H5T_conv_except_func_t a b -> InOut b -> IO HErr_t)

    {-# LINE 2011 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets callback function for dataset transfer property
    -- list.  This callback function defines what user wants to do
    -- if there's exception during datatype conversion.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t *op, void** operate_data);
    foreign import ccall "H5Pget_type_conv_cb" h5p_get_type_conv_cb
      :: HId_t -> Out (H5T_conv_except_func_t a b) -> Out (InOut b) -> IO HErr_t
    foreign import ccall "&H5Pget_type_conv_cb" p_H5Pget_type_conv_cb
      :: FunPtr (HId_t -> Out (H5T_conv_except_func_t a b) -> Out (InOut b) -> IO HErr_t)

    {-# LINE 2020 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    {-# LINE 2035 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Link creation property list (LCPL) routines

    -- |Set 'crt_intmd_group' so that 'h5l_create_*', 'h5o_link', etc.
    -- will create missing groups along the given path \"name\".
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_create_intermediate_group(hid_t plist_id, unsigned crt_intmd);
    foreign import ccall "H5Pset_create_intermediate_group" h5p_set_create_intermediate_group
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_create_intermediate_group" p_H5Pset_create_intermediate_group
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 2045 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the 'crt_intmd_group', which is set to create missing
    -- groups during 'h5o_link', etc.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_create_intermediate_group(hid_t plist_id, unsigned *crt_intmd /*out*/);
    foreign import ccall "H5Pget_create_intermediate_group" h5p_get_create_intermediate_group
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_create_intermediate_group" p_H5Pget_create_intermediate_group
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 2053 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Group creation property list (GCPL) routines

    -- |Set the \"size hint\" for creating local heaps for a group.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint);
    foreign import ccall "H5Pset_local_heap_size_hint" h5p_set_local_heap_size_hint
      :: HId_t -> CSize -> IO HErr_t
    foreign import ccall "&H5Pset_local_heap_size_hint" p_H5Pset_local_heap_size_hint
      :: FunPtr (HId_t -> CSize -> IO HErr_t)

    {-# LINE 2062 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the local heap size hint, which is used for creating groups
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_local_heap_size_hint(hid_t plist_id, size_t *size_hint /*out*/);
    foreign import ccall "H5Pget_local_heap_size_hint" h5p_get_local_heap_size_hint
      :: HId_t -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_local_heap_size_hint" p_H5Pget_local_heap_size_hint
      :: FunPtr (HId_t -> Out CSize -> IO HErr_t)

    {-# LINE 2069 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the maximum # of links to store \"compactly\" and the
    -- minimum # of links to store \"densely\".  (These should
    -- overlap).
    --
    -- Currently both of these must be updated at the same time.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_link_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense);
    foreign import ccall "H5Pset_link_phase_change" h5p_set_link_phase_change
      :: HId_t -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_link_phase_change" p_H5Pset_link_phase_change
      :: FunPtr (HId_t -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 2080 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the max. # of compact links & the min. # of dense
    -- links, which are used for storing groups
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_link_phase_change(hid_t plist_id, unsigned *max_compact /*out*/, unsigned *min_dense /*out*/);
    foreign import ccall "H5Pget_link_phase_change" h5p_get_link_phase_change
      :: HId_t -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_link_phase_change" p_H5Pget_link_phase_change
      :: FunPtr (HId_t -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 2088 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the estimates for the number of entries and length of each
    -- entry name in a group.
    --
    -- Currently both of these must be updated at the same time.
    --
    -- 'est_num_entries' applies only when the number of entries is less
    -- than the 'max_compact' # of entries (from 'h5p_set_link_phase_change').
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_est_link_info(hid_t plist_id, unsigned est_num_entries, unsigned est_name_len);
    foreign import ccall "H5Pset_est_link_info" h5p_set_est_link_info
      :: HId_t -> CUInt -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_est_link_info" p_H5Pset_est_link_info
      :: FunPtr (HId_t -> CUInt -> CUInt -> IO HErr_t)

    {-# LINE 2101 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the est. # of links in a group & the est. length of
    -- the name of each link.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_est_link_info(hid_t plist_id, unsigned *est_num_entries /* out */, unsigned *est_name_len /* out */);
    foreign import ccall "H5Pget_est_link_info" h5p_get_est_link_info
      :: HId_t -> Out CUInt -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_est_link_info" p_H5Pget_est_link_info
      :: FunPtr (HId_t -> Out CUInt -> Out CUInt -> IO HErr_t)

    {-# LINE 2109 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the flags for creation order of links in a group
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_link_creation_order(hid_t plist_id, unsigned crt_order_flags);
    foreign import ccall "H5Pset_link_creation_order" h5p_set_link_creation_order
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_link_creation_order" p_H5Pset_link_creation_order
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 2116 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the flag indicating that creation order is tracked
    -- for links in a group.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_link_creation_order(hid_t plist_id, unsigned *crt_order_flags /* out */);
    foreign import ccall "H5Pget_link_creation_order" h5p_get_link_creation_order
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_link_creation_order" p_H5Pget_link_creation_order
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 2124 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * String creation property list (STRCPL) routines

    -- |Sets the character encoding of the string.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_char_encoding(hid_t plist_id, H5T_cset_t encoding);
    foreign import ccall "H5Pset_char_encoding" h5p_set_char_encoding
      :: HId_t -> H5T_cset_t -> IO HErr_t
    foreign import ccall "&H5Pset_char_encoding" p_H5Pset_char_encoding
      :: FunPtr (HId_t -> H5T_cset_t -> IO HErr_t)

    {-# LINE 2133 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the character encoding of the string.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_char_encoding(hid_t plist_id, H5T_cset_t *encoding /*out*/);
    foreign import ccall "H5Pget_char_encoding" h5p_get_char_encoding
      :: HId_t -> Out H5T_cset_t -> IO HErr_t
    foreign import ccall "&H5Pget_char_encoding" p_H5Pget_char_encoding
      :: FunPtr (HId_t -> Out H5T_cset_t -> IO HErr_t)

    {-# LINE 2140 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Link access property list (LAPL) routines

    -- |Set the number of soft or UD link traversals allowed before
    -- the library assumes it has found a cycle and aborts the
    -- traversal.
    --
    -- The limit on soft or UD link traversals is designed to
    -- terminate link traversal if one or more links form a cycle.
    -- However, users may have a file with a legitimate path
    -- formed of a large number of soft or user-defined links.
    -- This property can be used to allow traversal of as many
    -- links as desired.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_nlinks(hid_t plist_id, size_t nlinks);
    foreign import ccall "H5Pset_nlinks" h5p_set_nlinks
      :: HId_t -> CSize -> IO HErr_t
    foreign import ccall "&H5Pset_nlinks" p_H5Pset_nlinks
      :: FunPtr (HId_t -> CSize -> IO HErr_t)

    {-# LINE 2159 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the number of soft or user-defined links that can be
    -- traversed before a failure occurs.
    --
    -- Retrieves the current setting for the nlinks property on
    -- the given property list.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_nlinks(hid_t plist_id, size_t *nlinks);
    foreign import ccall "H5Pget_nlinks" h5p_get_nlinks
      :: HId_t -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_nlinks" p_H5Pget_nlinks
      :: FunPtr (HId_t -> Out CSize -> IO HErr_t)

    {-# LINE 2170 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set a prefix to be applied to the path of any external links
    -- traversed.  The prefix is appended to the filename stored
    -- in the external link.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_elink_prefix(hid_t plist_id, const char *prefix);
    foreign import ccall "H5Pset_elink_prefix" h5p_set_elink_prefix
      :: HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Pset_elink_prefix" p_H5Pset_elink_prefix
      :: FunPtr (HId_t -> CString -> IO HErr_t)

    {-# LINE 2179 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the prefix to be applied to any external link
    -- traversals made using this property list.
    --
    -- If the pointer is not NULL, it points to a user-allocated
    -- buffer.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > ssize_t H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size);
    foreign import ccall "H5Pget_elink_prefix" h5p_get_elink_prefix
      :: HId_t -> OutArray CChar -> CSize -> IO CSSize
    foreign import ccall "&H5Pget_elink_prefix" p_H5Pget_elink_prefix
      :: FunPtr (HId_t -> OutArray CChar -> CSize -> IO CSSize)

    {-# LINE 2190 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the file access property list identifier that is
    -- set for link access property.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > hid_t H5Pget_elink_fapl(hid_t lapl_id);
    foreign import ccall "H5Pget_elink_fapl" h5p_get_elink_fapl
      :: HId_t -> IO HId_t
    foreign import ccall "&H5Pget_elink_fapl" p_H5Pget_elink_fapl
      :: FunPtr (HId_t -> IO HId_t)

    {-# LINE 2198 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the file access property list for link access
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_elink_fapl(hid_t lapl_id, hid_t fapl_id);
    foreign import ccall "H5Pset_elink_fapl" h5p_set_elink_fapl
      :: HId_t -> HId_t -> IO HErr_t
    foreign import ccall "&H5Pset_elink_fapl" p_H5Pset_elink_fapl
      :: FunPtr (HId_t -> HId_t -> IO HErr_t)

    {-# LINE 2205 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the file access flags to be used when traversing an
    -- external link.  This should be either 'h5f_ACC_RDONLY' or
    -- 'h5f_ACC_RDWR', or 'h5f_ACC_DEFAULT' to unset the value.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_elink_acc_flags(hid_t lapl_id, unsigned flags);
    foreign import ccall "H5Pset_elink_acc_flags" h5p_set_elink_acc_flags
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_elink_acc_flags" p_H5Pset_elink_acc_flags
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 2214 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the file access flags to be used when traversing an
    -- external link.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_elink_acc_flags(hid_t lapl_id, unsigned *flags);
    foreign import ccall "H5Pget_elink_acc_flags" h5p_get_elink_acc_flags
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_elink_acc_flags" p_H5Pget_elink_acc_flags
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 2222 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Sets the file access flags to be used when traversing an
    -- external link.  This should be either 'h5f_ACC_RDONLY' or
    -- 'h5f_ACC_RDWR'.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_elink_cb(hid_t lapl_id, H5L_elink_traverse_t func, void *op_data);
    foreign import ccall "H5Pset_elink_cb" h5p_set_elink_cb
      :: HId_t -> H5L_elink_traverse_t a -> Ptr a -> IO HErr_t
    foreign import ccall "&H5Pset_elink_cb" p_H5Pset_elink_cb
      :: FunPtr (HId_t -> H5L_elink_traverse_t a -> Ptr a -> IO HErr_t)

    {-# LINE 2231 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Gets the file access flags to be used when traversing an
    -- external link.
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data);
    foreign import ccall "H5Pget_elink_cb" h5p_get_elink_cb
      :: HId_t -> Out (H5L_elink_traverse_t a) -> Out (Ptr a) -> IO HErr_t
    foreign import ccall "&H5Pget_elink_cb" p_H5Pget_elink_cb
      :: FunPtr (HId_t -> Out (H5L_elink_traverse_t a) -> Out (Ptr a) -> IO HErr_t)

    {-# LINE 2239 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Object copy property list (OCPYPL) routines

    -- |Set properties when copying an object (group, dataset, and datatype)
    -- from one location to another
    --
    -- Parameters:
    --
    -- [@ plist_id   :: 'HId_t' @]  Property list to copy object
    --
    -- [@ cpy_option :: 'CUInt' @]  Options to copy object
    --
    -- Possible values for 'cpy_option' include:
    --
    --  ['h5o_COPY_SHALLOW_HIERARCHY_FLAG'] Copy only immediate members
    --
    --  ['h5o_COPY_EXPAND_SOFT_LINK_FLAG' ] Expand soft links into new objects/
    --
    --  ['h5o_COPY_EXPAND_EXT_LINK_FLAG'  ] Expand external links into new objects
    --
    --  ['h5o_COPY_EXPAND_REFERENCE_FLAG' ] Copy objects that are pointed by references
    --
    --  ['h5o_COPY_WITHOUT_ATTR_FLAG'     ] Copy object without copying attributes
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_copy_object(hid_t plist_id, unsigned crt_intmd);
    foreign import ccall "H5Pset_copy_object" h5p_set_copy_object
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_copy_object" p_H5Pset_copy_object
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 2267 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Returns the cpy_option, which is set for 'h5o_copy' for copying objects
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_copy_object(hid_t plist_id, unsigned *crt_intmd /*out*/);
    foreign import ccall "H5Pget_copy_object" h5p_get_copy_object
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_copy_object" p_H5Pget_copy_object
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 2274 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- TODO: finish

    -- |Adds path to the list of paths to search first in the
    -- target file when merging committed datatypes during H5Ocopy
    -- (i.e. when using the H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG flag
    -- as set by H5Pset_copy_object).  If the source named
    -- dataype is not found in the list of paths created by this
    -- function, the entire file will be searched.
    --
    -- Usage:       H5Padd_merge_committed_dtype_path(plist_id, path)
    --              hid_t plist_id;                 IN: Property list to copy object
    --              const char *path;               IN: Path to add to list
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Padd_merge_committed_dtype_path(hid_t plist_id, const char *path);
    foreign import ccall "H5Padd_merge_committed_dtype_path" h5p_add_merge_committed_dtype_path
      :: HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Padd_merge_committed_dtype_path" p_H5Padd_merge_committed_dtype_path
      :: FunPtr (HId_t -> CString -> IO HErr_t)

    {-# LINE 2292 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Frees and clears the list of paths created by
    -- H5Padd_merge_committed_dtype_path.  A new list may then be
    -- created by calling H5Padd_merge_committed_dtype_path again.
    --
    -- Usage:       H5Pfree_merge_committed_dtype_paths(plist_id)
    --              hid_t plist_id;                 IN: Property list to copy object
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pfree_merge_committed_dtype_paths(hid_t plist_id);
    foreign import ccall "H5Pfree_merge_committed_dtype_paths" h5p_free_merge_committed_dtype_paths
      :: HId_t -> IO HErr_t
    foreign import ccall "&H5Pfree_merge_committed_dtype_paths" p_H5Pfree_merge_committed_dtype_paths
      :: FunPtr (HId_t -> IO HErr_t)

    {-# LINE 2304 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Set the callback function when a matching committed datatype is not found
    -- from the list of paths stored in the object copy property list.
    -- H5Ocopy will invoke this callback before searching all committed datatypes
    -- at destination.
    --
    -- Usage:       H5Pset_mcdt_search_cb(plist_id, H5O_mcdt_search_cb_t func, void *op_data)
    --              hid_t plist_id;                 IN: Property list to copy object
    --              H5O_mcdt_search_cb_t func;      IN: The callback function
    --              void *op_data;              IN: The user data
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data);
    foreign import ccall "H5Pset_mcdt_search_cb" h5p_set_mcdt_search_cb
      :: HId_t -> H5O_mcdt_search_cb_t a -> InOut a -> IO HErr_t
    foreign import ccall "&H5Pset_mcdt_search_cb" p_H5Pset_mcdt_search_cb
      :: FunPtr (HId_t -> H5O_mcdt_search_cb_t a -> InOut a -> IO HErr_t)

    {-# LINE 2319 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Retrieves the callback function and user data from the specified
    -- object copy property list.
    --
    -- Usage:       H5Pget_mcdt_search_cb(plist_id, H5O_mcdt_search_cb_t *func, void **op_data)
    --              hid_t plist_id;                 IN: Property list to copy object
    --      H5O_mcdt_search_cb_t *func; OUT: The callback function
    --      void **op_data;         OUT: The user data
    --
    -- Returns non-negative on success, negative on failure.
    --
    -- > herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
    foreign import ccall "H5Pget_mcdt_search_cb" h5p_get_mcdt_search_cb
      :: HId_t -> Out (H5O_mcdt_search_cb_t a) -> Out (InOut a) -> IO HErr_t
    foreign import ccall "&H5Pget_mcdt_search_cb" p_H5Pget_mcdt_search_cb
      :: FunPtr (HId_t -> Out (H5O_mcdt_search_cb_t a) -> Out (InOut a) -> IO HErr_t)

    {-# LINE 2332 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > herr_t H5Pencode(hid_t plist_id, void *buf, size_t *nalloc);
    foreign import ccall "H5Pencode2" h5p_encode2
      :: HId_t -> In a -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pencode2" p_H5Pencode2
      :: FunPtr (HId_t -> In a -> Out CSize -> IO HErr_t)

    {-# LINE 2336 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > H5_DLL hid_t  H5Pdecode(const void *buf);
    foreign import ccall "H5Pdecode" h5p_decode
      :: In a -> IO HId_t
    foreign import ccall "&H5Pdecode" p_H5Pdecode
      :: FunPtr (In a -> IO HId_t)

    {-# LINE 2339 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > typedef herr_t (*H5P_prp_encode_func_t)(const void *value, void **buf, size_t *size);
    type H5P_prp_encode_func_t a b = FunPtr (In a -> Out b -> Out CSize)

    -- > typedef herr_t (*H5P_prp_decode_func_t)(const void **buf, void *value);
    type H5P_prp_decode_func_t a b = FunPtr (In a -> Out b)

    -- > H5_DLL herr_t H5Pset_file_space(hid_t plist_id, H5F_file_space_type_t strategy, hsize_t threshold);
    foreign import ccall "H5Pset_file_space" h5p_set_file_space
      :: HId_t -> H5F_file_space_type_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_file_space" p_H5Pset_file_space
      :: FunPtr (HId_t -> H5F_file_space_type_t -> HSize_t -> IO HErr_t)

    {-# LINE 2348 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > H5_DLL herr_t H5Pget_file_space(hid_t plist_id, H5F_file_space_type_t *strategy, hsize_t *threshold);
    foreign import ccall "H5Pget_file_space" h5p_get_file_space
      :: HId_t -> Out H5F_file_space_type_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_file_space" p_H5Pget_file_space
      :: FunPtr (HId_t -> Out H5F_file_space_type_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 2351 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > herr_t H5Pset_metadata_read_attempts(hid_t plist_id, unsigned attempts);
    foreign import ccall "H5Pget_metadata_read_attempts" h5p_get_metadata_read_attempts
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_metadata_read_attempts" p_H5Pget_metadata_read_attempts
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 2354 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pset_object_flush_cb(hid_t plist_id, H5F_flush_cb_t func, void *udata);
    foreign import ccall "H5Pset_object_flush_cb" h5p_set_object_flush_cb
      :: HId_t -> H5F_flush_cb_t a -> Out a -> IO HErr_t
    foreign import ccall "&H5Pset_object_flush_cb" p_H5Pset_object_flush_cb
      :: FunPtr (HId_t -> H5F_flush_cb_t a -> Out a -> IO HErr_t)

    {-# LINE 2356 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func, void **udata);
    foreign import ccall "H5Pget_object_flush_cb" h5p_get_object_flush_cb
      :: HId_t -> H5F_flush_cb_t a -> Out (Out a) -> IO HErr_t
    foreign import ccall "&H5Pget_object_flush_cb" p_H5Pget_object_flush_cb
      :: FunPtr (HId_t -> H5F_flush_cb_t a -> Out (Out a) -> IO HErr_t)

    {-# LINE 2358 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pset_mdc_log_options(hid_t plist_id, hbool_t is_enabled, const char *location, hbool_t start_on_access);
    foreign import ccall "H5Pset_mdc_log_options" h5p_set_mdc_log_options
      :: HId_t -> HBool_t -> CString -> HBool_t -> IO HErr_t
    foreign import ccall "&H5Pset_mdc_log_options" p_H5Pset_mdc_log_options
      :: FunPtr (HId_t -> HBool_t -> CString -> HBool_t -> IO HErr_t)

    {-# LINE 2360 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled, char *location, size_t *location_size, hbool_t *start_on_access);
    foreign import ccall "H5Pget_mdc_log_options" h5p_get_mdc_log_options
      :: HId_t -> Out HBool_t -> Out CString -> Out CSize -> Out HBool_t -> IO HErr_t
    foreign import ccall "&H5Pget_mdc_log_options" p_H5Pget_mdc_log_options
      :: FunPtr (HId_t -> Out HBool_t -> Out CString -> Out CSize -> Out HBool_t -> IO HErr_t)

    {-# LINE 2362 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > herr_t H5Pset_virtual(hid_t dcpl_id, hid_t vspace_id,
    -- >     const char *src_file_name, const char *src_dset_name, hid_t src_space_id);
    foreign import ccall "H5Pset_virtual" h5p_set_virtual
      :: HId_t -> HId_t -> CString -> CString -> HId_t -> IO HErr_t
    foreign import ccall "&H5Pset_virtual" p_H5Pset_virtual
      :: FunPtr (HId_t -> HId_t -> CString -> CString -> HId_t -> IO HErr_t)

    {-# LINE 2366 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pget_virtual_count(hid_t dcpl_id, size_t *count/*out*/);
    foreign import ccall "H5Pget_virtual_count" h5p_get_virtual_count
      :: HId_t -> Out CSize -> IO HErr_t
    foreign import ccall "&H5Pget_virtual_count" p_H5Pget_virtual_count
      :: FunPtr (HId_t -> Out CSize -> IO HErr_t)

    {-# LINE 2368 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > hid_t H5Pget_virtual_vspace(hid_t dcpl_id, size_t index);
    foreign import ccall "H5Pget_virtual_vspace" h5p_get_virtual_vspace
      :: HId_t -> CSize -> IO HId_t
    foreign import ccall "&H5Pget_virtual_vspace" p_H5Pget_virtual_vspace
      :: FunPtr (HId_t -> CSize -> IO HId_t)

    {-# LINE 2370 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > hid_t H5Pget_virtual_srcspace(hid_t dcpl_id, size_t index);
    foreign import ccall "H5Pget_virtual_srcspace" h5p_get_virtual_srcspace
      :: HId_t -> CSize -> IO HId_t
    foreign import ccall "&H5Pget_virtual_srcspace" p_H5Pget_virtual_srcspace
      :: FunPtr (HId_t -> CSize -> IO HId_t)

    {-# LINE 2372 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > ssize_t H5Pget_virtual_filename(hid_t dcpl_id, size_t index,
    -- >     char *name/*out*/, size_t size);
    foreign import ccall "H5Pget_virtual_filename" h5p_get_virtual_filename
      :: HId_t -> CSize -> Out CString -> CSize -> IO CSSize
    foreign import ccall "&H5Pget_virtual_filename" p_H5Pget_virtual_filename
      :: FunPtr (HId_t -> CSize -> Out CString -> CSize -> IO CSSize)

    {-# LINE 2375 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > ssize_t H5Pget_virtual_dsetname(hid_t dcpl_id, size_t index,
    -- >     char *name/*out*/, size_t size);
    foreign import ccall "H5Pget_virtual_dsetname" h5p_get_virtual_dsetname
      :: HId_t -> CSize -> Out CString -> CSize -> IO CSSize
    foreign import ccall "&H5Pget_virtual_dsetname" p_H5Pget_virtual_dsetname
      :: FunPtr (HId_t -> CSize -> Out CString -> CSize -> IO CSSize)

    {-# LINE 2378 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > herr_t H5Pset_chunk_opts(hid_t plist_id, unsigned opts);
    foreign import ccall "H5Pset_chunk_opts" h5p_set_chunk_opts
      :: HId_t -> CUInt -> IO HErr_t
    foreign import ccall "&H5Pset_chunk_opts" p_H5Pset_chunk_opts
      :: FunPtr (HId_t -> CUInt -> IO HErr_t)

    {-# LINE 2381 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pget_chunk_opts(hid_t plist_id, unsigned *opts);
    foreign import ccall "H5Pget_chunk_opts" h5p_get_chunk_opts
      :: HId_t -> Out CUInt -> IO HErr_t
    foreign import ccall "&H5Pget_chunk_opts" p_H5Pget_chunk_opts
      :: FunPtr (HId_t -> Out CUInt -> IO HErr_t)

    {-# LINE 2383 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- > +H5_DLL herr_t H5Pset_virtual_view(hid_t plist_id, H5D_vds_view_t view);
    foreign import ccall "H5Pset_virtual_view" h5p_set_virtual_view
      :: HId_t -> H5D_vds_view_t -> IO HErr_t
    foreign import ccall "&H5Pset_virtual_view" p_H5Pset_virtual_view
      :: FunPtr (HId_t -> H5D_vds_view_t -> IO HErr_t)

    {-# LINE 2386 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > +H5_DLL herr_t H5Pget_virtual_view(hid_t plist_id, H5D_vds_view_t *view);
    foreign import ccall "H5Pget_virtual_view" h5p_get_virtual_view
      :: HId_t -> Out H5D_vds_view_t -> IO HErr_t
    foreign import ccall "&H5Pget_virtual_view" p_H5Pget_virtual_view
      :: FunPtr (HId_t -> Out H5D_vds_view_t -> IO HErr_t)

    {-# LINE 2388 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > +H5_DLL herr_t H5Pset_virtual_printf_gap(hid_t plist_id, hsize_t gap_size);
    foreign import ccall "H5Pset_virtual_printf_gap" h5p_set_virtual_printf_gap
      :: HId_t -> HSize_t -> IO HErr_t
    foreign import ccall "&H5Pset_virtual_printf_gap" p_H5Pset_virtual_printf_gap
      :: FunPtr (HId_t -> HSize_t -> IO HErr_t)

    {-# LINE 2390 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > +H5_DLL herr_t H5Pget_virtual_printf_gap(hid_t plist_id, hsize_t *gap_size);
    foreign import ccall "H5Pget_virtual_printf_gap" h5p_get_virtual_printf_gap
      :: HId_t -> Out HSize_t -> IO HErr_t
    foreign import ccall "&H5Pget_virtual_printf_gap" p_H5Pget_virtual_printf_gap
      :: FunPtr (HId_t -> Out HSize_t -> IO HErr_t)

    {-# LINE 2392 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > +H5_DLL herr_t H5Pset_append_flush(hid_t plist_id, unsigned ndims,
    -- > +    const hsize_t boundary[], H5D_append_cb_t func, void *udata);
    foreign import ccall "H5Pset_append_flush" h5p_set_append_flush
      :: HId_t -> CUInt -> In HSize_t -> H5D_append_cb_t a -> In a -> IO HErr_t
    foreign import ccall "&H5Pset_append_flush" p_H5Pset_append_flush
      :: FunPtr (HId_t -> CUInt -> In HSize_t -> H5D_append_cb_t a -> In a -> IO HErr_t)

    {-# LINE 2395 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > +H5_DLL herr_t H5Pget_append_flush(hid_t plist_id, unsigned dims,
    -- > +    hsize_t boundary[], H5D_append_cb_t *func, void **udata);
    foreign import ccall "H5Pget_append_flush" h5p_get_append_flush
      :: HId_t -> CUInt -> In HSize_t -> H5D_append_cb_t a -> Out (Out a) -> IO HErr_t
    foreign import ccall "&H5Pget_append_flush" p_H5Pget_append_flush
      :: FunPtr (HId_t -> CUInt -> In HSize_t -> H5D_append_cb_t a -> Out (Out a) -> IO HErr_t)

    {-# LINE 2398 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > herr_t H5Pset_efile_prefix(hid_t dapl_id, const char* prefix);
    foreign import ccall "H5Pset_efile_prefix" h5p_set_efile_prefix
      :: HId_t -> CString -> IO HErr_t
    foreign import ccall "&H5Pset_efile_prefix" p_H5Pset_efile_prefix
      :: FunPtr (HId_t -> CString -> IO HErr_t)

    {-# LINE 2400 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    -- > ssize_t H5Pget_efile_prefix(hid_t dapl_id, char* prefix /*out*/, size_t size);
    foreign import ccall "H5Pget_efile_prefix" h5p_get_efile_prefix
      :: HId_t -> Out CString -> CSize -> IO CSSize
    foreign import ccall "&H5Pget_efile_prefix" p_H5Pget_efile_prefix
      :: FunPtr (HId_t -> Out CString -> CSize -> IO CSSize)

    {-# LINE 2402 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    {-# LINE 2415 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    {-# LINE 2417 "src/Bindings/HDF5/Raw/H5P.hsc" #-}
    h5d_MPIO_NO_COLLECTIVE_MAX_CAUSE :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_NO_COLLECTIVE_MAX_CAUSE :: H5D_mpio_no_collective_cause_t
    h5d_MPIO_NO_COLLECTIVE_MAX_CAUSE = Word32 -> H5D_mpio_no_collective_cause_t
    H5D_mpio_no_collective_cause_t (Word32
    512)

    {-# LINE 2418 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    {-# LINE 2421 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    {-# LINE 2423 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- * Deprecated Constants

    -- |We renamed the "root" of the property list class hierarchy
    h5p_NO_CLASS :: HId_t
    h5p_NO_CLASS :: HId_t
    h5p_NO_CLASS = HId_t
    h5p_ROOT

    -- * Deprecated Functions

    -- | Old version of 'h5p_register2'.
    --
    -- > herr_t H5Pregister1(hid_t cls_id, const char *name, size_t size,
    -- >     void *def_value, H5P_prp_create_func_t prp_create,
    -- >     H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
    -- >     H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
    -- >     H5P_prp_close_func_t prp_close);
    foreign import ccall "H5Pregister1" h5p_register1
      :: HId_t -> CString -> CSize -> Ptr a -> H5P_prp_create_func_t a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_close_func_t a -> IO HErr_t
    foreign import ccall "&H5Pregister1" p_H5Pregister1
      :: FunPtr (HId_t -> CString -> CSize -> Ptr a -> H5P_prp_create_func_t a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_close_func_t a -> IO HErr_t)

    {-# LINE 2440 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |Old version of 'h5p_insert2'.
    --
    -- > herr_t H5Pinsert1(hid_t plist_id, const char *name, size_t size,
    -- >     void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
    -- >     H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
    -- >     H5P_prp_close_func_t prp_close);
    foreign import ccall "H5Pinsert1" h5p_insert1
      :: HId_t -> CString -> CSize -> In a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_close_func_t a -> IO HErr_t
    foreign import ccall "&H5Pinsert1" p_H5Pinsert1
      :: FunPtr (HId_t -> CString -> CSize -> In a -> H5P_prp_set_func_t a -> H5P_prp_get_func_t a -> H5P_prp_delete_func_t a -> H5P_prp_copy_func_t a -> H5P_prp_close_func_t a -> IO HErr_t)

    {-# LINE 2448 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This is the query counterpart of 'h5p_set_filter' and returns
    -- information about a particular filter number in a permanent
    -- or transient pipeline depending on whether 'plist_id' is a
    -- dataset creation or transfer property list.  On input,
    -- 'cd_nelmts' indicates the number of entries in the 'cd_values'
    -- array allocated by the caller while on exit it contains the
    -- number of values defined by the filter.  The 'idx'
    -- should be a value between zero and N-1 as described for
    -- 'h5p_get_nfilters' and the function will return failure if the
    -- filter number is out of range.
    --
    -- > H5Z_filter_t H5Pget_filter1(hid_t plist_id, unsigned filter,
    -- >     unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
    -- >     unsigned cd_values[]/*out*/, size_t namelen, char name[]);
    foreign import ccall "H5Pget_filter1" h5p_get_filter1
      :: HId_t -> CUInt -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> Out CChar -> IO H5Z_filter_t
    foreign import ccall "&H5Pget_filter1" p_H5Pget_filter1
      :: FunPtr (HId_t -> CUInt -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> Out CChar -> IO H5Z_filter_t)

    {-# LINE 2464 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    -- |This is an additional query counterpart of 'h5p_set_filter' and
    -- returns information about a particular filter in a permanent
    -- or transient pipeline depending on whether 'plist_id' is a
    -- dataset creation or transfer property list.  On input,
    -- 'cd_nelmts' indicates the number of entries in the 'cd_values'
    -- array allocated by the caller while on exit it contains the
    -- number of values defined by the filter.  The ID
    -- should be the filter ID to retrieve the parameters for.  If the
    -- filter is not set for the property list, an error will be returned.
    --
    -- > herr_t H5Pget_filter_by_id1(hid_t plist_id, H5Z_filter_t id,
    -- >     unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
    -- >     unsigned cd_values[]/*out*/, size_t namelen, char name[]/*out*/);
    foreign import ccall "H5Pget_filter_by_id1" h5p_get_filter_by_id1
      :: HId_t -> H5Z_filter_t -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> OutArray CChar -> IO HErr_t
    foreign import ccall "&H5Pget_filter_by_id1" p_H5Pget_filter_by_id1
      :: FunPtr (HId_t -> H5Z_filter_t -> Out CUInt -> Out CSize -> OutArray CUInt -> CSize -> OutArray CChar -> IO HErr_t)

    {-# LINE 2479 "src/Bindings/HDF5/Raw/H5P.hsc" #-}

    {-# LINE 2481 "src/Bindings/HDF5/Raw/H5P.hsc" #-}