{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module HaskellWorks.Data.Bits.Types.Broadword where

import Control.DeepSeq
import Data.Vector.Storable
import GHC.Generics
import HaskellWorks.Data.Bits.BitWise

-- | Type wrapper to prefer broadword operations.
newtype Broadword a = Broadword a deriving (Broadword a
Broadword a -> Broadword a
Broadword a -> Broadword a -> Broadword a
(Broadword a -> Broadword a -> Broadword a)
-> (Broadword a -> Broadword a -> Broadword a)
-> (Broadword a -> Broadword a -> Broadword a)
-> (Broadword a -> Broadword a)
-> Broadword a
-> Broadword a
-> BitWise (Broadword a)
forall a. BitWise a => Broadword a
forall a. BitWise a => Broadword a -> Broadword a
forall a. BitWise a => Broadword a -> Broadword a -> Broadword a
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> a
-> a
-> BitWise a
all1s :: Broadword a
$call1s :: forall a. BitWise a => Broadword a
all0s :: Broadword a
$call0s :: forall a. BitWise a => Broadword a
comp :: Broadword a -> Broadword a
$ccomp :: forall a. BitWise a => Broadword a -> Broadword a
.^. :: Broadword a -> Broadword a -> Broadword a
$c.^. :: forall a. BitWise a => Broadword a -> Broadword a -> Broadword a
.|. :: Broadword a -> Broadword a -> Broadword a
$c.|. :: forall a. BitWise a => Broadword a -> Broadword a -> Broadword a
.&. :: Broadword a -> Broadword a -> Broadword a
$c.&. :: forall a. BitWise a => Broadword a -> Broadword a -> Broadword a
BitWise, Broadword a -> Broadword a -> Bool
(Broadword a -> Broadword a -> Bool)
-> (Broadword a -> Broadword a -> Bool) -> Eq (Broadword a)
forall a. Eq a => Broadword a -> Broadword a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Broadword a -> Broadword a -> Bool
$c/= :: forall a. Eq a => Broadword a -> Broadword a -> Bool
== :: Broadword a -> Broadword a -> Bool
$c== :: forall a. Eq a => Broadword a -> Broadword a -> Bool
Eq, Int -> Broadword a -> ShowS
[Broadword a] -> ShowS
Broadword a -> String
(Int -> Broadword a -> ShowS)
-> (Broadword a -> String)
-> ([Broadword a] -> ShowS)
-> Show (Broadword a)
forall a. Show a => Int -> Broadword a -> ShowS
forall a. Show a => [Broadword a] -> ShowS
forall a. Show a => Broadword a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Broadword a] -> ShowS
$cshowList :: forall a. Show a => [Broadword a] -> ShowS
show :: Broadword a -> String
$cshow :: forall a. Show a => Broadword a -> String
showsPrec :: Int -> Broadword a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Broadword a -> ShowS
Show, Ptr b -> Int -> IO (Broadword a)
Ptr b -> Int -> Broadword a -> IO ()
Ptr (Broadword a) -> IO (Broadword a)
Ptr (Broadword a) -> Int -> IO (Broadword a)
Ptr (Broadword a) -> Int -> Broadword a -> IO ()
Ptr (Broadword a) -> Broadword a -> IO ()
Broadword a -> Int
(Broadword a -> Int)
-> (Broadword a -> Int)
-> (Ptr (Broadword a) -> Int -> IO (Broadword a))
-> (Ptr (Broadword a) -> Int -> Broadword a -> IO ())
-> (forall b. Ptr b -> Int -> IO (Broadword a))
-> (forall b. Ptr b -> Int -> Broadword a -> IO ())
-> (Ptr (Broadword a) -> IO (Broadword a))
-> (Ptr (Broadword a) -> Broadword a -> IO ())
-> Storable (Broadword a)
forall b. Ptr b -> Int -> IO (Broadword a)
forall b. Ptr b -> Int -> Broadword a -> IO ()
forall a. Storable a => Ptr (Broadword a) -> IO (Broadword a)
forall a.
Storable a =>
Ptr (Broadword a) -> Int -> IO (Broadword a)
forall a.
Storable a =>
Ptr (Broadword a) -> Int -> Broadword a -> IO ()
forall a. Storable a => Ptr (Broadword a) -> Broadword a -> IO ()
forall a. Storable a => Broadword a -> Int
forall a b. Storable a => Ptr b -> Int -> IO (Broadword a)
forall a b. Storable a => Ptr b -> Int -> Broadword a -> 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
poke :: Ptr (Broadword a) -> Broadword a -> IO ()
$cpoke :: forall a. Storable a => Ptr (Broadword a) -> Broadword a -> IO ()
peek :: Ptr (Broadword a) -> IO (Broadword a)
$cpeek :: forall a. Storable a => Ptr (Broadword a) -> IO (Broadword a)
pokeByteOff :: Ptr b -> Int -> Broadword a -> IO ()
$cpokeByteOff :: forall a b. Storable a => Ptr b -> Int -> Broadword a -> IO ()
peekByteOff :: Ptr b -> Int -> IO (Broadword a)
$cpeekByteOff :: forall a b. Storable a => Ptr b -> Int -> IO (Broadword a)
pokeElemOff :: Ptr (Broadword a) -> Int -> Broadword a -> IO ()
$cpokeElemOff :: forall a.
Storable a =>
Ptr (Broadword a) -> Int -> Broadword a -> IO ()
peekElemOff :: Ptr (Broadword a) -> Int -> IO (Broadword a)
$cpeekElemOff :: forall a.
Storable a =>
Ptr (Broadword a) -> Int -> IO (Broadword a)
alignment :: Broadword a -> Int
$calignment :: forall a. Storable a => Broadword a -> Int
sizeOf :: Broadword a -> Int
$csizeOf :: forall a. Storable a => Broadword a -> Int
Storable, (forall x. Broadword a -> Rep (Broadword a) x)
-> (forall x. Rep (Broadword a) x -> Broadword a)
-> Generic (Broadword a)
forall x. Rep (Broadword a) x -> Broadword a
forall x. Broadword a -> Rep (Broadword a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Broadword a) x -> Broadword a
forall a x. Broadword a -> Rep (Broadword a) x
$cto :: forall a x. Rep (Broadword a) x -> Broadword a
$cfrom :: forall a x. Broadword a -> Rep (Broadword a) x
Generic, Broadword a -> ()
(Broadword a -> ()) -> NFData (Broadword a)
forall a. NFData a => Broadword a -> ()
forall a. (a -> ()) -> NFData a
rnf :: Broadword a -> ()
$crnf :: forall a. NFData a => Broadword a -> ()
NFData)