func (peers *Peers) chooseShortID() (PeerShortID, bool) {
	rng := rand.New(rand.NewSource(int64(randUint64())))

	// First, just try picking some short IDs at random, and
	// seeing if they are available:
	for i := 0; i < 10; i++ {
		shortID := PeerShortID(rng.Intn(1 << peerShortIDBits))
		if peers.byShortID[shortID].peer == nil {
			return shortID, true
		}
	}

	// Looks like most short IDs are used. So count the number of
	// unused ones, and pick one at random.
	available := int(1 << peerShortIDBits)
	for _, entry := range peers.byShortID {
		if entry.peer != nil {
			available--
		}
	}

	if available == 0 {
		// All short IDs are used.
		return 0, false
	}

	n := rng.Intn(available)
	var i PeerShortID
	for {
		if peers.byShortID[i].peer == nil {
			if n == 0 {
				return i, true
			}

			n--
		}

		i++
	}
}
func (peers *Peers) chooseShortID() (PeerShortID, bool) {
	rng := rand.New(rand.NewSource(int64(randUint64())))

	
	
	for i := 0; i < 10; i++ {
		shortID := PeerShortID(rng.Intn(1 << peerShortIDBits))
		if peers.byShortID[shortID].peer == nil {
			return shortID, true
		}
	}

	
	
	available := int(1 << peerShortIDBits)
	for _, entry := range peers.byShortID {
		if entry.peer != nil {
			available--
		}
	}

	if available == 0 {
		
		return 0, false
	}

	n := rng.Intn(available)
	var i PeerShortID
	for {
		if peers.byShortID[i].peer == nil {
			if n == 0 {
				return i, true
			}

			n--
		}

		i++
	}
}
func ( peers * Peers ) chooseShortID ( ) ( PeerShortID , bool ) { rng := rand . New ( rand . NewSource ( int64 ( randUint64 ( ) ) ) ) // First, just try picking some short IDs at random, and // seeing if they are available: for i := 0 ; i < 10 ; i ++ { shortID := PeerShortID ( rng . Intn ( 1 << peerShortIDBits ) ) if peers . byShortID [ shortID ] . peer == nil { return shortID , true } } // Looks like most short IDs are used. So count the number of // unused ones, and pick one at random. available := int ( 1 << peerShortIDBits ) for _ , entry := range peers . byShortID { if entry . peer != nil { available -- } } if available == 0 { // All short IDs are used. return 0 , false } n := rng . Intn ( available ) var i PeerShortID for { if peers . byShortID [ i ] . peer == nil { if n == 0 { return i , true } n -- } i ++ } }
// Choose an available short ID at random.
Choose an available short ID at random .