summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/PeerWire/Bitfield.hs
diff options
context:
space:
mode:
authorSam T <pxqr.sta@gmail.com>2013-05-05 03:50:07 +0400
committerSam T <pxqr.sta@gmail.com>2013-05-05 03:50:07 +0400
commit950d728dc12302858f0c20d9890dc97975f4e9a9 (patch)
tree0e69d799de4f65da1201fef8efcfad55bbd0a0c0 /src/Network/BitTorrent/PeerWire/Bitfield.hs
parent54efdaf9c94b813213c687b1f0e750286312de81 (diff)
~ Minor changes.
Diffstat (limited to 'src/Network/BitTorrent/PeerWire/Bitfield.hs')
-rw-r--r--src/Network/BitTorrent/PeerWire/Bitfield.hs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/Network/BitTorrent/PeerWire/Bitfield.hs b/src/Network/BitTorrent/PeerWire/Bitfield.hs
index 2baeb516..9d88e784 100644
--- a/src/Network/BitTorrent/PeerWire/Bitfield.hs
+++ b/src/Network/BitTorrent/PeerWire/Bitfield.hs
@@ -18,6 +18,7 @@ module Network.BitTorrent.PeerWire.Bitfield
18 18
19 -- * Construction 19 -- * Construction
20 , empty, full 20 , empty, full
21 , toList
21 , fromByteString, toByteString 22 , fromByteString, toByteString
22 23
23 -- * Query 24 -- * Query
@@ -62,6 +63,13 @@ full :: Int -> Bitfield
62full n = MkBitfield $ B.replicate (sizeInBase n 8) (complement 0) 63full n = MkBitfield $ B.replicate (sizeInBase n 8) (complement 0)
63{-# INLINE full #-} 64{-# INLINE full #-}
64 65
66toList :: Bitfield -> [Bool]
67toList (MkBitfield bs) = concatMap unpkg (B.unpack bs)
68 where
69 unpkg :: Word8 -> [Bool]
70 unpkg byte = L.map (testBit byte) [0..bitSize (undefined :: Word8) - 1]
71{-# INLINE toList #-}
72
65fromByteString :: ByteString -> Bitfield 73fromByteString :: ByteString -> Bitfield
66fromByteString = MkBitfield 74fromByteString = MkBitfield
67{-# INLINE fromByteString #-} 75{-# INLINE fromByteString #-}
@@ -278,5 +286,5 @@ findMax (MkBitfield b) = do
278 286
279{-# INLINE findMax #-} 287{-# INLINE findMax #-}
280 288
281frequencies :: [Bitfield] -> UArray PieceIx Int 289frequencies :: [Bitfield] -> [Int]
282frequencies = undefined 290frequencies xs = foldr1 (zipWith (+)) $ map (map fromEnum . toList) xs