on master help sign in
Add UnpackedUUID
commit89b90137821730ea5cfc80806ea9408b1c5dca3e authorAntoine Latter <aslatter@gmail.com> dateSat 19 Oct 2013, 17:35 (13 years ago) parent6b19636
2 files changed+54
Data/UUID/Internal.hs+52 uuid.cabal+2
Data/UUID/Internal.hs+52
@@ -28,6 +28,9 @@ module Data.UUID.Internal
2828 ,toASCIIBytes
2929 ,fromLazyASCIIBytes
3030 ,toLazyASCIIBytes
31+ ,UnpackedUUID(..)
32+ ,pack
33+ ,unpack
3134 ) where
3235
3336import Prelude hiding (null)
@@ -60,6 +63,7 @@ import qualified Data.ByteString.Lazy as BL
6063import qualified Data.ByteString.Unsafe as BU
6164
6265import Data.UUID.Builder
66+import Data.Word.Util
6367
6468import System.Random
6569
@@ -101,6 +105,54 @@ toWords (UUID w1 w2 w3 w4) = (w1, w2, w3, w4)
101105fromWords :: Word32 -> Word32 -> Word32 -> Word32 -> UUID
102106fromWords = UUID
103107
108+data UnpackedUUID =
109+ UnpackedUUID {
110+ time_low :: Word32 -- 0-3
111+ , time_mid :: Word16 -- 4-5
112+ , time_hi_and_version :: Word16 -- 6-7
113+ , clock_seq_hi_res :: Word8 -- 8
114+ , clock_seq_low :: Word8 -- 9
115+ , node_0 :: Word8
116+ , node_1 :: Word8
117+ , node_2 :: Word8
118+ , node_3 :: Word8
119+ , node_4 :: Word8
120+ , node_5 :: Word8
121+ }
122+ deriving (Read, Show, Eq, Ord)
123+
124+unpack :: UUID -> UnpackedUUID
125+unpack (UUID w0 w1 w2 w3) =
126+ build /-/ w0 /-/ w1 /-/ w2 /-/ w3
127+
128+ where
129+ build x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF =
130+ UnpackedUUID {
131+ time_low = word x0 x1 x2 x3
132+ , time_mid = w8to16 x4 x5
133+ , time_hi_and_version = w8to16 x6 x7
134+ , clock_seq_hi_res = x8
135+ , clock_seq_low = x9
136+ , node_0 = xA
137+ , node_1 = xB
138+ , node_2 = xC
139+ , node_3 = xD
140+ , node_4 = xE
141+ , node_5 = xF
142+ }
143+
144+pack :: UnpackedUUID -> UUID
145+pack unpacked =
146+ makeFromBytes /-/ (time_low unpacked)
147+ /-/ (time_mid unpacked)
148+ /-/ (time_hi_and_version unpacked)
149+ /-/ (clock_seq_hi_res unpacked)
150+ /-/ (clock_seq_low unpacked)
151+ /-/ (node_0 unpacked) /-/ (node_1 unpacked)
152+ /-/ (node_2 unpacked) /-/ (node_3 unpacked)
153+ /-/ (node_4 unpacked) /-/ (node_5 unpacked)
154+
155+
104156--
105157-- UTILITIES
106158--
uuid.cabal+2
@@ -38,6 +38,7 @@ Library
3838
3939 Exposed-Modules:
4040 Data.UUID
41+ Data.UUID.Util
4142 Data.UUID.V1
4243 Data.UUID.V3
4344 Data.UUID.V4
@@ -47,6 +48,7 @@ Library
4748 Data.UUID.Builder
4849 Data.UUID.Internal
4950 Data.UUID.Named
51+ Data.Word.Util
5052
5153 Extensions: DeriveDataTypeable
5254 Ghc-Options: -Wall