⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitindex.h

📁 hoard内存管理器
💻 H
字号:
/* -*- C++ -*- *//** * @file bitindex.h * * Bit-access operations, including msb and lsb. * @author Emery Berger (emery@cs.umass.edu)*/// lsb is due to Leiserson, Prokop, Randall (MIT).// msb is also a fast implementation of floor(lg_2).#ifndef _BITINDEX_H_#define _BITINDEX_H_#include <assert.h>namespace HL {class BitIndex {private:    enum { debruijn32 = 0x077CB531UL };  static int index32[32];  static unsigned long lgtable[16];  static unsigned long on[32];  static unsigned long off[32];  void setup (void);public:  BitIndex (void);  ~BitIndex (void) {}  // Set bit_index in b (to 1).  static void set (unsigned long &b, int index)    {      assert (index >= 0);      assert (index < 32);      b |= on[index];    }  // Reset bit_index in b (set it to 0).  static void reset (unsigned long &b, int index)    {      assert (index >= 0);      assert (index < 32);      b &= off[index];    }  // Find the least-significant bit.  static int lsb (unsigned long b)    {      //#if 0#if 0 // i386      // Intel x86 code.      register unsigned long index = 0;      if (b > 0) {	asm ("bsfl %1, %0" : "=r" (index) : "r" (b));      }      return index;#else      b &= (unsigned long) -((signed long) b);      b *= debruijn32;      b >>= 27;      return index32[b];#endif    }  // Find the most-significant bit.  static int msb (unsigned long b)    {#if 0 // i386      // Intel x86 code.      register unsigned long index = 0;      if (b > 0) {	asm ("bsrl %1, %0" : "=r" (index) : "r" (b));      }      return index;#else      int l = 0;      // b < 2^32      if (b >= 65536) {	l += 16;	b >>= 16;      }      // b < 2^16      if (b >= 256) {	l += 8;	b >>= 8;      }      // b < 2^8      if (b >= 16) {	l += 4;	b >>= 4;      }      return l + lgtable[b];#endif    }  };};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -