|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2020 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: #pragma once ! 8: ! 9: #include "header.h" ! 10: ! 11: extern const uint8 bitrev_table[256]; ! 12: ! 13: // 8ビットを左右反転する (定数用) ! 14: static constexpr uint8 _rev8(uint8 x) ! 15: { ! 16: x = ((x & 0x0f) << 4) | ((x >> 4) & 0x0f); ! 17: x = ((x & 0x33) << 2) | ((x >> 2) & 0x33); ! 18: x = ((x & 0x55) << 1) | ((x >> 1) & 0x55); ! 19: return x; ! 20: } ! 21: ! 22: // 8ビットを左右反転する (実行時用) ! 23: static inline uint8 ! 24: bitrev(uint8 x) ! 25: { ! 26: return bitrev_table[x]; ! 27: } ! 28: ! 29: // mask で指定したいずれかのビットが 0 -> 1 に変化したら true ! 30: static constexpr bool ! 31: bit_rising(uint before, uint after, uint mask) ! 32: { ! 33: // before が 0 で mask が 1 のビットだけを立てる ! 34: // それが 1 で after が 1 なら立ち上がり ! 35: return (~before & mask) & after; ! 36: } ! 37: ! 38: // mask で指定したいずれかのビットが 1 -> 0 に変化したら true ! 39: static constexpr bool ! 40: bit_falling(uint before, uint after, uint mask) ! 41: { ! 42: // before が 1 で mask が 1 のビットだけを立てる ! 43: // それが 1 で after が 0 なら立ち下がり ! 44: return (before & mask) & ~after; ! 45: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.