chiark / gitweb /
cleanup: All the whitespace fixes, all at once.
[mLib] / bits.h
diff --git a/bits.h b/bits.h
index 4f8b582cf8775273decb53f2224f9863b01e21a7..1b9f4856a03b67c204477db1def486b027f6d0d3 100644 (file)
--- a/bits.h
+++ b/bits.h
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: bits.h,v 1.9 2001/01/20 12:05:20 mdw Exp $
+ * $Id$
  *
  * Portable bit-level manipulation macros
  *
  * (c) 1998 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of the mLib utilities library.
  *
  * it under the terms of the GNU Library General Public License as
  * published by the Free Software Foundation; either version 2 of the
  * License, or (at your option) any later version.
- * 
+ *
  * mLib is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Library General Public
  * License along with mLib; if not, write to the Free
  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: bits.h,v $
- * Revision 1.9  2001/01/20 12:05:20  mdw
- * New hack for storing 64-bit numbers in tables.
- *
- * Revision 1.8  2000/10/08 11:06:30  mdw
- * Shut later versions of GCC up about use of @long long@.
- *
- * Revision 1.7  2000/07/22 09:48:26  mdw
- * Added macros for reading 64-bit values.
- *
- * Revision 1.6  2000/07/16 12:28:28  mdw
- * Add 64-bit support, with faked arithmetic on 32-bit hosts.
- *
- * Revision 1.5  2000/06/17 10:36:06  mdw
- * Support for 24-bit types.
- *
- * Revision 1.4  1999/12/10 23:42:04  mdw
- * Change header file guard names.
- *
- * Revision 1.3  1999/06/20 23:31:52  mdw
- * More portability enhancements.
- *
- * Revision 1.2  1999/06/17 00:12:46  mdw
- * Improve portability for shift and rotate macros.
- *
- * Revision 1.1  1999/06/01 09:46:19  mdw
- * New addition: bit manipulation macros.
- *
- */
-
 #ifndef MLIB_BITS_H
 #define MLIB_BITS_H
 
  */
 
 typedef unsigned short uint16;
-typedef unsigned char octet;
+typedef unsigned char octet, uint8;
 
 /* --- WARNING! --- *
  *
@@ -158,11 +126,76 @@ typedef unsigned char octet;
 
 #define MASK8 0xffu
 #define MASK16 0xffffu
+#define MASK16_L MASK16
+#define MASK16_B MASK16
 #define MASK24 0xffffffu
+#define MASK24_L MASK24
+#define MASK24_B MASK24
 #define MASK32 0xffffffffu
+#define MASK32_L MASK32
+#define MASK32_B MASK32
 
 #ifdef HAVE_UINT64
 #  define MASK64 MLIB_BITS_EXTENSION 0xffffffffffffffffu
+#  define MASK64_L MASK64
+#  define MASK64_B MASK64
+#endif
+
+/* --- Sizes --- */
+
+#define SZ_8 1
+#define SZ_16 2
+#define SZ_16_L 2
+#define SZ_16_B 2
+#define SZ_24 3
+#define SZ_24_L 3
+#define SZ_24_B 3
+#define SZ_32 4
+#define SZ_32_L 4
+#define SZ_32_B 4
+
+#ifdef HAVE_UINT64
+#  define SZ_64 8
+#  define SZ_64_L 8
+#  define SZ_64_B 8
+#endif
+
+/* --- Type aliases --- */
+
+#define TY_U8 octet
+#define TY_U16 uint16
+#define TY_U16_L uint16
+#define TY_U16_B uint16
+#define TY_U24 uint24
+#define TY_U24_L uint24
+#define TY_U24_B uint24
+#define TY_U32 uint32
+#define TY_U32_L uint32
+#define TY_U32_B uint32
+
+#ifdef HAVE_UINT64
+#  define TY_U64 uint64
+#  define TY_U64_L uint64
+#  define TY_U64_B uint64
+#endif
+
+/* --- List macros --- */
+
+#ifdef HAVE_UINT64
+#  define  DOUINTCONV(_)                                               \
+     _(8, 8, 8)                                                                \
+     _(16, 16, 16) _(16, 16_L, 16l) _(16, 16_B, 16b)                   \
+     _(24, 24, 24) _(24, 24_L, 24l) _(24, 24_B, 24b)                   \
+     _(32, 32, 32) _(32, 32_L, 32l) _(32, 32_B, 32b)                   \
+     _(64, 64, 64) _(64, 64_L, 64l) _(64, 64_B, 64b)
+#  define DOUINTSZ(_) _(8) _(16) _(24) _(32) _(64)
+#else
+#  define  DOUINTCONV(_)                                               \
+     _(8, 8, 8)                                                                \
+     _(16, 16, 16) _(16, 16_L, 16l) _(16, 16_B, 16b)                   \
+     _(24, 24, 24) _(24, 24_L, 24l) _(24, 24_B, 24b)                   \
+     _(32, 32, 32) _(32, 32_L, 32l) _(32, 32_B, 32b)
+#  define DOUINTSZ(_) _(8) _(16) _(24) _(32)
 #endif
 
 /* --- Type coercions --- */
