croaring-ffi-1.0: src/Data/Bitmap/Roaring/FFI/Bitmap/Statistics.hsc
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE NoFieldSelectors #-}
-- | C struct @roaring_statistics_t@ from @roaring/roaring_types.h@, filled in by 'Data.Bitmap.Roaring.FFI.Bitmap.statistics'.
module Data.Bitmap.Roaring.FFI.Bitmap.Statistics
( Statistics (..)
) where
#include <roaring/roaring.h>
import Data.Word (Word32, Word64)
import Foreign.Marshal.Utils (fillBytes)
import Foreign.Storable (Storable (..))
-- | @roaring_statistics_t@ without the deprecated, always-zero @sum_value@ field, which 'poke' zero-fills.
data Statistics = Statistics
{ containers :: Word32
, arrayContainers :: Word32
, runContainers :: Word32
, bitsetContainers :: Word32
, valuesArrayContainers :: Word32
, valuesRunContainers :: Word32
, valuesBitsetContainers :: Word32
, bytesArrayContainers :: Word32
, bytesRunContainers :: Word32
, bytesBitsetContainers :: Word32
, maxValue :: Word32
-- ^ Undefined when the cardinality is zero.
, minValue :: Word32
-- ^ Undefined when the cardinality is zero.
, cardinality :: Word64
}
deriving (Eq, Ord, Show)
instance Storable Statistics where
sizeOf _ = #{size roaring_statistics_t}
{-# INLINE sizeOf #-}
alignment _ = #{alignment roaring_statistics_t}
{-# INLINE alignment #-}
peek ptr =
Statistics
<$> #{peek roaring_statistics_t, n_containers} ptr
<*> #{peek roaring_statistics_t, n_array_containers} ptr
<*> #{peek roaring_statistics_t, n_run_containers} ptr
<*> #{peek roaring_statistics_t, n_bitset_containers} ptr
<*> #{peek roaring_statistics_t, n_values_array_containers} ptr
<*> #{peek roaring_statistics_t, n_values_run_containers} ptr
<*> #{peek roaring_statistics_t, n_values_bitset_containers} ptr
<*> #{peek roaring_statistics_t, n_bytes_array_containers} ptr
<*> #{peek roaring_statistics_t, n_bytes_run_containers} ptr
<*> #{peek roaring_statistics_t, n_bytes_bitset_containers} ptr
<*> #{peek roaring_statistics_t, max_value} ptr
<*> #{peek roaring_statistics_t, min_value} ptr
<*> #{peek roaring_statistics_t, cardinality} ptr
{-# INLINE peek #-}
poke ptr statistics = do
fillBytes ptr 0 #{size roaring_statistics_t}
#{poke roaring_statistics_t, n_containers} ptr statistics.containers
#{poke roaring_statistics_t, n_array_containers} ptr statistics.arrayContainers
#{poke roaring_statistics_t, n_run_containers} ptr statistics.runContainers
#{poke roaring_statistics_t, n_bitset_containers} ptr statistics.bitsetContainers
#{poke roaring_statistics_t, n_values_array_containers} ptr statistics.valuesArrayContainers
#{poke roaring_statistics_t, n_values_run_containers} ptr statistics.valuesRunContainers
#{poke roaring_statistics_t, n_values_bitset_containers} ptr statistics.valuesBitsetContainers
#{poke roaring_statistics_t, n_bytes_array_containers} ptr statistics.bytesArrayContainers
#{poke roaring_statistics_t, n_bytes_run_containers} ptr statistics.bytesRunContainers
#{poke roaring_statistics_t, n_bytes_bitset_containers} ptr statistics.bytesBitsetContainers
#{poke roaring_statistics_t, max_value} ptr statistics.maxValue
#{poke roaring_statistics_t, min_value} ptr statistics.minValue
#{poke roaring_statistics_t, cardinality} ptr statistics.cardinality
{-# INLINE poke #-}