summaryrefslogtreecommitdiffstats
path: root/src/hdf5meta.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/hdf5meta.h')
-rw-r--r--src/hdf5meta.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/hdf5meta.h b/src/hdf5meta.h
new file mode 100644
index 0000000..025b4e6
--- /dev/null
+++ b/src/hdf5meta.h
@@ -0,0 +1,145 @@
+/****************************************************************************
+ * NCSA HDF *
+ * Software Development Group *
+ * National Center for Supercomputing Applications *
+ * University of Illinois at Urbana-Champaign *
+ * 605 E. Springfield, Champaign IL 61820 *
+ * *
+ * For conditions of distribution and use, see the accompanying *
+ * hdf/COPYING file. *
+ * *
+ ****************************************************************************/
+
+/* $Id$ */
+
+/*
+ * This file contains macros & information for file meta information
+ * (offsets, lengths, etc.)
+ */
+
+#ifndef HDF5META_H
+#define HDF5META_H
+
+/*-----------------------------------------------------*/
+/* Encode and decode macros for file meta-data */
+/* (Currently, all file meta-data is little-endian) */
+/*-----------------------------------------------------*/
+
+/* For non-little-endian platforms, encode each byte by itself */
+#if ((DF_MT&0xFFF0)!=0x4440)
+# define INT16ENCODE(p, i) \
+{ *(p) = (uint8)((uintn)(i) & 0xff); (p)++; *(p) = (uint8)(((uintn)(i) >> 8) & 0xff); (p)++; }
+
+# define UINT16ENCODE(p, i) \
+{ *(p) = (uint8)((i) & 0xff); (p)++; *(p) = (uint8)(((uintn)(i) >> 8) & 0xff); (p)++; }
+
+# define INT32ENCODE(p, i) \
+{ *(p) = (uint8)((uint32)(i) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint32)(i) >> 8) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint32)(i) >> 16) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint32)(i) >> 24) & 0xff); (p)++; }
+
+# define UINT32ENCODE(p, i) \
+{ *(p) = (uint8)((i) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 8) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 16) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 24) & 0xff); (p)++; }
+#ifdef HDF5_HAVE_NATIVE_INT64
+# define INT64ENCODE(p, i) \
+{ *(p) = (uint8)((uint64)(i) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 8) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 16) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 24) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 32) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 40) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 48) & 0xff); (p)++; \
+ *(p) = (uint8)(((uint64)(i) >> 56) & 0xff); (p)++; }
+
+# define UINT64ENCODE(p, i) \
+{ *(p) = (uint8)((i) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 8) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 16) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 24) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 32) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 40) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 48) & 0xff); (p)++; \
+ *(p) = (uint8)(((i) >> 56) & 0xff); (p)++; }
+#else /* HDF5_HAVE_NATIVE_INT64 */
+#error "Define int64 on platforms which don't support it"
+#endif /* HDF5_HAVE_NATIVE_INT64 */
+
+# define INT16DECODE(p, i) \
+{ (i) = (int16)((*(p) & 0xff)); (p)++; \
+ (i) |= (int16)((*(p) & 0xff) << 8); (p)++; }
+
+# define UINT16DECODE(p, i) \
+{ (i) = (uint16)(*(p) & 0xff); (p)++; \
+ (i) |= (uint16)((*(p) & 0xff) << 8); (p)++; }
+
+# define INT32DECODE(p, i) \
+{ (i) = (*(p) & 0xff); (p)++; \
+ (i) |= ((int32)(*(p) & 0xff) << 8); (p)++; \
+ (i) |= ((int32)(*(p) & 0xff) << 16); (p)++; \
+ (i) |= ((int32)(*(p) & 0xff) << 24); (p)++; }
+
+# define UINT32DECODE(p, i) \
+{ (i) = (uint32)(*(p) & 0xff); (p)++; \
+ (i) |= ((uint32)(*(p) & 0xff) << 8); (p)++; \
+ (i) |= ((uint32)(*(p) & 0xff) << 16); (p)++; \
+ (i) |= ((uint32)(*(p) & 0xff) << 24); (p)++; }
+
+#ifdef HDF5_HAVE_NATIVE_INT64
+#define INT64DECODE(p, i) \
+{ (i) = (*(p) & 0xff); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 8); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 16); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 24); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 32); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 40); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 48); (p)++; \
+ (i) |= ((int64)(*(p) & 0xff) << 56); (p)++; }
+
+# define UINT64DECODE(p, i) \
+{ (i) = (uint64)(*(p) & 0xff); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 8); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 16); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 24); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 32); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 40); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 48); (p)++; \
+ (i) |= ((uint64)(*(p) & 0xff) << 56); (p)++; }
+#else /* HDF5_HAVE_NATIVE_INT64 */
+#error "Define int64 on platforms which don't support it"
+#endif /* HDF5_HAVE_NATIVE_INT64 */
+#else /* platform has little-endian integers */
+/* For little-endian platforms, make the compiler do the work */
+# define INT16ENCODE(p, i) { *((int16 *)(p)) = (int16)(i); (p)+=2; }
+# define UINT16ENCODE(p, i) { *((uint16 *)(p)) = (uint16)(i); (p)+=2; }
+# define INT32ENCODE(p, i) { *((int32 *)(p)) = (int32)(i); (p)+=4; }
+# define UINT32ENCODE(p, i) { *((uint32 *)(p)) = (uint32)(i); (p)+=4; }
+#ifdef HDF5_HAVE_NATIVE_INT64
+# define INT64ENCODE(p, i) { *((int64 *)(p)) = (int64)(i); (p)+=8; }
+# define UINT64ENCODE(p, i) { *((uint64 *)(p)) = (uint64)(i); (p)+=8; }
+#else /* HDF5_HAVE_NATIVE_INT64 */
+#error "Define int64 on platforms which don't support it"
+#endif /* HDF5_HAVE_NATIVE_INT64 */
+# define INT16DECODE(p, i) { (i) = (int16)(*(int16 *)(p)); (p)+=2; }
+# define UINT16DECODE(p, i) { (i) = (uint16)(*(uint16 *)(p)); (p)+=2; }
+# define INT32DECODE(p, i) { (i) = (int32)(*(int32 *)(p)); (p)+=4; }
+# define UINT32DECODE(p, i) { (i) = (uint32)(*(uint32 *)(p)); (p)+=4; }
+#ifdef HDF5_HAVE_NATIVE_INT64
+# define INT64DECODE(p, i) { (i) = (int64)(*(int64 *)(p)); (p)+=8; }
+# define UINT64DECODE(p, i) { (i) = (uint64)(*(uint64 *)(p)); (p)+=8; }
+#else /* HDF5_HAVE_NATIVE_INT64 */
+#error "Define int64 on platforms which don't support it"
+#endif /* HDF5_HAVE_NATIVE_INT64 */
+#endif
+
+# define NBYTEENCODE(d, s, n) { HDmemcpy(d,s,n); p+=n }
+
+/* Note! the NBYTEDECODE macro is backwards from the memcpy() routine, */
+/* in the spirit of the other DECODE macros */
+# define NBYTEDECODE(s, d, n) { HDmemcpy(d,s,n); p+=n }
+
+#endif /* HDF5I_H */
+