]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/test_and_benchmark/benchmark/src/util_cmdline.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / test_and_benchmark / benchmark / src / util_cmdline.h
1 /***** includes *****/
2 #include <ctype.h>
3
4 /***** defines *****/
5 #define NUMBER_OF_LOWERCASE_LETTERS_IN_LATIN_ALPHABET 26
6
7 /***** enums *****/
8 enum util_cmdline_arg_type
9 {
10   UTIL_CMDLINE_ARG_TYPE_INTEGER_RANGE,
11   UTIL_CMDLINE_ARG_TYPE_INTEGER,
12   UTIL_CMDLINE_ARG_TYPE_FLAG,
13   UTIL_CMDLINE_ARG_TYPE_STRING,
14   UTIL_CMDLINE_ARG_TYPE_UNSET
15 };
16
17 /***** structs *****/
18 struct util_cmdline_arg_integer_range
19 {
20   int long long unsigned
21     integer_start,
22     integer_end;
23 };
24
25 struct util_cmdline_arg_integer
26 {
27   int long long unsigned
28     integer;
29 };
30
31 struct util_cmdline_arg_flag
32 {
33   enum flag
34     flag;
35 };
36
37 struct util_cmdline_arg_string
38 {
39   char
40     *string;
41 };
42
43 union util_cmdline_arg_data
44 {
45   struct util_cmdline_arg_integer_range
46     integer_range;
47
48   struct util_cmdline_arg_integer
49     integer;
50
51   struct util_cmdline_arg_flag
52     flag;
53
54   struct util_cmdline_arg_string
55     string;
56 };
57
58 struct util_cmdline_arg_letter_and_data
59 {
60   enum util_cmdline_arg_type
61     arg_type;
62
63   enum flag
64     processed_flag;
65
66   union util_cmdline_arg_data
67     arg_data;
68 };
69
70 struct util_cmdline_state
71 {
72   struct util_cmdline_arg_letter_and_data
73     args[NUMBER_OF_LOWERCASE_LETTERS_IN_LATIN_ALPHABET];
74 };
75
76 /***** public protoypes *****/
77 void util_cmdline_init( struct util_cmdline_state *cs );
78 void util_cmdline_cleanup( struct util_cmdline_state *cs );
79 void util_cmdline_add_arg( struct util_cmdline_state *cs, char arg_letter, enum util_cmdline_arg_type arg_type );
80 int  util_cmdline_process_args( struct util_cmdline_state *cs, int argc, char **argv );
81 void util_cmdline_get_arg_data( struct util_cmdline_state *cs, char arg_letter, union util_cmdline_arg_data **arg_data );
82