Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Unified Diff: go/src/infra/libs/bit_field/bf.go

Issue 1153883002: go: infra/libs/* now live in luci-go. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: move the rest too Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « go/src/infra/libs/auth/service_test.go ('k') | go/src/infra/libs/bit_field/bf_test.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: go/src/infra/libs/bit_field/bf.go
diff --git a/go/src/infra/libs/bit_field/bf.go b/go/src/infra/libs/bit_field/bf.go
deleted file mode 100644
index 666374a21863e46942f71c1c0e755ee6fecbd564..0000000000000000000000000000000000000000
--- a/go/src/infra/libs/bit_field/bf.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2015 The Chromium 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 bf
-
-import (
- "fmt"
-)
-
-// BitField is a AppEngine-serializable bit field implementation. It should
-// be nice and fast for non-AppEngine use as well.
-//
-// You should construct a new one with bf.Make, rather than by direct
-// construction. The field names are public due to an appengine artifact.
-type BitField struct {
- // fields are public so that datastore can see them... but don't touch them if
- // you know what's good for you.
-
- // Data is the actual bits data. rightmost bit of 0th number is the first bit.
- Data []int64 `datastore:",noindex"`
-
- // NumBits is the number of bits held in this BitField. It's stored as a
- // casted uint64 since datastore can't store unsigned things, apparently.
- NumBits int64 `datastore:",noindex"`
-}
-
-// Make creates a new properly-initialized BitField.
-func Make(size uint64) BitField {
- return BitField{
- Data: make([]int64, (size+64-1)>>6),
- NumBits: int64(size),
- }
-}
-
-// Size returns the number of bits which this BitField can hold.
-func (bf BitField) Size() uint64 {
- return uint64(bf.NumBits)
-}
-
-// Set turns the given bit to true, regardless of its previous value. Error
-// returned is for bounds checking.
-func (bf BitField) Set(idx uint64) error {
- if idx >= bf.Size() {
- return fmt.Errorf("Cannot set bit %d in BitField of size %d", idx, bf.Size())
- }
- bf.Data[idx>>6] |= 1 << (idx % 64)
- return nil
-}
-
-// Clear turns the given bit to false, regardless of its previous value. Error
-// returned is for bounds checking.
-func (bf BitField) Clear(idx uint64) error {
- if idx >= bf.Size() {
- return fmt.Errorf("Cannot clear bit %d in BitField of size %d", idx, bf.Size())
- }
- bf.Data[idx>>6] &^= 1 << (idx % 64)
- return nil
-}
-
-// All returns true iff all of the bits are equal to `val`.
-func (bf BitField) All(val bool) bool {
- targ := bf.Size()
- if !val {
- targ = 0
- }
- return bf.CountSet() == targ
-}
-
-func countBitsSet(v uint64) uint8 {
- // https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
- const (
- maxUint64 = ^(uint64(0))
- eightyfives = maxUint64 / 3 // 0x555555...
- fiftyones = maxUint64 / 15 * 3 // 0x333333...
- fifteens = maxUint64 / 255 * 15 // 0x0f0f0f...
- ones = maxUint64 / 255 // 0x010101...
- offset = (64/8 - 1) * 8 // 56
- )
-
- v -= v >> 1 & eightyfives
- v = v&fiftyones + v>>2&fiftyones
- v = (v + v>>4) & fifteens
- return uint8(v * ones >> offset)
-}
-
-// CountSet returns the number of true bits.
-func (bf BitField) CountSet() uint64 {
- ret := uint64(0)
- for _, word := range bf.Data {
- if word != 0 {
- ret += uint64(countBitsSet(uint64(word)))
- }
- }
- return ret
-}
-
-// IsSet returns the value of a given bit.
-func (bf BitField) IsSet(idx uint64) bool {
- return idx < bf.Size() && ((bf.Data[idx>>6] & (1 << (idx % 64))) != 0)
-}
« no previous file with comments | « go/src/infra/libs/auth/service_test.go ('k') | go/src/infra/libs/bit_field/bf_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698