Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MATH_OP(n, exp) template<UINT a, UINT b> struct n { enum { value = (exp) }; }
- #define LOG_OP(n, exp) template<UINT x> struct n { enum { value = (exp) }; }
- MATH_OP(And, a & b);
- MATH_OP(Add, a + b);
- MATH_OP(RSh, a >> b);
- MATH_OP(OrRSh, a | (a >> b));
- MATH_OP(AddRSh, a + (a >> b));
- LOG_OP(Log2Line01, (OrRSh<x, 1>::value));
- LOG_OP(Log2Line02, (OrRSh<x, 2>::value));
- LOG_OP(Log2Line03, (OrRSh<x, 4>::value));
- LOG_OP(Log2Line04, (OrRSh<x, 8>::value));
- LOG_OP(Log2Line05, (OrRSh<x, 16>::value));
- LOG_OP(Log2Line06, (RSh<x, 1>::value));
- LOG_OP(Log2Line07, (x - ((x >> 1) & 0x55555555)));
- LOG_OP(Log2Line08, (((x >> 2) & 0x33333333) + (x & 0x33333333)));
- LOG_OP(Log2Line09, (((x >> 4) + x) & 0x0f0f0f0f));
- LOG_OP(Log2Line10, (AddRSh<x, 8>::value));
- LOG_OP(Log2Line11, (AddRSh<x, 16>::value));
- LOG_OP(Log2Line12, (x & 63));
- template<UINT x> struct Log2Const
- {
- enum
- {
- value =
- Log2Line12<
- Log2Line11<
- Log2Line10<
- Log2Line09<
- Log2Line08<
- Log2Line07<
- Log2Line06<
- Log2Line05<
- Log2Line04<
- Log2Line03<
- Log2Line02<
- Log2Line01<x>::value
- >::value
- >::value
- >::value
- >::value
- >::value
- >::value
- >::value
- >::value
- >::value
- >::value
- >::value
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement