Для очень простого и эффективного подхода используйте 256-байтовую таблицу поиска и выполните 2 поиска:
extern unsigned char const xtable[256];
unsigned int ref = 4149;
unsigned int rev = (xtable[ref & 0xFF] << 8) | xtable[ref >> 8];
Массив xtable
можно статически инициализировать с помощью набора макросов:
#define S(x) ((((x) & 0x0003) << 14) | (((x) & 0x000C) << 10) | \
(((x) & 0x0030) << 6) | (((x) & 0x00C0) << 2) | \
(((x) & 0xC000) >> 14) | (((x) & 0x3000) >> 10) | \
(((x) & 0x0C00) >> 6) | (((x) & 0x0300) >> 2))
#define X8(m,n) m((n)+0), m((n)+1), m((n)+2), m((n)+3), \
m((n)+4), m((n)+5), m((n)+6), m((n)+7)
#define X32(m,n) X8(m,(n)), X8(m,(n)+8), X8(m,(n)+16), X8(m,(n)+24)
unsigned char const xtable[256] = {
X32(S, 0), X32(S, 32), X32(S, 64), X32(S, 96),
X32(S, 128), X32(S, 160), X32(S, 192), X32(S, 224),
};
#undef S
#undef X8
#undef X32
Если пространство не дорого, вы можете использовать один просмотр таблицы размером 128 КБ, которую вы будете вычислять во время запуска или генерировать с помощью скрипта и включать во время компиляции, но это несколько расточительно и не очень кэш удобно.
Текущая версия boost :: mutex
не использует ни Win32 CRITICAL_SECTION
, ни Win32 Mutex. Вместо этого он использует атомарные операции и событие Win32 для блокировки ожидания.
Старые версии (boost 1.34.1 и ранее) были оболочкой вокруг CRITICAL_SECTION
в Windows.
Между прочим, сам мьютекс является не ограничен. Тип boost :: mutex :: scoped_lock
и, в последних версиях, boost :: lock_guard
и boost :: unique_lock
предоставляют оболочки RAII для блокировки мьютекса, чтобы вы не забыли его разблокировать.
boost :: lock_guard <>
и boost :: unique_lock <>
CRITICAL_SECTION Win32 может использоваться только среди потоков одного процесса . Если вам нужно использовать что-то между процессами, вам понадобится мьютекс. Boost ничего не говорит о критических секциях, поэтому я предполагаю, что он использует мьютексы.
"scoped" просто означает, что у него есть оболочка, которая использует RAII для автоматической разблокировки мьютекса в конце определенной области.