// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package intsets

var a [1 << 8]byte

func init() {
	for i := range a {
		var n byte
		for x := i; x != 0; x >>= 1 {
			if x&1 != 0 {
				n++
			}
		}
		a[i] = n
	}
}

// popcount returns the population count (number of set bits) of x.
func popcount(x word) int {
	return int(a[byte(x>>(0*8))] +
		a[byte(x>>(1*8))] +
		a[byte(x>>(2*8))] +
		a[byte(x>>(3*8))] +
		a[byte(x>>(4*8))] +
		a[byte(x>>(5*8))] +
		a[byte(x>>(6*8))] +
		a[byte(x>>(7*8))])
}

// nlz returns the number of leading zeros of x.
// From Hacker's Delight, fig 5.11.
func nlz(x word) int {
	x |= (x >> 1)
	x |= (x >> 2)
	x |= (x >> 4)
	x |= (x >> 8)
	x |= (x >> 16)
	x |= (x >> 32)
	return popcount(^x)
}

// ntz returns the number of trailing zeros of x.
// From Hacker's Delight, fig 5.13.
func ntz(x word) int {
	if x == 0 {
		return bitsPerWord
	}
	n := 1
	if bitsPerWord == 64 {
		if (x & 0xffffffff) == 0 {
			n = n + 32
			x = x >> 32
		}
	}
	if (x & 0x0000ffff) == 0 {
		n = n + 16
		x = x >> 16
	}
	if (x & 0x000000ff) == 0 {
		n = n + 8
		x = x >> 8
	}
	if (x & 0x0000000f) == 0 {
		n = n + 4
		x = x >> 4
	}
	if (x & 0x00000003) == 0 {
		n = n + 2
		x = x >> 2
	}
	return n - int(x&1)
}
