[Haskell-cafe] Seven ways to store 16 bytes
Mark Lentczner
markl at glyphic.com
Tue Jan 5 19:06:09 EST 2010
In preparing the speed ups in uuid-0.1.2, I investigated various ways to store 16 bytes of data in a Haskell object. Surprisingly, storing as 4 Word32 values in a standard data type worked best for that application.
I've extracted out the testing work for that and put it here:
http://bitbucket.org/mtnviewmark/haskell-playground/src/tip/16bytes/
There you can find the code that tests storing 16 bytes in various ways:
> import qualified Data.Array as A
> import qualified Data.Array.Unboxed as U
> import qualified Data.Array.Vector as V
> import qualified Data.ByteString as B
>
> data InBytes = BY !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8
> !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8
> deriving (Eq, Ord)
>
> data InWords = WO !Word32 !Word32 !Word32 !Word32
> deriving (Eq, Ord)
>
> data InList = LI [Word8] deriving (Eq, Ord)
> data InByteString = BS B.ByteString deriving (Eq, Ord)
> data InArray = AR (A.Array Int Word8) deriving (Eq, Ord)
> data InUArray = UA (U.UArray Int Word8) deriving (Eq, Ord)
> data InVector = VE (V.UArr Word8) deriving (Eq)
Depending on operations will be needed most, different storage methods do best.
Enjoy!
- Mark
Mark Lentczner (MtnViewMark)
http://www.ozonehouse.com/mark/
More information about the Haskell-Cafe
mailing list