make RingMap instance of Functor and Foldable
This commit is contained in:
parent
c536994afe
commit
df479982fa
|
@ -713,8 +713,8 @@ evaluateStats timeInterval summedStats =
|
||||||
-- first sum all event numbers, then divide through number of seconds passed to
|
-- first sum all event numbers, then divide through number of seconds passed to
|
||||||
-- get rate per second
|
-- get rate per second
|
||||||
RelayStats
|
RelayStats
|
||||||
{ relayReceiveRates = mapRMap (/ intervalSeconds) $ relayReceiveRates summedStats
|
{ relayReceiveRates = (/ intervalSeconds) <$> relayReceiveRates summedStats
|
||||||
, relayDeliveryRates = mapRMap (/ intervalSeconds) $ relayDeliveryRates summedStats
|
, relayDeliveryRates = (/ intervalSeconds) <$> relayDeliveryRates summedStats
|
||||||
, postPublishRate = postPublishRate summedStats / intervalSeconds
|
, postPublishRate = postPublishRate summedStats / intervalSeconds
|
||||||
, postFetchRate = postFetchRate summedStats / intervalSeconds
|
, postFetchRate = postFetchRate summedStats / intervalSeconds
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,29 @@ instance (Bounded k, Ord k, Eq a) => Eq (RingMap k a) where
|
||||||
instance (Bounded k, Ord k, Show k, Show a) => Show (RingMap k a) where
|
instance (Bounded k, Ord k, Show k, Show a) => Show (RingMap k a) where
|
||||||
show rmap = shows ("RingMap " :: String) (show $ getRingMap rmap)
|
show rmap = shows ("RingMap " :: String) (show $ getRingMap rmap)
|
||||||
|
|
||||||
|
|
||||||
|
instance (Bounded k, Ord k) => Functor (RingMap k) where
|
||||||
|
-- | map a function over all payload values of a 'RingMap'
|
||||||
|
fmap f = RingMap . Map.map traversingF . getRingMap
|
||||||
|
where
|
||||||
|
traversingF (KeyEntry a) = KeyEntry (f a)
|
||||||
|
traversingF (ProxyEntry pointer (Just entry)) = ProxyEntry pointer (Just $ traversingF entry)
|
||||||
|
traversingF (ProxyEntry pointer Nothing) = ProxyEntry pointer Nothing
|
||||||
|
|
||||||
|
|
||||||
|
instance (Bounded k, Ord k) => Foldable (RingMap k) where
|
||||||
|
foldr f initVal = Map.foldr traversingFR initVal . getRingMap
|
||||||
|
where
|
||||||
|
traversingFR (KeyEntry a) acc = f a acc
|
||||||
|
traversingFR (ProxyEntry _ Nothing) acc = acc
|
||||||
|
traversingFR (ProxyEntry _ (Just entry)) acc = traversingFR entry acc
|
||||||
|
foldl f initVal = Map.foldl traversingFL initVal . getRingMap
|
||||||
|
where
|
||||||
|
traversingFL acc (KeyEntry a) = f acc a
|
||||||
|
traversingFL acc (ProxyEntry _ Nothing) = acc
|
||||||
|
traversingFL acc (ProxyEntry _ (Just entry)) = traversingFL acc entry
|
||||||
|
|
||||||
|
|
||||||
-- | entry of a 'RingMap' that holds a value and can also
|
-- | entry of a 'RingMap' that holds a value and can also
|
||||||
-- wrap around the lookup direction at the edges of the name space.
|
-- wrap around the lookup direction at the edges of the name space.
|
||||||
data RingEntry k a = KeyEntry a
|
data RingEntry k a = KeyEntry a
|
||||||
|
@ -247,14 +270,3 @@ takeRMapSuccessorsFromTo :: (Bounded k, Ord k, Num k)
|
||||||
-> RingMap k a
|
-> RingMap k a
|
||||||
-> [a]
|
-> [a]
|
||||||
takeRMapSuccessorsFromTo fromVal toVal rmap = takeEntriesUntil_ rmap rMapLookupSucc toVal fromVal Nothing []
|
takeRMapSuccessorsFromTo fromVal toVal rmap = takeEntriesUntil_ rmap rMapLookupSucc toVal fromVal Nothing []
|
||||||
|
|
||||||
|
|
||||||
-- | map a function over all payload values of a 'RingMap'
|
|
||||||
mapRMap :: (Bounded k, Ord k, Num k)
|
|
||||||
=> (a -> b) -> RingMap k a -> RingMap k b
|
|
||||||
mapRMap f = RingMap . Map.map traversingF . getRingMap
|
|
||||||
where
|
|
||||||
--traversingF :: RingEntry k a -> RingEntry k b
|
|
||||||
traversingF (KeyEntry a) = KeyEntry (f a)
|
|
||||||
traversingF (ProxyEntry pointer (Just entry)) = ProxyEntry pointer (Just $ traversingF entry)
|
|
||||||
traversingF (ProxyEntry pointer Nothing) = ProxyEntry pointer Nothing
|
|
||||||
|
|
Loading…
Reference in a new issue