packages feed

croaring-ffi-1.0: src/Data/Bitmap/Roaring/FFI/Bitmap64/Statistics.hsc

{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE NoFieldSelectors #-}

-- | C struct @roaring64_statistics_t@ from @roaring/roaring_types.h@, filled in by 'Data.Bitmap.Roaring.FFI.Bitmap64.statistics'.
module Data.Bitmap.Roaring.FFI.Bitmap64.Statistics
  ( Statistics (..)
  ) where

#include <roaring/roaring.h>

import Data.Word (Word64)
import Foreign.Storable (Storable (..))

-- | @roaring64_statistics_t@
data Statistics = Statistics
  { containers :: Word64
  , arrayContainers :: Word64
  , runContainers :: Word64
  , bitsetContainers :: Word64
  , valuesArrayContainers :: Word64
  , valuesRunContainers :: Word64
  , valuesBitsetContainers :: Word64
  , bytesArrayContainers :: Word64
  , bytesRunContainers :: Word64
  , bytesBitsetContainers :: Word64
  , maxValue :: Word64
  -- ^ Undefined when the cardinality is zero.
  , minValue :: Word64
  -- ^ Undefined when the cardinality is zero.
  , cardinality :: Word64
  }
  deriving (Eq, Ord, Show)

instance Storable Statistics where
  sizeOf _ = #{size roaring64_statistics_t}
  {-# INLINE sizeOf #-}
  alignment _ = #{alignment roaring64_statistics_t}
  {-# INLINE alignment #-}
  peek ptr =
    Statistics
      <$> #{peek roaring64_statistics_t, n_containers} ptr
      <*> #{peek roaring64_statistics_t, n_array_containers} ptr
      <*> #{peek roaring64_statistics_t, n_run_containers} ptr
      <*> #{peek roaring64_statistics_t, n_bitset_containers} ptr
      <*> #{peek roaring64_statistics_t, n_values_array_containers} ptr
      <*> #{peek roaring64_statistics_t, n_values_run_containers} ptr
      <*> #{peek roaring64_statistics_t, n_values_bitset_containers} ptr
      <*> #{peek roaring64_statistics_t, n_bytes_array_containers} ptr
      <*> #{peek roaring64_statistics_t, n_bytes_run_containers} ptr
      <*> #{peek roaring64_statistics_t, n_bytes_bitset_containers} ptr
      <*> #{peek roaring64_statistics_t, max_value} ptr
      <*> #{peek roaring64_statistics_t, min_value} ptr
      <*> #{peek roaring64_statistics_t, cardinality} ptr
  {-# INLINE peek #-}
  poke ptr statistics = do
    #{poke roaring64_statistics_t, n_containers} ptr statistics.containers
    #{poke roaring64_statistics_t, n_array_containers} ptr statistics.arrayContainers
    #{poke roaring64_statistics_t, n_run_containers} ptr statistics.runContainers
    #{poke roaring64_statistics_t, n_bitset_containers} ptr statistics.bitsetContainers
    #{poke roaring64_statistics_t, n_values_array_containers} ptr statistics.valuesArrayContainers
    #{poke roaring64_statistics_t, n_values_run_containers} ptr statistics.valuesRunContainers
    #{poke roaring64_statistics_t, n_values_bitset_containers} ptr statistics.valuesBitsetContainers
    #{poke roaring64_statistics_t, n_bytes_array_containers} ptr statistics.bytesArrayContainers
    #{poke roaring64_statistics_t, n_bytes_run_containers} ptr statistics.bytesRunContainers
    #{poke roaring64_statistics_t, n_bytes_bitset_containers} ptr statistics.bytesBitsetContainers
    #{poke roaring64_statistics_t, max_value} ptr statistics.maxValue
    #{poke roaring64_statistics_t, min_value} ptr statistics.minValue
    #{poke roaring64_statistics_t, cardinality} ptr statistics.cardinality
  {-# INLINE poke #-}