Compute NumUtil shifts and masks directly
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/c3cf1b37 Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/c3cf1b37 Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/c3cf1b37 Branch: refs/heads/master Commit: c3cf1b373fb7fa7d69b5937197de66ab8d84daa1 Parents: 1e30e5a Author: Nick Wellnhofer <[email protected]> Authored: Sat May 9 17:17:24 2015 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Tue May 12 19:57:45 2015 +0200 ---------------------------------------------------------------------- runtime/core/Clownfish/Util/NumberUtils.c | 34 ------------------------ runtime/core/Clownfish/Util/NumberUtils.cfh | 28 +++++++------------ 2 files changed, 10 insertions(+), 52 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3cf1b37/runtime/core/Clownfish/Util/NumberUtils.c ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Util/NumberUtils.c b/runtime/core/Clownfish/Util/NumberUtils.c deleted file mode 100644 index c76b4d9..0000000 --- a/runtime/core/Clownfish/Util/NumberUtils.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define C_CFISH_NUMBERUTILS -#define CFISH_USE_SHORT_NAMES - -#include <string.h> - -#include "Clownfish/Util/NumberUtils.h" - -const uint8_t NumUtil_u1masks[8] = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 -}; - -const uint8_t NumUtil_u2shifts[4] = { 0x0, 0x2, 0x4, 0x6 }; -const uint8_t NumUtil_u2masks[4] = { 0x3, 0xC, 0x30, 0xC0 }; - -const uint8_t NumUtil_u4shifts[2] = { 0x00, 0x04 }; -const uint8_t NumUtil_u4masks[2] = { 0x0F, 0xF0 }; - - http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3cf1b37/runtime/core/Clownfish/Util/NumberUtils.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Util/NumberUtils.cfh b/runtime/core/Clownfish/Util/NumberUtils.cfh index efab6cb..13b4a92 100644 --- a/runtime/core/Clownfish/Util/NumberUtils.cfh +++ b/runtime/core/Clownfish/Util/NumberUtils.cfh @@ -23,12 +23,6 @@ parcel Clownfish; */ inert class Clownfish::Util::NumberUtils nickname NumUtil { - inert const uint8_t[8] u1masks; - inert const uint8_t[4] u2masks; - inert const uint8_t[4] u2shifts; - inert const uint8_t[2] u4masks; - inert const uint8_t[2] u4shifts; - /** Encode an unsigned 16-bit integer as 2 bytes in the buffer provided, * using big-endian byte order. */ @@ -397,7 +391,7 @@ static CFISH_INLINE bool cfish_NumUtil_u1get(const void *array, uint32_t tick) { uint8_t *const u8bits = (uint8_t*)array; const uint32_t byte_offset = tick >> 3; - const uint8_t mask = cfish_NumUtil_u1masks[tick & 0x7]; + const uint8_t mask = 1 << (tick & 0x7); return !((u8bits[byte_offset] & mask) == 0); } @@ -405,7 +399,7 @@ static CFISH_INLINE void cfish_NumUtil_u1set(void *array, uint32_t tick) { uint8_t *const u8bits = (uint8_t*)array; const uint32_t byte_offset = tick >> 3; - const uint8_t mask = cfish_NumUtil_u1masks[tick & 0x7]; + const uint8_t mask = 1 << (tick & 0x7); u8bits[byte_offset] |= mask; } @@ -413,7 +407,7 @@ static CFISH_INLINE void cfish_NumUtil_u1clear(void *array, uint32_t tick) { uint8_t *const u8bits = (uint8_t*)array; const uint32_t byte_offset = tick >> 3; - const uint8_t mask = cfish_NumUtil_u1masks[tick & 0x7]; + const uint8_t mask = 1 << (tick & 0x7); u8bits[byte_offset] &= ~mask; } @@ -421,7 +415,7 @@ static CFISH_INLINE void cfish_NumUtil_u1flip(void *array, uint32_t tick) { uint8_t *const u8bits = (uint8_t*)array; const uint32_t byte_offset = tick >> 3; - const uint8_t mask = cfish_NumUtil_u1masks[tick & 0x7]; + const uint8_t mask = 1 << (tick & 0x7); u8bits[byte_offset] ^= mask; } @@ -429,16 +423,15 @@ static CFISH_INLINE uint8_t cfish_NumUtil_u2get(const void *array, uint32_t tick) { uint8_t *ints = (uint8_t*)array; uint8_t byte = ints[(tick >> 2)]; - int shift = cfish_NumUtil_u2shifts[tick & 0x3]; + int shift = 2 * (tick & 0x3); return (byte >> shift) & 0x3; } static CFISH_INLINE void cfish_NumUtil_u2set(void *array, uint32_t tick, uint8_t value) { uint8_t *ints = (uint8_t*)array; - unsigned sub_tick = tick & 0x3; - int shift = cfish_NumUtil_u2shifts[sub_tick]; - uint8_t mask = cfish_NumUtil_u2masks[sub_tick]; + int shift = 2 * (tick & 0x3); + uint8_t mask = 0x3 << shift; uint8_t new_val = value & 0x3; uint8_t new_bits = new_val << shift; ints[(tick >> 2)] = (ints[(tick >> 2)] & ~mask) | new_bits; @@ -449,16 +442,15 @@ static CFISH_INLINE uint8_t cfish_NumUtil_u4get(const void *array, uint32_t tick) { uint8_t *ints = (uint8_t*)array; uint8_t byte = ints[(tick >> 1)]; - int shift = cfish_NumUtil_u4shifts[(tick & 1)]; + int shift = 4 * (tick & 1); return (byte >> shift) & 0xF; } static CFISH_INLINE void cfish_NumUtil_u4set(void *array, uint32_t tick, uint8_t value) { uint8_t *ints = (uint8_t*)array; - unsigned sub_tick = tick & 0x1; - int shift = cfish_NumUtil_u4shifts[sub_tick]; - uint8_t mask = cfish_NumUtil_u4masks[sub_tick]; + int shift = 4 * (tick & 0x1); + uint8_t mask = 0xF << shift; uint8_t new_val = value & 0xF; uint8_t new_bits = new_val << shift; ints[(tick >> 1)] = (ints[(tick >> 1)] & ~mask) | new_bits;
