]> git.ozlabs.org Git - ccan/blobdiff - ccan/short_types/_info
Short types
[ccan] / ccan / short_types / _info
diff --git a/ccan/short_types/_info b/ccan/short_types/_info
new file mode 100644 (file)
index 0000000..bc69b1b
--- /dev/null
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <string.h>
+#include "config.h"
+
+/**
+ * short_types - shorter names for standard integer types
+ *
+ * "C is a Spartan language, and so should your naming be."
+ *     -- Linus Torvalds
+ *
+ * The short_types header provides for convenient abbreviations for the
+ * posixly-damned uint32_t types.  It also provides be32/le32 for explicitly
+ * annotating types of specific endian.
+ *
+ * Include this header, if only to stop people using these identifiers
+ * for other things!
+ *
+ * Example:
+ *     #include <stdint.h>
+ *     #include <string.h>
+ *     #include <stdio.h>
+ *     #include <ccan/short_types/short_types.h>
+ *     
+ *     // Print nonsensical numerical comparison of POSIX vs. short_types. 
+ *     #define stringify_1(x)  #x
+ *     #define stringify(x)    stringify_1(x)
+ *     
+ *     static void evaluate(size_t size, const char *posix, const char *sht,
+ *                          unsigned int *posix_total, unsigned int *sht_total,
+ *                          unsigned int *size_total)
+ *     {
+ *             printf("\t%ssigned %s: POSIX %i%%, short %i%%\n",
+ *                    sht[0] == 'u' ? "un" : "",
+ *                    sht+1,
+ *                    strlen(posix)*100 / size,
+ *                    strlen(sht)*100 / size);
+ *             *posix_total += strlen(posix);
+ *             *sht_total += strlen(sht);
+ *             *size_total += size;
+ *     }
+ *
+ *     #define EVALUATE(psx, short, pt, st, t)                         \
+ *             evaluate(sizeof(psx), stringify(psx), stringify(sht), pt, st, t)
+ *
+ *     int main(void)
+ *     {
+ *             unsigned int posix_total = 0, sht_total = 0, size_total = 0;
+ *
+ *             printf("Comparing size of type vs size of name:\n");
+ *
+ *             EVALUATE(uint8_t, u8, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(int8_t, s8, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(uint16_t, u16, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(int16_t, s16, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(uint32_t, u32, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(int32_t, s32, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(uint64_t, u64, &posix_total, &sht_total, &size_total);
+ *             EVALUATE(int64_t, s64, &posix_total, &sht_total, &size_total);
+ *
+ *             printf("Conclusion:\n"
+ *                    "\tPOSIX is %u%% LESS efficient than binary.\n"
+ *                    "\tshort_types.h is %u%% MORE efficient than binary.\n",
+ *                    (posix_total - size_total) * 100 / size_total,
+ *                    (size_total - sht_total) * 100 / size_total);
+ *             return 0;
+ *     }
+ *
+ * Licence: LGPL (2 or any later version)
+ */
+int main(int argc, char *argv[])
+{
+       if (argc != 2)
+               return 1;
+
+       if (strcmp(argv[1], "depends") == 0) {
+               return 0;
+       }
+
+       return 1;
+}