| #include "config.h" |
| #include <stdio.h> |
| #include <string.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. If ccan/endian/endian.h is included, |
| * 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 %zu%%, short %zu%%\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; |
| * } |
| * |
| * License: CC0 (Public domain) |
| * Author: Rusty Russell <rusty@rustcorp.com.au> |
| */ |
| int main(int argc, char *argv[]) |
| { |
| if (argc != 2) |
| return 1; |
| |
| if (strcmp(argv[1], "depends") == 0) { |
| return 0; |
| } |
| |
| if (strcmp(argv[1], "testdepends") == 0) { |
| printf("ccan/endian\n"); |
| return 0; |
| } |
| |
| return 1; |
| } |