{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Bindings.HDF5.Group
( Group
, createGroup
, createAnonymousGroup
, openGroup
, closeGroup
, GroupStorageType(..)
, GroupInfo(..)
, getGroupInfo
, getGroupInfoByName
) where
import Bindings.HDF5.Core
import Bindings.HDF5.Error
import Bindings.HDF5.Object
import Bindings.HDF5.PropertyList.GAPL
import Bindings.HDF5.PropertyList.GCPL
import Bindings.HDF5.PropertyList.LCPL
import Bindings.HDF5.Raw.H5G
import Bindings.HDF5.Raw.H5I
import Bindings.HDF5.Raw.H5P
import Bindings.HDF5.Raw.Util
import qualified Data.ByteString as BS
import Data.Int
import Foreign.Ptr.Conventions
newtype Group = Group HId_t
deriving (Group -> Group -> Bool
(Group -> Group -> Bool) -> (Group -> Group -> Bool) -> Eq Group
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Group -> Group -> Bool
== :: Group -> Group -> Bool
$c/= :: Group -> Group -> Bool
/= :: Group -> Group -> Bool
Eq, Group -> HId_t
(Group -> HId_t) -> HId Group
forall t. (t -> HId_t) -> HId t
$chid :: Group -> HId_t
hid :: Group -> HId_t
HId, HId_t -> Group
(HId_t -> Group) -> FromHId Group
forall t. (HId_t -> t) -> FromHId t
$cuncheckedFromHId :: HId_t -> Group
uncheckedFromHId :: HId_t -> Group
FromHId, Group -> Bool
(Group -> Bool) -> HDFResultType Group
forall t. (t -> Bool) -> HDFResultType t
$cisError :: Group -> Bool
isError :: Group -> Bool
HDFResultType)
instance Location Group
instance Object Group where
staticObjectType :: Tagged Group (Maybe ObjectType)
staticObjectType = Maybe ObjectType -> Tagged Group (Maybe ObjectType)
forall {k} (s :: k) b. b -> Tagged s b
Tagged (ObjectType -> Maybe ObjectType
forall a. a -> Maybe a
Just ObjectType
GroupObj)
createGroup :: Location t =>
t
-> BS.ByteString
-> Maybe LCPL
-> Maybe GCPL
-> Maybe GAPL
-> IO Group
createGroup :: forall t.
Location t =>
t
-> ByteString -> Maybe LCPL -> Maybe GCPL -> Maybe GAPL -> IO Group
createGroup t
loc ByteString
name Maybe LCPL
lcpl Maybe GCPL
gcpl Maybe GAPL
gapl =
(HId_t -> Group) -> IO HId_t -> IO Group
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap HId_t -> Group
Group (IO HId_t -> IO Group) -> IO HId_t -> IO Group
forall a b. (a -> b) -> a -> b
$
IO HId_t -> IO HId_t
forall t. HDFResultType t => IO t -> IO t
withErrorCheck (IO HId_t -> IO HId_t) -> IO HId_t -> IO HId_t
forall a b. (a -> b) -> a -> b
$
ByteString -> (CString -> IO HId_t) -> IO HId_t
forall a. ByteString -> (CString -> IO a) -> IO a
BS.useAsCString ByteString
name ((CString -> IO HId_t) -> IO HId_t)
-> (CString -> IO HId_t) -> IO HId_t
forall a b. (a -> b) -> a -> b
$ \CString
cname ->
HId_t -> CString -> HId_t -> HId_t -> HId_t -> IO HId_t
h5g_create2 (t -> HId_t
forall t. HId t => t -> HId_t
hid t
loc) CString
cname
(HId_t -> (LCPL -> HId_t) -> Maybe LCPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT LCPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe LCPL
lcpl)
(HId_t -> (GCPL -> HId_t) -> Maybe GCPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT GCPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe GCPL
gcpl)
(HId_t -> (GAPL -> HId_t) -> Maybe GAPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT GAPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe GAPL
gapl)
createAnonymousGroup :: Location t =>
t
-> Maybe GCPL
-> Maybe GAPL
-> IO Group
createAnonymousGroup :: forall t. Location t => t -> Maybe GCPL -> Maybe GAPL -> IO Group
createAnonymousGroup t
loc Maybe GCPL
gcpl Maybe GAPL
gapl =
(HId_t -> Group) -> IO HId_t -> IO Group
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap HId_t -> Group
Group (IO HId_t -> IO Group) -> IO HId_t -> IO Group
forall a b. (a -> b) -> a -> b
$
IO HId_t -> IO HId_t
forall t. HDFResultType t => IO t -> IO t
withErrorCheck (IO HId_t -> IO HId_t) -> IO HId_t -> IO HId_t
forall a b. (a -> b) -> a -> b
$
HId_t -> HId_t -> HId_t -> IO HId_t
h5g_create_anon (t -> HId_t
forall t. HId t => t -> HId_t
hid t
loc) (HId_t -> (GCPL -> HId_t) -> Maybe GCPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT GCPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe GCPL
gcpl) (HId_t -> (GAPL -> HId_t) -> Maybe GAPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT GAPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe GAPL
gapl)
openGroup :: Location t =>
t
-> BS.ByteString
-> Maybe GAPL
-> IO Group
openGroup :: forall t. Location t => t -> ByteString -> Maybe GAPL -> IO Group
openGroup t
loc ByteString
name Maybe GAPL
gapl =
(HId_t -> Group) -> IO HId_t -> IO Group
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap HId_t -> Group
Group (IO HId_t -> IO Group) -> IO HId_t -> IO Group
forall a b. (a -> b) -> a -> b
$
IO HId_t -> IO HId_t
forall t. HDFResultType t => IO t -> IO t
withErrorCheck (IO HId_t -> IO HId_t) -> IO HId_t -> IO HId_t
forall a b. (a -> b) -> a -> b
$
ByteString -> (CString -> IO HId_t) -> IO HId_t
forall a. ByteString -> (CString -> IO a) -> IO a
BS.useAsCString ByteString
name ((CString -> IO HId_t) -> IO HId_t)
-> (CString -> IO HId_t) -> IO HId_t
forall a b. (a -> b) -> a -> b
$ \CString
cname ->
HId_t -> CString -> HId_t -> IO HId_t
h5g_open2 (t -> HId_t
forall t. HId t => t -> HId_t
hid t
loc) CString
cname (HId_t -> (GAPL -> HId_t) -> Maybe GAPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT GAPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe GAPL
gapl)
closeGroup :: Group -> IO ()
closeGroup :: Group -> IO ()
closeGroup (Group HId_t
grp) =
IO HErr_t -> IO ()
forall t. HDFResultType t => IO t -> IO ()
withErrorCheck_ (IO HErr_t -> IO ()) -> IO HErr_t -> IO ()
forall a b. (a -> b) -> a -> b
$
HId_t -> IO HErr_t
h5g_close HId_t
grp
data GroupStorageType
= CompactStorage
| DenseStorage
| SymbolTableStorage
| UnknownStorage
deriving (GroupStorageType -> GroupStorageType -> Bool
(GroupStorageType -> GroupStorageType -> Bool)
-> (GroupStorageType -> GroupStorageType -> Bool)
-> Eq GroupStorageType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GroupStorageType -> GroupStorageType -> Bool
== :: GroupStorageType -> GroupStorageType -> Bool
$c/= :: GroupStorageType -> GroupStorageType -> Bool
/= :: GroupStorageType -> GroupStorageType -> Bool
Eq, Eq GroupStorageType
Eq GroupStorageType
-> (GroupStorageType -> GroupStorageType -> Ordering)
-> (GroupStorageType -> GroupStorageType -> Bool)
-> (GroupStorageType -> GroupStorageType -> Bool)
-> (GroupStorageType -> GroupStorageType -> Bool)
-> (GroupStorageType -> GroupStorageType -> Bool)
-> (GroupStorageType -> GroupStorageType -> GroupStorageType)
-> (GroupStorageType -> GroupStorageType -> GroupStorageType)
-> Ord GroupStorageType
GroupStorageType -> GroupStorageType -> Bool
GroupStorageType -> GroupStorageType -> Ordering
GroupStorageType -> GroupStorageType -> GroupStorageType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: GroupStorageType -> GroupStorageType -> Ordering
compare :: GroupStorageType -> GroupStorageType -> Ordering
$c< :: GroupStorageType -> GroupStorageType -> Bool
< :: GroupStorageType -> GroupStorageType -> Bool
$c<= :: GroupStorageType -> GroupStorageType -> Bool
<= :: GroupStorageType -> GroupStorageType -> Bool
$c> :: GroupStorageType -> GroupStorageType -> Bool
> :: GroupStorageType -> GroupStorageType -> Bool
$c>= :: GroupStorageType -> GroupStorageType -> Bool
>= :: GroupStorageType -> GroupStorageType -> Bool
$cmax :: GroupStorageType -> GroupStorageType -> GroupStorageType
max :: GroupStorageType -> GroupStorageType -> GroupStorageType
$cmin :: GroupStorageType -> GroupStorageType -> GroupStorageType
min :: GroupStorageType -> GroupStorageType -> GroupStorageType
Ord, ReadPrec [GroupStorageType]
ReadPrec GroupStorageType
Int -> ReadS GroupStorageType
ReadS [GroupStorageType]
(Int -> ReadS GroupStorageType)
-> ReadS [GroupStorageType]
-> ReadPrec GroupStorageType
-> ReadPrec [GroupStorageType]
-> Read GroupStorageType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS GroupStorageType
readsPrec :: Int -> ReadS GroupStorageType
$creadList :: ReadS [GroupStorageType]
readList :: ReadS [GroupStorageType]
$creadPrec :: ReadPrec GroupStorageType
readPrec :: ReadPrec GroupStorageType
$creadListPrec :: ReadPrec [GroupStorageType]
readListPrec :: ReadPrec [GroupStorageType]
Read, Int -> GroupStorageType -> ShowS
[GroupStorageType] -> ShowS
GroupStorageType -> String
(Int -> GroupStorageType -> ShowS)
-> (GroupStorageType -> String)
-> ([GroupStorageType] -> ShowS)
-> Show GroupStorageType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GroupStorageType -> ShowS
showsPrec :: Int -> GroupStorageType -> ShowS
$cshow :: GroupStorageType -> String
show :: GroupStorageType -> String
$cshowList :: [GroupStorageType] -> ShowS
showList :: [GroupStorageType] -> ShowS
Show, Int -> GroupStorageType
GroupStorageType -> Int
GroupStorageType -> [GroupStorageType]
GroupStorageType -> GroupStorageType
GroupStorageType -> GroupStorageType -> [GroupStorageType]
GroupStorageType
-> GroupStorageType -> GroupStorageType -> [GroupStorageType]
(GroupStorageType -> GroupStorageType)
-> (GroupStorageType -> GroupStorageType)
-> (Int -> GroupStorageType)
-> (GroupStorageType -> Int)
-> (GroupStorageType -> [GroupStorageType])
-> (GroupStorageType -> GroupStorageType -> [GroupStorageType])
-> (GroupStorageType -> GroupStorageType -> [GroupStorageType])
-> (GroupStorageType
-> GroupStorageType -> GroupStorageType -> [GroupStorageType])
-> Enum GroupStorageType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: GroupStorageType -> GroupStorageType
succ :: GroupStorageType -> GroupStorageType
$cpred :: GroupStorageType -> GroupStorageType
pred :: GroupStorageType -> GroupStorageType
$ctoEnum :: Int -> GroupStorageType
toEnum :: Int -> GroupStorageType
$cfromEnum :: GroupStorageType -> Int
fromEnum :: GroupStorageType -> Int
$cenumFrom :: GroupStorageType -> [GroupStorageType]
enumFrom :: GroupStorageType -> [GroupStorageType]
$cenumFromThen :: GroupStorageType -> GroupStorageType -> [GroupStorageType]
enumFromThen :: GroupStorageType -> GroupStorageType -> [GroupStorageType]
$cenumFromTo :: GroupStorageType -> GroupStorageType -> [GroupStorageType]
enumFromTo :: GroupStorageType -> GroupStorageType -> [GroupStorageType]
$cenumFromThenTo :: GroupStorageType
-> GroupStorageType -> GroupStorageType -> [GroupStorageType]
enumFromThenTo :: GroupStorageType
-> GroupStorageType -> GroupStorageType -> [GroupStorageType]
Enum, GroupStorageType
GroupStorageType -> GroupStorageType -> Bounded GroupStorageType
forall a. a -> a -> Bounded a
$cminBound :: GroupStorageType
minBound :: GroupStorageType
$cmaxBound :: GroupStorageType
maxBound :: GroupStorageType
Bounded)
groupStorageTypeFromCode :: H5G_storage_type_t -> GroupStorageType
groupStorageTypeFromCode :: H5G_storage_type_t -> GroupStorageType
groupStorageTypeFromCode H5G_storage_type_t
c
| H5G_storage_type_t
c H5G_storage_type_t -> H5G_storage_type_t -> Bool
forall a. Eq a => a -> a -> Bool
== H5G_storage_type_t
h5g_STORAGE_TYPE_COMPACT = GroupStorageType
CompactStorage
| H5G_storage_type_t
c H5G_storage_type_t -> H5G_storage_type_t -> Bool
forall a. Eq a => a -> a -> Bool
== H5G_storage_type_t
h5g_STORAGE_TYPE_DENSE = GroupStorageType
DenseStorage
| H5G_storage_type_t
c H5G_storage_type_t -> H5G_storage_type_t -> Bool
forall a. Eq a => a -> a -> Bool
== H5G_storage_type_t
h5g_STORAGE_TYPE_SYMBOL_TABLE = GroupStorageType
SymbolTableStorage
| Bool
otherwise = GroupStorageType
UnknownStorage
data GroupInfo = GroupInfo
{ GroupInfo -> GroupStorageType
groupStorageType :: !GroupStorageType
, GroupInfo -> HSize
groupNLinks :: !HSize
, GroupInfo -> Int64
groupMaxCOrder :: !Int64
, GroupInfo -> Bool
groupMounted :: !Bool
} deriving (GroupInfo -> GroupInfo -> Bool
(GroupInfo -> GroupInfo -> Bool)
-> (GroupInfo -> GroupInfo -> Bool) -> Eq GroupInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GroupInfo -> GroupInfo -> Bool
== :: GroupInfo -> GroupInfo -> Bool
$c/= :: GroupInfo -> GroupInfo -> Bool
/= :: GroupInfo -> GroupInfo -> Bool
Eq, Eq GroupInfo
Eq GroupInfo
-> (GroupInfo -> GroupInfo -> Ordering)
-> (GroupInfo -> GroupInfo -> Bool)
-> (GroupInfo -> GroupInfo -> Bool)
-> (GroupInfo -> GroupInfo -> Bool)
-> (GroupInfo -> GroupInfo -> Bool)
-> (GroupInfo -> GroupInfo -> GroupInfo)
-> (GroupInfo -> GroupInfo -> GroupInfo)
-> Ord GroupInfo
GroupInfo -> GroupInfo -> Bool
GroupInfo -> GroupInfo -> Ordering
GroupInfo -> GroupInfo -> GroupInfo
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: GroupInfo -> GroupInfo -> Ordering
compare :: GroupInfo -> GroupInfo -> Ordering
$c< :: GroupInfo -> GroupInfo -> Bool
< :: GroupInfo -> GroupInfo -> Bool
$c<= :: GroupInfo -> GroupInfo -> Bool
<= :: GroupInfo -> GroupInfo -> Bool
$c> :: GroupInfo -> GroupInfo -> Bool
> :: GroupInfo -> GroupInfo -> Bool
$c>= :: GroupInfo -> GroupInfo -> Bool
>= :: GroupInfo -> GroupInfo -> Bool
$cmax :: GroupInfo -> GroupInfo -> GroupInfo
max :: GroupInfo -> GroupInfo -> GroupInfo
$cmin :: GroupInfo -> GroupInfo -> GroupInfo
min :: GroupInfo -> GroupInfo -> GroupInfo
Ord, ReadPrec [GroupInfo]
ReadPrec GroupInfo
Int -> ReadS GroupInfo
ReadS [GroupInfo]
(Int -> ReadS GroupInfo)
-> ReadS [GroupInfo]
-> ReadPrec GroupInfo
-> ReadPrec [GroupInfo]
-> Read GroupInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS GroupInfo
readsPrec :: Int -> ReadS GroupInfo
$creadList :: ReadS [GroupInfo]
readList :: ReadS [GroupInfo]
$creadPrec :: ReadPrec GroupInfo
readPrec :: ReadPrec GroupInfo
$creadListPrec :: ReadPrec [GroupInfo]
readListPrec :: ReadPrec [GroupInfo]
Read, Int -> GroupInfo -> ShowS
[GroupInfo] -> ShowS
GroupInfo -> String
(Int -> GroupInfo -> ShowS)
-> (GroupInfo -> String)
-> ([GroupInfo] -> ShowS)
-> Show GroupInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GroupInfo -> ShowS
showsPrec :: Int -> GroupInfo -> ShowS
$cshow :: GroupInfo -> String
show :: GroupInfo -> String
$cshowList :: [GroupInfo] -> ShowS
showList :: [GroupInfo] -> ShowS
Show)
readGroupInfo :: H5G_info_t -> GroupInfo
readGroupInfo :: H5G_info_t -> GroupInfo
readGroupInfo (H5G_info_t H5G_storage_type_t
a HSize_t
b Int64
c HBool_t
d) = GroupStorageType -> HSize -> Int64 -> Bool -> GroupInfo
GroupInfo (H5G_storage_type_t -> GroupStorageType
groupStorageTypeFromCode H5G_storage_type_t
a) (HSize_t -> HSize
HSize HSize_t
b) Int64
c (HBool_t -> Bool
hboolToBool HBool_t
d)
getGroupInfo :: Group -> IO GroupInfo
getGroupInfo :: Group -> IO GroupInfo
getGroupInfo (Group HId_t
group_id) =
(H5G_info_t -> GroupInfo) -> IO H5G_info_t -> IO GroupInfo
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap H5G_info_t -> GroupInfo
readGroupInfo (IO H5G_info_t -> IO GroupInfo) -> IO H5G_info_t -> IO GroupInfo
forall a b. (a -> b) -> a -> b
$
(Out H5G_info_t -> IO ()) -> IO H5G_info_t
forall a (m :: * -> *) b.
(Storable a, MonadBaseControl IO m, MonadIO m) =>
(Out a -> m b) -> m a
withOut_ ((Out H5G_info_t -> IO ()) -> IO H5G_info_t)
-> (Out H5G_info_t -> IO ()) -> IO H5G_info_t
forall a b. (a -> b) -> a -> b
$ \Out H5G_info_t
info ->
IO HErr_t -> IO ()
forall t. HDFResultType t => IO t -> IO ()
withErrorCheck_ (IO HErr_t -> IO ()) -> IO HErr_t -> IO ()
forall a b. (a -> b) -> a -> b
$
HId_t -> Out H5G_info_t -> IO HErr_t
h5g_get_info HId_t
group_id Out H5G_info_t
info
getGroupInfoByName :: Location loc => loc -> BS.ByteString -> Maybe LAPL -> IO GroupInfo
getGroupInfoByName :: forall loc.
Location loc =>
loc -> ByteString -> Maybe LAPL -> IO GroupInfo
getGroupInfoByName loc
loc ByteString
name Maybe LAPL
lapl =
(H5G_info_t -> GroupInfo) -> IO H5G_info_t -> IO GroupInfo
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap H5G_info_t -> GroupInfo
readGroupInfo (IO H5G_info_t -> IO GroupInfo) -> IO H5G_info_t -> IO GroupInfo
forall a b. (a -> b) -> a -> b
$
(Out H5G_info_t -> IO ()) -> IO H5G_info_t
forall a (m :: * -> *) b.
(Storable a, MonadBaseControl IO m, MonadIO m) =>
(Out a -> m b) -> m a
withOut_ ((Out H5G_info_t -> IO ()) -> IO H5G_info_t)
-> (Out H5G_info_t -> IO ()) -> IO H5G_info_t
forall a b. (a -> b) -> a -> b
$ \Out H5G_info_t
info ->
ByteString -> (CString -> IO ()) -> IO ()
forall a. ByteString -> (CString -> IO a) -> IO a
BS.useAsCString ByteString
name ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \CString
cname ->
IO HErr_t -> IO ()
forall t. HDFResultType t => IO t -> IO ()
withErrorCheck_ (IO HErr_t -> IO ()) -> IO HErr_t -> IO ()
forall a b. (a -> b) -> a -> b
$
HId_t -> CString -> Out H5G_info_t -> HId_t -> IO HErr_t
h5g_get_info_by_name (loc -> HId_t
forall t. HId t => t -> HId_t
hid loc
loc) CString
cname Out H5G_info_t
info (HId_t -> (LAPL -> HId_t) -> Maybe LAPL -> HId_t
forall b a. b -> (a -> b) -> Maybe a -> b
maybe HId_t
h5p_DEFAULT LAPL -> HId_t
forall t. HId t => t -> HId_t
hid Maybe LAPL
lapl)