PARSER. Field 2 in ARGP. Order of parameters: KEY, ARG, STATE. */
| 120 | Order of parameters: KEY, ARG, STATE. |
| 121 | */ |
| 122 | static error_t parse_opt(int key, char *arg, struct argp_state *state) { |
| 123 | struct arguments *arguments = |
| 124 | reinterpret_cast<struct arguments *>(state->input); |
| 125 | |
| 126 | switch (key) { |
| 127 | case OPTION_TRACE_TYPE_PARAMS: |
| 128 | arguments->trace_type_params = arg; |
| 129 | break; |
| 130 | case OPTION_OUTPUT_PATH: |
| 131 | strncpy(arguments->ofilepath, arg, OFILEPATH_LEN - 1); |
| 132 | arguments->ofilepath[OFILEPATH_LEN - 1] = '\0'; |
| 133 | break; |
| 134 | case OPTION_NUM_REQ: |
| 135 | arguments->n_req = atoll(arg); |
| 136 | break; |
| 137 | case OPTION_TIME_WINDOW: |
| 138 | arguments->analysis_param.time_window = atoi(arg); |
| 139 | break; |
| 140 | case OPTION_WARMUP_SEC: |
| 141 | arguments->analysis_param.warmup_time = atoi(arg); |
| 142 | break; |
| 143 | case OPTION_ACCESS_PATTERN_SAMPLE_RATIO: |
| 144 | arguments->analysis_param.access_pattern_sample_ratio = atof(arg); |
| 145 | arguments->analysis_param.access_pattern_sample_ratio_inv = |
| 146 | (int)(1.0 / arguments->analysis_param.access_pattern_sample_ratio) + |
| 147 | 1; |
| 148 | break; |
| 149 | case OPTION_TRACK_N_HIT: |
| 150 | arguments->analysis_param.track_n_hit = atoi(arg); |
| 151 | break; |
| 152 | case OPTION_ENABLE_ALL: |
| 153 | arguments->analysis_option.req_rate = true; |
| 154 | arguments->analysis_option.access_pattern = true; |
| 155 | arguments->analysis_option.size = true; |
| 156 | arguments->analysis_option.reuse = true; |
| 157 | arguments->analysis_option.popularity = true; |
| 158 | arguments->analysis_option.popularity_decay = true; |
| 159 | break; |
| 160 | case OPTION_ENABLE_COMMON: |
| 161 | arguments->analysis_option.req_rate = true; |
| 162 | arguments->analysis_option.access_pattern = true; |
| 163 | arguments->analysis_option.size = true; |
| 164 | arguments->analysis_option.reuse = true; |
| 165 | arguments->analysis_option.popularity = true; |
| 166 | break; |
| 167 | case OPTION_ENABLE_POPULARITY: |
| 168 | arguments->analysis_option.popularity = true; |
| 169 | break; |
| 170 | case OPTION_ENABLE_POPULARITY_DECAY: |
| 171 | arguments->analysis_option.popularity_decay = true; |
| 172 | break; |
| 173 | case OPTION_ENABLE_REUSE: |
| 174 | arguments->analysis_option.reuse = true; |
| 175 | break; |
| 176 | case OPTION_ENABLE_SIZE: |
| 177 | arguments->analysis_option.size = true; |
| 178 | break; |
| 179 | case OPTION_ENABLE_REQ_RATE: |