Skip to content

Commit 2921d8c

Browse files
Don't have to destructure boxed constants everywhere.
1 parent 90391c4 commit 2921d8c

1 file changed

Lines changed: 54 additions & 79 deletions

File tree

System/Metrics/Distribution.hsc

Lines changed: 54 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ newtype Stripe = Stripe { stripeD :: Distrib }
122122

123123
data Distrib = Distrib (MutableByteArray## RealWorld)
124124

125+
unI :: Int -> Int##
126+
unI (I## x) = x
127+
{-# INLINE unI #-}
128+
125129
distribLen :: Int
126130
distribLen = (#size struct distrib)
127131

@@ -155,24 +159,16 @@ maxPos = div (#offset struct distrib, max)
155159

156160
newDistrib :: IO Distrib
157161
newDistrib = IO $ \s ->
158-
case distribLen of { (I## distribLen') ->
159-
case newByteArray## distribLen' s of { (## s1, mba ##) ->
160-
case lockPos of { (I## lockPos') ->
161-
-- probably unecessary
162-
case atomicWriteIntArray## mba lockPos' 0## s1 of { s2 ->
163-
case countPos of { (I## countPos') ->
164-
case writeInt64Array mba countPos' (intToInt64 0##) s2 of { s3 ->
165-
case meanPos of { (I## meanPos') ->
166-
case writeDoubleArray## mba meanPos' 0.0#### s3 of { s4 ->
167-
case sumSqDeltaPos of { (I## sumSqDeltaPos') ->
168-
case writeDoubleArray## mba sumSqDeltaPos' 0.0#### s4 of { s5 ->
169-
case sumPos of { (I## sumPos') ->
170-
case writeDoubleArray## mba sumPos' 0.0#### s5 of { s6 ->
171-
case minPos of { (I## minPos') ->
172-
case writeDoubleArray## mba minPos' 0.0#### s6 of { s7 ->
173-
case maxPos of { (I## maxPos') ->
174-
case writeDoubleArray## mba maxPos' 0.0#### s7 of { s8 ->
175-
(## s8, Distrib mba ##) }}}}}}}}}}}}}}}}
162+
case newByteArray## (unI distribLen) s of { (## s1, mba ##) ->
163+
-- probably unnecessary
164+
case atomicWriteIntArray## mba (unI lockPos) 0## s1 of { s2 ->
165+
case writeInt64Array mba (unI countPos) (intToInt64 0##) s2 of { s3 ->
166+
case writeDoubleArray## mba (unI meanPos) 0.0#### s3 of { s4 ->
167+
case writeDoubleArray## mba (unI sumSqDeltaPos) 0.0#### s4 of { s5 ->
168+
case writeDoubleArray## mba (unI sumPos) 0.0#### s5 of { s6 ->
169+
case writeDoubleArray## mba (unI minPos) 0.0#### s6 of { s7 ->
170+
case writeDoubleArray## mba (unI maxPos) 0.0#### s7 of { s8 ->
171+
(## s8, Distrib mba ##) }}}}}}}}
176172

177173
newStripe :: IO Stripe
178174
newStripe = do
@@ -207,17 +203,14 @@ add distrib val = addN distrib val 1
207203
{-# INLINE spinLock #-}
208204
spinLock :: MutableByteArray## RealWorld -> State## RealWorld -> State## RealWorld
209205
spinLock mba = \s ->
210-
case lockPos of { (I## lockPos') ->
211-
case casIntArray## mba lockPos' 0## 1## s of { (## s1, r ##) ->
206+
case casIntArray## mba (unI lockPos) 0## 1## s of { (## s1, r ##) ->
212207
case r ==## 0## of { 0## ->
213-
spinLock mba s1; _ -> s1 }}}
208+
spinLock mba s1; _ -> s1 }}
214209

215210
{-# INLINE spinUnlock #-}
216211
spinUnlock :: MutableByteArray## RealWorld -> State## RealWorld -> State## RealWorld
217212
spinUnlock mba = \s ->
218-
case lockPos of { (I## lockPos') ->
219-
case writeIntArray## mba lockPos' 0## s of { s2 ->
220-
s2 }}
213+
case writeIntArray## mba (unI lockPos) 0## s of { s2 -> s2 }
221214

222215

223216
-- | Add the same value to the distribution N times.
@@ -228,32 +221,26 @@ addN distribution (D## val) (I64## n) = IO $ \s ->
228221
case myStripe distribution of { (IO myStripe') ->
229222
case myStripe' s of { (## s1, (Stripe (Distrib mba)) ##) ->
230223
case spinLock mba s1 of { s2 ->
231-
case countPos of { (I## countPos') ->
232-
case readInt64Array mba countPos' s2 of { (## s3, count ##) ->
233-
case meanPos of { (I## meanPos') ->
234-
case readDoubleArray## mba meanPos' s3 of { (## s4, mean ##) ->
235-
case sumSqDeltaPos of { (I## sumSqDeltaPos') ->
236-
case readDoubleArray## mba sumSqDeltaPos' s4 of { (## s5, sumSqDelta ##) ->
237-
case sumPos of { (I## sumPos') ->
238-
case readDoubleArray## mba sumPos' s5 of { (## s6, dSum ##) ->
239-
case minPos of { (I## minPos') ->
240-
case readDoubleArray## mba minPos' s6 of { (## s7, dMin ##) ->
241-
case maxPos of { (I## maxPos') ->
242-
case readDoubleArray## mba maxPos' s7 of { (## s8, dMax ##) ->
224+
case readInt64Array mba (unI countPos) s2 of { (## s3, count ##) ->
225+
case readDoubleArray## mba (unI meanPos) s3 of { (## s4, mean ##) ->
226+
case readDoubleArray## mba (unI sumSqDeltaPos) s4 of { (## s5, sumSqDelta ##) ->
227+
case readDoubleArray## mba (unI sumPos) s5 of { (## s6, dSum ##) ->
228+
case readDoubleArray## mba (unI minPos) s6 of { (## s7, dMin ##) ->
229+
case readDoubleArray## mba (unI maxPos) s7 of { (## s8, dMax ##) ->
243230
case plusInt64 count n of { count' ->
244231
case val -#### mean of { delta ->
245232
case mean +#### ((int64ToDouble n) *#### delta /#### (int64ToDouble count')) of { mean' ->
246233
case sumSqDelta +#### (delta *#### (val -#### mean') *#### (int64ToDouble n)) of { sumSqDelta' ->
247-
case writeInt64Array mba countPos' count' s8 of { s9 ->
248-
case writeDoubleArray## mba meanPos' mean' s9 of { s10 ->
249-
case writeDoubleArray## mba sumSqDeltaPos' sumSqDelta' s10 of { s11 ->
250-
case writeDoubleArray## mba sumPos' (dSum +#### val) s11 of { s12 ->
234+
case writeInt64Array mba (unI countPos) count' s8 of { s9 ->
235+
case writeDoubleArray## mba (unI meanPos) mean' s9 of { s10 ->
236+
case writeDoubleArray## mba (unI sumSqDeltaPos) sumSqDelta' s10 of { s11 ->
237+
case writeDoubleArray## mba (unI sumPos) (dSum +#### val) s11 of { s12 ->
251238
case (case val <#### dMin of { 0## -> dMin; _ -> val }) of { dMin' ->
252239
case (case val >#### dMax of { 0## -> dMax; _ -> val }) of { dMax' ->
253-
case writeDoubleArray## mba minPos' dMin' s12 of { s13 ->
254-
case writeDoubleArray## mba maxPos' dMax' s13 of { s14 ->
240+
case writeDoubleArray## mba (unI minPos) dMin' s12 of { s13 ->
241+
case writeDoubleArray## mba (unI maxPos) dMax' s13 of { s14 ->
255242
case spinUnlock mba s14 of { s15 ->
256-
(## s15, () ##) }}}}}}}}}}}}}}}}}}}}}}}}}}}}
243+
(## s15, () ##) }}}}}}}}}}}}}}}}}}}}}}
257244

258245
-- | Combine 'b' with 'a', writing the result in 'a'. Takes the lock of
259246
-- 'b' while combining, but doesn't otherwise modify 'b'. 'a' is
@@ -263,20 +250,17 @@ addN distribution (D## val) (I64## n) = IO $ \s ->
263250
combine :: Distrib -> Distrib -> IO ()
264251
combine (Distrib bMBA) (Distrib aMBA) = IO $ \s ->
265252
case spinLock bMBA s of { s1 ->
266-
case countPos of { (I## countPos') ->
267-
case readInt64Array aMBA countPos' s1 of { (## s2, aCount ##) ->
268-
case readInt64Array bMBA countPos' s2 of { (## s3, bCount ##) ->
253+
case readInt64Array aMBA (unI countPos) s1 of { (## s2, aCount ##) ->
254+
case readInt64Array bMBA (unI countPos) s2 of { (## s3, bCount ##) ->
269255
case plusInt64 aCount bCount of { count' ->
270-
case meanPos of { (I## meanPos' ) ->
271-
case readDoubleArray## aMBA meanPos' s3 of { (## s4, aMean ##) ->
272-
case readDoubleArray## bMBA meanPos' s4 of { (## s5, bMean ##) ->
256+
case readDoubleArray## aMBA (unI meanPos) s3 of { (## s4, aMean ##) ->
257+
case readDoubleArray## bMBA (unI meanPos) s4 of { (## s5, bMean ##) ->
273258
case bMean -#### aMean of { delta ->
274259
case ( (((int64ToDouble aCount) *#### aMean) +#### ((int64ToDouble bCount) *#### bMean))
275260
/#### (int64ToDouble count')
276261
) of { mean' ->
277-
case sumSqDeltaPos of { (I## sumSqDeltaPos') ->
278-
case readDoubleArray## aMBA sumSqDeltaPos' s5 of { (## s6, aSumSqDelta ##) ->
279-
case readDoubleArray## bMBA sumSqDeltaPos' s6 of { (## s7, bSumSqDelta ##) ->
262+
case readDoubleArray## aMBA (unI sumSqDeltaPos) s5 of { (## s6, aSumSqDelta ##) ->
263+
case readDoubleArray## bMBA (unI sumSqDeltaPos) s6 of { (## s7, bSumSqDelta ##) ->
280264
case ( aSumSqDelta
281265
+#### bSumSqDelta
282266
+#### ( delta
@@ -286,24 +270,21 @@ combine (Distrib bMBA) (Distrib aMBA) = IO $ \s ->
286270
)
287271
)
288272
) of { sumSqDelta' ->
289-
case writeInt64Array aMBA countPos' count' s7 of { s8 ->
273+
case writeInt64Array aMBA (unI countPos) count' s7 of { s8 ->
290274
case (case eqInt64 count' (intToInt64 0##) of { 0## -> mean'; _ -> 0.0#### }) of { writeMean ->
291-
case writeDoubleArray## aMBA meanPos' writeMean s8 of { s9 ->
292-
case writeDoubleArray## aMBA sumSqDeltaPos' sumSqDelta' s9 of { s10 ->
293-
case sumPos of { (I## sumPos') ->
294-
case readDoubleArray## aMBA sumPos' s10 of { (## s11, aSum ##) ->
295-
case readDoubleArray## bMBA sumPos' s11 of { (## s12, bSum ##) ->
296-
case writeDoubleArray## aMBA sumPos' (aSum +#### bSum) s12 of { s13 ->
297-
case minPos of { (I## minPos') ->
298-
case readDoubleArray## bMBA minPos' s13 of { (## s14, bMin ##) ->
299-
case writeDoubleArray## aMBA minPos' bMin s14 of { s15 ->
300-
case maxPos of { (I## maxPos') ->
275+
case writeDoubleArray## aMBA (unI meanPos) writeMean s8 of { s9 ->
276+
case writeDoubleArray## aMBA (unI sumSqDeltaPos) sumSqDelta' s9 of { s10 ->
277+
case readDoubleArray## aMBA (unI sumPos) s10 of { (## s11, aSum ##) ->
278+
case readDoubleArray## bMBA (unI sumPos) s11 of { (## s12, bSum ##) ->
279+
case writeDoubleArray## aMBA (unI sumPos) (aSum +#### bSum) s12 of { s13 ->
280+
case readDoubleArray## bMBA (unI minPos) s13 of { (## s14, bMin ##) ->
281+
case writeDoubleArray## aMBA (unI minPos) bMin s14 of { s15 ->
301282
-- This is slightly hacky, but ok: see
302283
-- 813aa426be78e8abcf1c7cdd43433bcffa07828e
303-
case readDoubleArray## bMBA maxPos' s15 of { (## s16, bMax ##) ->
304-
case writeDoubleArray## aMBA maxPos' bMax s16 of { s17 ->
284+
case readDoubleArray## bMBA (unI maxPos) s15 of { (## s16, bMax ##) ->
285+
case writeDoubleArray## aMBA (unI maxPos) bMax s16 of { s17 ->
305286
case spinUnlock bMBA s17 of { s18 ->
306-
(## s18, () ##) }}}}}}}}}}}}}}}}}}}}}}}}}}}}}
287+
(## s18, () ##) }}}}}}}}}}}}}}}}}}}}}}}
307288

308289
-- | Get the current statistical summary for the event being tracked.
309290
read :: Distribution -> IO Stats
@@ -312,18 +293,12 @@ read distrib = do
312293
forM_ (toList $ unD distrib) $ \(Stripe d) ->
313294
combine d result
314295
IO $ \s ->
315-
case meanPos of { (I## meanPos') ->
316-
case countPos of { (I## countPos') ->
317-
case sumSqDeltaPos of { (I## sumSqDeltaPos') ->
318-
case sumPos of { (I## sumPos') ->
319-
case minPos of { (I## minPos') ->
320-
case maxPos of { (I## maxPos') ->
321-
case readInt64Array mba countPos' s of { (## s1, count ##) ->
322-
case readDoubleArray## mba meanPos' s1 of { (## s2, mean ##) ->
323-
case readDoubleArray## mba sumSqDeltaPos' s2 of { (## s3, sumSqDelta ##) ->
324-
case readDoubleArray## mba sumPos' s3 of { (## s4, dSum ##) ->
325-
case readDoubleArray## mba minPos' s4 of { (## s5, dMin ##) ->
326-
case readDoubleArray## mba maxPos' s5 of { (## s6, dMax ##) ->
296+
case readInt64Array mba (unI countPos) s of { (## s1, count ##) ->
297+
case readDoubleArray## mba (unI meanPos) s1 of { (## s2, mean ##) ->
298+
case readDoubleArray## mba (unI sumSqDeltaPos) s2 of { (## s3, sumSqDelta ##) ->
299+
case readDoubleArray## mba (unI sumPos) s3 of { (## s4, dSum ##) ->
300+
case readDoubleArray## mba (unI minPos) s4 of { (## s5, dMin ##) ->
301+
case readDoubleArray## mba (unI maxPos) s5 of { (## s6, dMax ##) ->
327302
(## s6
328303
, Stats { mean = (D## mean)
329304
, variance = if (I64## count) == 0 then 0.0
@@ -333,4 +308,4 @@ read distrib = do
333308
, min = (D## dMin)
334309
, max = (D## dMax)
335310
}
336-
##) }}}}}}}}}}}}
311+
##) }}}}}}

0 commit comments

Comments
 (0)