diff options
author | joe <joe@jerkface.net> | 2017-01-27 04:34:32 -0500 |
---|---|---|
committer | joe <joe@jerkface.net> | 2017-01-27 04:34:32 -0500 |
commit | 77a317310d4f7929335fafe3cfbf53afd45faa82 (patch) | |
tree | 220e885dfc44af98998faee7660b9e9ef7363220 /src/Network/BitTorrent/DHT/Routing.hs | |
parent | 6a239e20bbc7a84a74721d23587bbf1b8c20c704 (diff) |
Switched PSQueue to psqueues for strict spine.
Diffstat (limited to 'src/Network/BitTorrent/DHT/Routing.hs')
-rw-r--r-- | src/Network/BitTorrent/DHT/Routing.hs | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/Network/BitTorrent/DHT/Routing.hs b/src/Network/BitTorrent/DHT/Routing.hs index d64e415e..3c2e30aa 100644 --- a/src/Network/BitTorrent/DHT/Routing.hs +++ b/src/Network/BitTorrent/DHT/Routing.hs | |||
@@ -70,7 +70,7 @@ import Data.Functor.Identity | |||
70 | import Data.List as L hiding (insert) | 70 | import Data.List as L hiding (insert) |
71 | import Data.Maybe | 71 | import Data.Maybe |
72 | import Data.Monoid | 72 | import Data.Monoid |
73 | import Data.PSQueue as PSQ | 73 | import Data.Wrapper.PSQ as PSQ |
74 | import Data.Serialize as S hiding (Result, Done) | 74 | import Data.Serialize as S hiding (Result, Done) |
75 | import qualified Data.Sequence as Seq | 75 | import qualified Data.Sequence as Seq |
76 | import Data.Time | 76 | import Data.Time |
@@ -181,10 +181,6 @@ runRouting ping_node find_nodes timestamper = go | |||
181 | -- | Timestamp - last time this node is pinged. | 181 | -- | Timestamp - last time this node is pinged. |
182 | type NodeEntry ip = Binding (NodeInfo ip) Timestamp | 182 | type NodeEntry ip = Binding (NodeInfo ip) Timestamp |
183 | 183 | ||
184 | instance (Serialize k, Serialize v) => Serialize (Binding k v) where | ||
185 | get = (:->) <$> get <*> get | ||
186 | put (k :-> v) = put k >> put v | ||
187 | |||
188 | -- TODO instance Pretty where | 184 | -- TODO instance Pretty where |
189 | 185 | ||
190 | -- | Number of nodes in a bucket. | 186 | -- | Number of nodes in a bucket. |
@@ -239,12 +235,13 @@ data Bucket ip = Bucket { bktNodes :: PSQ (NodeInfo ip) Timestamp | |||
239 | , bktQ :: BucketQueue ip | 235 | , bktQ :: BucketQueue ip |
240 | } deriving (Show,Generic) | 236 | } deriving (Show,Generic) |
241 | 237 | ||
242 | instance (Eq ip, Serialize ip) => Serialize (Bucket ip) | 238 | instance (Eq ip, Serialize ip) => Serialize (Bucket ip) where |
239 | get = Bucket . psqFromPairList <$> get <*> pure (runIdentity $ emptyQueue bucketQ) | ||
240 | put = put . psqToPairList . bktNodes | ||
241 | |||
242 | psqFromPairList xs = PSQ.fromList $ map (\(a,b) -> a :-> b) xs | ||
243 | 243 | ||
244 | instance (Serialize k, Serialize v, Ord k, Ord v) | 244 | psqToPairList psq = map (\(a :-> b) -> (a,b)) $ PSQ.toList psq |
245 | => Serialize (PSQ k v) where | ||
246 | get = PSQ.fromList <$> get | ||
247 | put = put . PSQ.toList | ||
248 | 245 | ||
249 | -- | Update interval, in seconds. | 246 | -- | Update interval, in seconds. |
250 | delta :: NominalDiffTime | 247 | delta :: NominalDiffTime |