³ò
ô=£Cc           @   sb   d  d k  l Z l Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 S(   iÿÿÿÿ(   t   packt   unpackc         C   sº   d } } d } d „  } xo |  D]g } | | i i ƒ } | d j o
 | } n | | j  o
 | } n | | j o
 | } n | | } q  W| t |  ƒ } h  | d <| d <| d <S(   sY   given a list of khashmir instances, finds min, max, and average number of nodes in tablesi    c         S   s.   d } x! |  D] } | t  | i ƒ } q W| S(   Ni    (   t   lent   l(   t   bucketst   ct   bucket(    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   count   s
     t   mint   maxt   avgN(   t   Nonet   tableR   R   (   R   R	   R
   R   R   t   nodeR   (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   bucket_stats   s    
	 


c         C   s>   t  d g  } |  i d ƒ D] } | t | ƒ q ~ | g Œ S(   Ns   !BBBBHt   .(   R    t   splitt   int(   t   ipt   portt   _[1]t   i(    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   compact_peer_info"   s    c         C   s   t  d „  |  ƒ S(   Nc         S   s   t  |  d  |  d ƒ S(   i    i   (   R   (   t   a(    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   <lambda>&   s    (   t   map(   t   peers(    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt	   packPeers%   s    c         C   s   t  d „  |  d ƒ S(   Nc         S   s   |  | S(    (    (   R   t   b(    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyR   )   s    t    (   t   reduce(   R   (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   reducePeers(   s    c      
   C   sû   g  } t  |  ƒ t  d ƒ j o  xÕ t d t |  ƒ d ƒ D] } d i g  } |  | | d !D] } | t t | ƒ ƒ qZ ~ ƒ } t d |  | d | d !ƒ d } | i | | d  f ƒ q8 Wn9 x5 |  D]- } | i | d | d | i	 d	 ƒ f ƒ qÆ W| S(
   NR   i    i   R   i   s   !HR   R   s   peer id(
   t   typet   xrangeR   t   joint   strt   ordR   t   appendR   t   get(   t   pR   t   xR   R   R   R   (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   unpackPeers+   s     A" +c         C   s   |  t  | | ƒ S(   N(   R   (   t   idR   R   (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   compact_node_info8   s    c      	   C   s@   d i  g  } |  D]% } | t | d | d | d ƒ q ~ ƒ S(   NR   R*   t   hostR   (   R"   R+   (   t   nodesR   R(   (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt	   packNodes;   s    c         C   sÍ   g  } xÀ t  d t |  ƒ d ƒ D]¦ } |  | | d !} d i g  } |  | d | d !D] } | t t | ƒ ƒ qV ~ ƒ } t d |  | d | d !ƒ d } | i h  | d <| d <| d	 <ƒ q W| S(
   Ni    i   i   R   i   s   !HR*   R,   R   (   R!   R   R"   R#   R$   R   R%   (   t   nR-   R(   R*   R   R   R   R   (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pyt   unpackNodes>   s     E",N(   t   structR    R   R   R   R   R   R)   R+   R.   R0   (    (    (    sR   /afs/sipb.mit.edu/project/outland/src/BitTorrent/BitTorrent-4.2.2/khashmir/util.pys   <module>   s   							