@@ -249,12 +282,15 @@ typedef unsigned char octet;
      unsigned _s = (s) & 63u;                                          \
      uint32 _l = (v).lo, _h = (v).hi;                                  \
      kludge64 *_d = &(d);                                              \
-     if (_s >= 32) {                                                   \
+     if (_s > 32) {                                                    \
        _d->hi = LSL32(_l, _s - 32u) | LSR32(_h, 64u - _s);             \
        _d->lo = LSL32(_h, _s - 32u) | LSR32(_l, 64u - _s);             \
      } else if (!_s) {                                                 \
        _d->lo = _l;                                                    \
        _d->hi = _h;                                                    \
+     } else if (_s == 32) {                                            \
+       _d->lo = _h;                                                    \
+       _d->hi = _l;                                                    \
      } else {                                                          \
        _d->hi = LSL32(_h, _s) | LSR32(_l, 32u - _s);                   \
        _d->lo = LSL32(_l, _s) | LSR32(_h, 32u - _s);                   \
@@ -264,12 +300,15 @@ typedef unsigned char octet;
      unsigned _s = (s) & 63u;                                          \
      uint32 _l = (v).lo, _h = (v).hi;                                  \
      kludge64 *_d = &(d);                                              \
-     if (_s >= 32) {                                                   \
+     if (_s > 32) {                                                    \
        _d->hi = LSR32(_l, _s - 32u) | LSL32(_h, 64u - _s);             \
        _d->lo = LSR32(_h, _s - 32u) | LSL32(_l, 64u - _s);             \
      } else if (!_s) {                                                 \
        _d->lo = _l;                                                    \
        _d->hi = _h;                                                    \
+     } else if (_s == 32) {                                            \
+       _d->lo = _h;                                                    \
+       _d->hi = _l;                                                    \
      } else {                                                          \
        _d->hi = LSR32(_h, _s) | LSL32(_l, 32u - _s);                   \
        _d->lo = LSR32(_l, _s) | LSL32(_h, 32u - _s);                   \
@@ -303,11 +342,11 @@ typedef unsigned char octet;
 
 #define LOAD24_B(p)                                                    \
   (((uint24)GETBYTE((p), 0) << 16) |                                   \
-   ((uint24)GETBYTE((p), 1) <<  8) |                                   \
-   ((uint24)GETBYTE((p), 2) <<  0))
+   ((uint24)GETBYTE((p), 1) << 8) |                                    \
+   ((uint24)GETBYTE((p), 2) << 0))
 #define LOAD24_L(p)                                                    \
-  (((uint24)GETBYTE((p), 0) <<  0) |                                   \
-   ((uint24)GETBYTE((p), 1) <<  8) |                                   \
+  (((uint24)GETBYTE((p), 0) << 0) |                                    \
+   ((uint24)GETBYTE((p), 1) << 8) |                                    \
    ((uint24)GETBYTE((p), 2) << 16))
 #define LOAD24(p) LOAD24_B((p))
 
@@ -324,11 +363,11 @@ typedef unsigned char octet;
 #define LOAD32_B(p)                                                    \
   (((uint32)GETBYTE((p), 0) << 24) |                                   \
    ((uint32)GETBYTE((p), 1) << 16) |                                   \
-   ((uint32)GETBYTE((p), 2) <<  8) |                                   \
-   ((uint32)GETBYTE((p), 3) <<  0))
+   ((uint32)GETBYTE((p), 2) << 8) |                                    \
+   ((uint32)GETBYTE((p), 3) << 0))
 #define LOAD32_L(p)                                                    \
-  (((uint32)GETBYTE((p), 0) <<  0) |                                   \
-   ((uint32)GETBYTE((p), 1) <<  8) |                                   \
+  (((uint32)GETBYTE((p), 0) << 0) |                                    \
+   ((uint32)GETBYTE((p), 1) << 8) |                                    \
    ((uint32)GETBYTE((p), 2) << 16) |                                   \
    ((uint32)GETBYTE((p), 3) << 24))
 #define LOAD32(p) LOAD32_B((p))
@@ -466,7 +505,7 @@ typedef unsigned char octet;
 #else
 #  define X64(x, y) { 0x##x, 0x##y }
 #endif
-    
+
 /*----- That's all, folks -------------------------------------------------*/
 
 #ifdef __cplusplus