| Index: base/bits.h
|
| ===================================================================
|
| --- base/bits.h (revision 0)
|
| +++ base/bits.h (revision 0)
|
| @@ -0,0 +1,47 @@
|
| +// Copyright (c) 2009 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.
|
| +
|
| +// This file defines some bit utilities.
|
| +
|
| +#ifndef BASE_BITS_H_
|
| +#define BASE_BITS_H_
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/logging.h"
|
| +
|
| +namespace base {
|
| +namespace bits {
|
| +
|
| +// Returns the integer i such as 2^i <= n < 2^(i+1)
|
| +inline int Log2Floor(uint32 n) {
|
| + if (n == 0)
|
| + return -1;
|
| + int log = 0;
|
| + uint32 value = n;
|
| + for (int i = 4; i >= 0; --i) {
|
| + int shift = (1 << i);
|
| + uint32 x = value >> shift;
|
| + if (x != 0) {
|
| + value = x;
|
| + log += shift;
|
| + }
|
| + }
|
| + DCHECK_EQ(value, 1u);
|
| + return log;
|
| +}
|
| +
|
| +// Returns the integer i such as 2^(i-1) < n <= 2^i
|
| +inline int Log2Ceiling(uint32 n) {
|
| + if (n == 0) {
|
| + return -1;
|
| + } else {
|
| + // Log2Floor returns -1 for 0, so the following works correctly for n=1.
|
| + return 1 + Log2Floor(n - 1);
|
| + }
|
| +}
|
| +
|
| +} // namespace bits
|
| +} // namespace base
|
| +
|
| +#endif // BASE_BITS_H_
|
|
|
| Property changes on: base\bits.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|