hdf5-1.8.12: src/Bindings/HDF5/Raw/H5O.hsc
#include <bindings.h>
#include <H5Apublic.h>
module Bindings.HDF5.Raw.H5O where
import Data.Int
import Data.Word
import Foreign.C.String
import Foreign.C.Types
import Foreign.Ptr
import Foreign.Storable
import Bindings.HDF5.Raw.H5 -- Generic Functions
import Bindings.HDF5.Raw.H5I -- IDs
import Foreign.Ptr.Conventions
-- * Constants
-- ** Flags for object copy ('h5o_copy')
-- |Copy only immediate members
#num H5O_COPY_SHALLOW_HIERARCHY_FLAG
-- |Expand soft links into new objects
#num H5O_COPY_EXPAND_SOFT_LINK_FLAG
-- |Expand external links into new objects
#num H5O_COPY_EXPAND_EXT_LINK_FLAG
-- |Copy objects that are pointed by references
#num H5O_COPY_EXPAND_REFERENCE_FLAG
-- |Copy object without copying attributes
#num H5O_COPY_WITHOUT_ATTR_FLAG
-- |Copy NULL messages (empty space)
#num H5O_COPY_PRESERVE_NULL_FLAG
#if H5_VERSION_GE(1,8,9)
-- |Merge committed datatypes in dest file
#num H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG
#endif
-- |All object copying flags (for internal checking)
#num H5O_COPY_ALL
-- ** Flags for shared message indexes
-- Pass these flags in using the mesg_type_flags parameter in
-- H5P_set_shared_mesg_index.
-- | No shared messages
#num H5O_SHMESG_NONE_FLAG
-- | Simple Dataspace Message
#num H5O_SHMESG_SDSPACE_FLAG
-- | Datatype Message
#num H5O_SHMESG_DTYPE_FLAG
-- | Fill Value Message
#num H5O_SHMESG_FILL_FLAG
-- | Filter pipeline message
#num H5O_SHMESG_PLINE_FLAG
-- | Attribute Message
#num H5O_SHMESG_ATTR_FLAG
#num H5O_SHMESG_ALL_FLAG
-- ** Object header status flag definitions
-- |2-bit field indicating # of bytes to store the size of chunk 0's data
#num H5O_HDR_CHUNK0_SIZE
-- |Attribute creation order is tracked
#num H5O_HDR_ATTR_CRT_ORDER_TRACKED
-- |Attribute creation order has index
#num H5O_HDR_ATTR_CRT_ORDER_INDEXED
-- |Non-default attribute storage phase change values stored
#num H5O_HDR_ATTR_STORE_PHASE_CHANGE
-- |Store access, modification, change & birth times for object
#num H5O_HDR_STORE_TIMES
#num H5O_HDR_ALL_FLAGS
-- ** Maximum shared message values
#num H5O_SHMESG_MAX_NINDEXES
#num H5O_SHMESG_MAX_LIST_SIZE
-- * Types
-- |Types of objects in file
#newtype H5O_type_t, Eq
-- |Unknown object type
#newtype_const H5O_type_t, H5O_TYPE_UNKNOWN
-- |Object is a group
#newtype_const H5O_type_t, H5O_TYPE_GROUP
-- |Object is a dataset
#newtype_const H5O_type_t, H5O_TYPE_DATASET
-- |Object is a named data type
#newtype_const H5O_type_t, H5O_TYPE_NAMED_DATATYPE
-- |Number of different object types
#num H5O_TYPE_NTYPES
#if H5_VERSION_GE(1,8,4)
-- |Information struct for object header metadata
-- (for 'h5o_get_info'/ 'h5o_get_info_by_name' / 'h5o_get_info_by_idx')
#starttype H5O_hdr_info_t
-- |Version number of header format in file
#field version, CUInt
-- |Number of object header messages
#field nmesgs, CUInt
-- |Number of object header chunks
#field nchunks, CUInt
-- |Object header status flags
#field flags, CUInt
-- |Total space for storing object header in file
#field space.total, <hsize_t>
-- |Space within header for object header metadata information
#field space.meta, <hsize_t>
-- |Space within header for actual message information
#field space.mesg, <hsize_t>
-- |Free space within object header
#field space.free, <hsize_t>
-- |Flags to indicate presence of message type in header
#field mesg.present, Word64
-- |Flags to indicate message type is shared in header
#field mesg.shared, Word64
#stoptype
#endif
#if H5_VERSION_GE(1,11,0)
#starttype H5O_token_t
#field __data, CUChar
#stoptype
#endif
-- |Information struct for object
-- (for 'h5o_get_info'/ 'h5o_get_info_by_name' / 'h5o_get_info_by_idx')
#if (H5Fget_info_vers == 1)
#starttype H5O_info_t
#else
#starttype H5O_info2_t
#endif
-- |File number that object is located in
#field fileno, CULong
#if (H5Fget_info_vers == 1)
-- |Object address in file
#field addr, <haddr_t>
#endif
-- |Token representing the object
#if H5_VERSION_GE(1,11,0)
#field token, <H5O_token_t>
#endif
-- |Basic object type (group, dataset, etc.)
#field type, <H5O_type_t>
-- |Reference count of object
#field rc, CUInt
-- |Access time
#field atime, <time_t>
-- |Modification time
#field mtime, <time_t>
-- |Change time
#field ctime, <time_t>
-- |Birth time
#field btime, <time_t>
-- |# of attributes attached to object
#field num_attrs, <hsize_t>
#if H5_VERSION_GE(1,8,4)
#if (H5Fget_info_vers == 1)
-- |Object header information
#field hdr, <H5O_hdr_info_t>
#endif
#else
#if (H5Fget_info_vers == 1)
-- |Version number of header format in file
#field hdr.version, CUInt
-- |Number of object header messages
#field hdr.nmesgs, CUInt
-- |Number of object header chunks
#field hdr.nchunks, CUInt
-- |Object header status flags
#field hdr.flags, CUInt
-- |Total space for storing object header in file
#field hdr.space.total, <hsize_t>
-- |Space within header for object header metadata information
#field hdr.space.meta, <hsize_t>
-- |Space within header for actual message information
#field hdr.space.mesg, <hsize_t>
-- |Free space within object header
#field hdr.space.free, <hsize_t>
-- |Flags to indicate presence of message type in header
#field hdr.mesg.present, Word64
-- |Flags to indicate message type is shared in header
#field hdr.mesg.shared, Word64
#endif
#endif
#if (H5Fget_info_vers == 1)
-- |v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets
#field meta_size.obj, <H5_ih_info_t>
-- |v2 B-tree & heap for attributes
#field meta_size.attr, <H5_ih_info_t>
#endif
#stoptype
-- |Typedef for message creation indexes
#newtype H5O_msg_crt_idx_t, Eq, Ord, Read
#if (H5Fget_info_vers == 1)
-- |Prototype for 'h5o_visit' / 'h5o_visit_by_name' operator
type H5O_iterate_t a = FunPtr (HId_t -> CString -> In H5O_info_t -> InOut a -> IO HErr_t)
#else
-- |Prototype for 'h5o_visit' / 'h5o_visit_by_name' operator
type H5O_iterate2_t a = FunPtr (HId_t -> CString -> In H5O_info2_t -> InOut a -> IO HErr_t)
#endif
#newtype H5O_mcdt_search_ret_t
-- |Abort H5Ocopy
#newtype_const H5O_mcdt_search_ret_t, H5O_MCDT_SEARCH_ERROR
-- |Continue the global search of all committed datatypes in the destination file
#newtype_const H5O_mcdt_search_ret_t, H5O_MCDT_SEARCH_CONT
-- |Stop the search, but continue copying. The committed datatype will be copied but not merged.
#newtype_const H5O_mcdt_search_ret_t, H5O_MCDT_SEARCH_STOP
-- |Callback to invoke when completing the search for a matching committed datatype from the committed dtype list
--
-- > typedef H5O_mcdt_search_ret_t (*H5O_mcdt_search_cb_t)(void *op_data);
type H5O_mcdt_search_cb_t a = FunPtr (InOut a -> IO H5O_mcdt_search_ret_t)
-- * Functions
-- |Opens an object within an HDF5 file.
--
-- This function opens an object in the same way that 'h5g_open2',
-- 'h5t_open2', and 'h5d_open2' do. However, 'h5o_open' doesn't require
-- the type of object to be known beforehand. This can be
-- useful in user-defined links, for instance, when only a
-- path is known.
--
-- The opened object should be closed again with 'h5o_close'
-- or 'h5g_close', 'h5t_close', or 'h5d_close'.
--
-- On success, returns an open object identifier
-- On failure, returns a negative value.
--
-- > hid_t H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id);
#ccall H5Oopen, <hid_t> -> CString -> <hid_t> -> IO <hid_t>
-- |Warning! This function is EXTREMELY DANGEROUS!
--
-- Improper use can lead to FILE CORRUPTION, INACCESSIBLE DATA,
-- and other VERY BAD THINGS!
--
-- This function opens an object using its address within the
-- HDF5 file, similar to an HDF5 hard link. The open object
-- is identical to an object opened with 'h5o_open' and should
-- be closed with 'h5o_close' or a type-specific closing
-- function (such as 'h5g_close').
--
-- This function is very dangerous if called on an invalid
-- address. For this reason, 'h5o_incr_refcount' should be
-- used to prevent HDF5 from deleting any object that is
-- referenced by address (e.g. by a user-defined link).
-- 'h5o_decr_refcount' should be used when the object is
-- no longer being referenced by address (e.g. when the UD link
-- is deleted).
--
-- The address of the HDF5 file on disk has no effect on
-- 'h5o_open_by_addr', nor does the use of any unusual file
-- drivers. The \"address\" is really the offset within the
-- HDF5 file, and HDF5's file drivers will transparently
-- map this to an address on disk for the filesystem.
--
-- On success, returns an open object identifier
-- On failure, returns a negative value.
--
-- > hid_t H5Oopen_by_addr(hid_t loc_id, haddr_t addr);
#ccall H5Oopen_by_addr, <hid_t> -> <haddr_t> -> IO <hid_t>
-- |Opens an object within an HDF5 file, according to the offset
-- within an index.
--
-- This function opens an object in the same way that 'h5g_open',
-- 'h5t_open', and 'h5d_open' do. However, 'h5o_open' doesn't require
-- the type of object to be known beforehand. This can be
-- useful in user-defined links, for instance, when only a
-- path is known.
--
-- The opened object should be closed again with 'h5o_close'
-- or 'h5g_close', 'h5t_close', or 'h5d_close'.
--
-- On success, returns an open object identifier
-- On failure, returns a negative value.
--
-- > hid_t H5Oopen_by_idx(hid_t loc_id, const char *group_name,
-- > H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
#ccall H5Oopen_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> <hid_t> -> IO <hid_t>
#if H5_VERSION_GE(1,8,5)
-- |Determine if a linked-to object exists
--
-- > htri_t H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id);
#ccall H5Oexists_by_name, <hid_t> -> CString -> <hid_t> -> IO <htri_t>
#endif
-- |Retrieve information about an object.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oget_info(hid_t loc_id, H5O_info_t *oinfo);
#if (H5Fget_info_vers == 1)
#ccall H5Oget_info, <hid_t> -> Out <H5O_info_t> -> IO <herr_t>
#else
#ccall H5Oget_info, <hid_t> -> Out <H5O_info2_t> -> IO <herr_t>
#endif
-- |Retrieve information about an object.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo,
-- > hid_t lapl_id);
#ccall H5Oget_info_by_name, <hid_t> -> CString -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
-- |Retrieve information about an object, according to the order
-- of an index.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oget_info_by_idx(hid_t loc_id, const char *group_name,
-- > H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo,
-- > hid_t lapl_id);
#ccall H5Oget_info_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
-- |Creates a hard link from 'new_name' to the object specified
-- by 'obj_id' using properties defined in the Link Creation
-- Property List 'lcpl'.
--
-- This function should be used to link objects that have just
-- been created.
--
-- 'new_name' is interpreted relative to 'new_loc_id', which
-- is either a file ID or a group ID.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name,
-- > hid_t lcpl_id, hid_t lapl_id);
#ccall H5Olink, <hid_t> -> <hid_t> -> CString -> <hid_t> -> <hid_t> -> IO <herr_t>
-- |Warning! This function is EXTREMELY DANGEROUS!
-- Improper use can lead to FILE CORRUPTION, INACCESSIBLE DATA,
-- and other VERY BAD THINGS!
--
-- This function increments the \"hard link\" reference count
-- for an object. It should be used when a user-defined link
-- that references an object by address is created. When the
-- link is deleted, 'h5o_decr_refcount' should be used.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oincr_refcount(hid_t object_id);
#ccall H5Oincr_refcount, <hid_t> -> IO <herr_t>
-- |Warning! This function is EXTREMELY DANGEROUS!
-- Improper use can lead to FILE CORRUPTION, INACCESSIBLE DATA,
-- and other VERY BAD THINGS!
--
-- This function decrements the \"hard link\" reference count
-- for an object. It should be used when user-defined links
-- that reference an object by address are deleted, and only
-- after 'h5o_incr_refcount' has already been used.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Odecr_refcount(hid_t object_id);
#ccall H5Odecr_refcount, <hid_t> -> IO <herr_t>
-- |Copy an object (group or dataset) to destination location
-- within a file or cross files. 'plist_id' is a property list
-- which is used to pass user options and properties to the
-- copy. The name, 'dst_name', must not already be taken by some
-- other object in the destination group.
--
-- 'h5o_copy' will fail if the name of the destination object
-- exists in the destination group. For example,
-- @H5Ocopy(fid_src, \"/dset\", fid_dst, \"/dset\", ...)@
-- will fail if \"/dset\" exists in the destination file
--
-- OPTIONS THAT HAVE BEEN IMPLEMENTED:
--
-- ['h5o_COPY_SHALLOW_HIERARCHY_FLAG']
-- If this flag is specified, only immediate members of
-- the group are copied. Otherwise (default), it will
-- recursively copy all objects below the group
--
-- ['h5o_COPY_EXPAND_SOFT_LINK_FLAG']
-- If this flag is specified, it will copy the objects
-- pointed by the soft links. Otherwise (default), it
-- will copy the soft link as they are
--
-- ['h5o_COPY_WITHOUT_ATTR_FLAG']
-- If this flag is specified, it will copy object without
-- copying attributes. Otherwise (default), it will
-- copy object along with all its attributes
--
-- ['h5o_COPY_EXPAND_REFERENCE_FLAG']
-- 1. Copy object between two different files:
-- When this flag is specified, it will copy objects that
-- are pointed by the references and update the values of
-- references in the destination file. Otherwise (default)
-- the values of references in the destination will set to
-- zero
-- The current implementation does not handle references
-- inside of other datatype structure. For example, if
-- a member of compound datatype is reference, H5Ocopy()
-- will copy that field as it is. It will not set the
-- value to zero as default is used nor copy the object
-- pointed by that field the flag is set
-- 2. Copy object within the same file:
-- This flag does not have any effect to the 'h5o_copy'.
-- Datasets or attributes of references are copied as they
-- are, i.e. values of references of the destination object
-- are the same as the values of the source object
--
-- OPTIONS THAT MAY APPLY TO COPY IN THE FUTURE:
--
-- ['h5o_COPY_EXPAND_EXT_LINK_FLAG']
-- If this flag is specified, it will expand the external links
-- into new objects, Otherwise (default), it will keep external
-- links as they are (default)
--
-- PROPERTIES THAT MAY APPLY TO COPY IN FUTURE:
--
-- * Change data layout such as chunk size
--
-- * Add filter such as data compression.
--
-- * Add an attribute to the copied object(s) that say the date/time
-- for the copy or other information about the source file.
--
-- The intermediate group creation property should be passed in
-- using the lcpl instead of the ocpypl.
--
-- Parameters:
--
-- [@ src_loc_id :: HId_t @] Source file or group identifier.
--
-- [@ src_name :: CString @] Name of the source object to be copied
--
-- [@ dst_loc_id :: HId_t @] Destination file or group identifier
--
-- [@ dst_name :: CString @] Name of the destination object
--
-- [@ ocpypl_id :: HId_t @] Properties which apply to the copy
--
-- [@ lcpl_id :: HId_t @] Properties which apply to the new hard link
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
-- > const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id);
#ccall H5Ocopy, <hid_t> -> CString -> <hid_t> -> CString -> <hid_t> -> <hid_t> -> IO <herr_t>
-- |Gives the specified object a comment. The 'comment' string
-- should be a null terminated string. An object can have only
-- one comment at a time. Passing NULL for the 'comment' argument
-- will remove the comment property from the object.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oset_comment(hid_t obj_id, const char *comment);
#ccall H5Oset_comment, <hid_t> -> CString -> IO <herr_t>
-- |Gives the specified object a comment. The 'comment' string
-- should be a null terminated string. An object can have only
-- one comment at a time. Passing NULL for the 'comment' argument
-- will remove the comment property from the object.
--
-- Note: Deprecated in favor of using attributes on objects.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oset_comment_by_name(hid_t loc_id, const char *name,
-- > const char *comment, hid_t lapl_id);
#ccall H5Oset_comment_by_name, <hid_t> -> CString -> CString -> <hid_t> -> IO <herr_t>
-- |Retrieve comment for an object.
--
-- On success, returns the number of bytes in the comment including the
-- null terminator, or zero if the object has no comment. On failure
-- returns a negative value.
--
-- > ssize_t H5Oget_comment(hid_t obj_id, char *comment, size_t bufsize);
#ccall H5Oget_comment, <hid_t> -> OutArray CChar -> <size_t> -> IO <ssize_t>
-- |Retrieve comment for an object.
--
-- On success, returns the number of bytes in the comment including the
-- null terminator, or zero if the object has no comment. On failure
-- returns a negative value.
--
-- > ssize_t H5Oget_comment_by_name(hid_t loc_id, const char *name,
-- > char *comment, size_t bufsize, hid_t lapl_id);
#ccall H5Oget_comment_by_name, <hid_t> -> CString -> OutArray CChar -> <size_t> -> <hid_t> -> IO <ssize_t>
-- |Recursively visit an object and all the objects reachable
-- from it. If the starting object is a group, all the objects
-- linked to from that group will be visited. Links within
-- each group are visited according to the order within the
-- specified index (unless the specified index does not exist for
-- a particular group, then the "name" index is used).
--
-- NOTE: Soft links and user-defined links are ignored during
-- this operation.
--
-- NOTE: Each _object_ reachable from the initial group will only
-- be visited once. If multiple hard links point to the same
-- object, the first link to the object's path (according to the
-- iteration index and iteration order given) will be used to in
-- the callback about the object.
--
-- On success, returns the return value of the first operator that
-- returns non-zero, or zero if all members were processed with no
-- operator returning non-zero.
--
-- Returns negative if something goes wrong within the library, or
-- the negative value returned by one of the operators.
--
-- > herr_t H5Ovisit(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
-- > H5O_iterate_t op, void *op_data);
#if (H5Fget_info_vers == 1)
#ccall H5Ovisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> IO <herr_t>
#else
#ccall H5Ovisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate2_t a -> InOut a -> IO <herr_t>
#endif
-- |Recursively visit an object and all the objects reachable
-- from it. If the starting object is a group, all the objects
-- linked to from that group will be visited. Links within
-- each group are visited according to the order within the
-- specified index (unless the specified index does not exist for
-- a particular group, then the "name" index is used).
--
-- NOTE: Soft links and user-defined links are ignored during
-- this operation.
--
-- NOTE: Each _object_ reachable from the initial group will only
-- be visited once. If multiple hard links point to the same
-- object, the first link to the object's path (according to the
-- iteration index and iteration order given) will be used to in
-- the callback about the object.
--
-- On success, returns the return value of the first operator that
-- returns non-zero, or zero if all members were processed with no
-- operator returning non-zero.
--
-- Returns negative if something goes wrong within the library, or
-- the negative value returned by one of the operators.
--
-- > herr_t H5Ovisit_by_name(hid_t loc_id, const char *obj_name,
-- > H5_index_t idx_type, H5_iter_order_t order, H5O_iterate_t op,
-- > void *op_data, hid_t lapl_id);
#ccall H5Ovisit_by_name, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
-- |Close an open file object.
--
-- This is the companion to 'h5o_open'. It is used to close any
-- open object in an HDF5 file (but not IDs are that not file
-- objects, such as property lists and dataspaces). It has
-- the same effect as calling 'h5g_close', 'h5d_close', or 'h5t_close'.
--
-- Returns non-negative on success, negative on failure.
--
-- > herr_t H5Oclose(hid_t object_id);
#ccall H5Oclose, <hid_t> -> IO <herr_t>
#if H5_VERSION_GE(1,10,0)
-- > herr_t H5Oflush(hid_t obj_id);
#ccall H5Oflush, <hid_t> -> IO <herr_t>
-- > herr_t H5Orefresh(hid_t oid);
#ccall H5Orefresh, <hid_t> -> IO <herr_t>
-- > herr_t H5Odisable_mdc_flushes(hid_t object_id);
#ccall H5Odisable_mdc_flushes, <hid_t> -> IO <herr_t>
-- > herr_t H5Oenable_mdc_flushes(hid_t object_id);
#ccall H5Oenable_mdc_flushes, <hid_t> -> IO <herr_t>
-- > herr_t H5Oare_mdc_flushes_disabled(hid_t object_id, hbool_t *are_disabled);
#ccall H5Oare_mdc_flushes_disabled, <hid_t> -> Out hbool_t -> IO <herr_t>
#endif
#ifndef H5_NO_DEPRECATED_SYMBOLS
-- * Deprecated types
-- |A struct that's part of the 'h5g_stat_t' routine (deprecated)
#starttype H5O_stat_t
-- |Total size of object header in file
#field size, <hsize_t>
-- |Free space within object header
#field free, <hsize_t>
-- |Number of object header messages
#field nmesgs, CUInt
-- |Number of object header chunks
#field nchunks, CUInt
#stoptype
#endif /* H5_NO_DEPRECATED_SYMBOLS */