Merge branch 'io'
[ccan] / ccan / short_types / _info
1 #include <stdio.h>
2 #include <string.h>
3 #include "config.h"
4
5 /**
6  * short_types - shorter names for standard integer types
7  *
8  * "C is a Spartan language, and so should your naming be."
9  *      -- Linus Torvalds
10  *
11  * The short_types header provides for convenient abbreviations for the
12  * posixly-damned uint32_t types.  If ccan/endian/endian.h is included,
13  * it also provides be32/le32 for explicitly annotating types of specific
14  * endian.
15  *
16  * Include this header, if only to stop people using these identifiers
17  * for other things!
18  *
19  * Example:
20  *      #include <stdint.h>
21  *      #include <string.h>
22  *      #include <stdio.h>
23  *      #include <ccan/short_types/short_types.h>
24  *      
25  *      // Print nonsensical numerical comparison of POSIX vs. short_types. 
26  *      #define stringify_1(x)  #x
27  *      #define stringify(x)    stringify_1(x)
28  *      
29  *      static void evaluate(size_t size, const char *posix, const char *sht,
30  *                           unsigned int *posix_total, unsigned int *sht_total,
31  *                           unsigned int *size_total)
32  *      {
33  *              printf("\t%ssigned %s: POSIX %zu%%, short %zu%%\n",
34  *                     sht[0] == 'u' ? "un" : "",
35  *                     sht+1,
36  *                     strlen(posix)*100 / size,
37  *                     strlen(sht)*100 / size);
38  *              *posix_total += strlen(posix);
39  *              *sht_total += strlen(sht);
40  *              *size_total += size;
41  *      }
42  *
43  *      #define EVALUATE(psx, short, pt, st, t)                         \
44  *              evaluate(sizeof(psx), stringify(psx), stringify(sht), pt, st, t)
45  *
46  *      int main(void)
47  *      {
48  *              unsigned int posix_total = 0, sht_total = 0, size_total = 0;
49  *
50  *              printf("Comparing size of type vs size of name:\n");
51  *
52  *              EVALUATE(uint8_t, u8, &posix_total, &sht_total, &size_total);
53  *              EVALUATE(int8_t, s8, &posix_total, &sht_total, &size_total);
54  *              EVALUATE(uint16_t, u16, &posix_total, &sht_total, &size_total);
55  *              EVALUATE(int16_t, s16, &posix_total, &sht_total, &size_total);
56  *              EVALUATE(uint32_t, u32, &posix_total, &sht_total, &size_total);
57  *              EVALUATE(int32_t, s32, &posix_total, &sht_total, &size_total);
58  *              EVALUATE(uint64_t, u64, &posix_total, &sht_total, &size_total);
59  *              EVALUATE(int64_t, s64, &posix_total, &sht_total, &size_total);
60  *
61  *              printf("Conclusion:\n"
62  *                     "\tPOSIX is %u%% LESS efficient than binary.\n"
63  *                     "\tshort_types.h is %u%% MORE efficient than binary.\n",
64  *                     (posix_total - size_total) * 100 / size_total,
65  *                     (size_total - sht_total) * 100 / size_total);
66  *              return 0;
67  *      }
68  *
69  * License: CC0 (Public domain)
70  * Author: Rusty Russell <rusty@rustcorp.com.au>
71  */
72 int main(int argc, char *argv[])
73 {
74         if (argc != 2)
75                 return 1;
76
77         if (strcmp(argv[1], "depends") == 0) {
78                 return 0;
79         }
80
81         if (strcmp(argv[1], "testdepends") == 0) {
82                 printf("ccan/endian\n");
83                 return 0;
84         }
85
86         return 1;
87 }