Lines Matching full:ov

140     OptsVisitor *ov = to_ov(v);  in opts_start_struct()  local
146 if (ov->depth++ > 0) { in opts_start_struct()
150 ov->unprocessed_opts = g_hash_table_new_full(&g_str_hash, &g_str_equal, in opts_start_struct()
152 QTAILQ_FOREACH(opt, &ov->opts_root->head, next) { in opts_start_struct()
156 opts_visitor_insert(ov->unprocessed_opts, opt); in opts_start_struct()
159 if (ov->opts_root->id != NULL) { in opts_start_struct()
160 ov->fake_id_opt = g_malloc0(sizeof *ov->fake_id_opt); in opts_start_struct()
162 ov->fake_id_opt->name = g_strdup("id"); in opts_start_struct()
163 ov->fake_id_opt->str = g_strdup(ov->opts_root->id); in opts_start_struct()
164 opts_visitor_insert(ov->unprocessed_opts, ov->fake_id_opt); in opts_start_struct()
173 OptsVisitor *ov = to_ov(v); in opts_check_struct() local
177 if (ov->depth > 1) { in opts_check_struct()
182 g_hash_table_iter_init(&iter, ov->unprocessed_opts); in opts_check_struct()
197 OptsVisitor *ov = to_ov(v); in opts_end_struct() local
199 if (--ov->depth > 0) { in opts_end_struct()
203 g_hash_table_destroy(ov->unprocessed_opts); in opts_end_struct()
204 ov->unprocessed_opts = NULL; in opts_end_struct()
205 if (ov->fake_id_opt) { in opts_end_struct()
206 g_free(ov->fake_id_opt->name); in opts_end_struct()
207 g_free(ov->fake_id_opt->str); in opts_end_struct()
208 g_free(ov->fake_id_opt); in opts_end_struct()
210 ov->fake_id_opt = NULL; in opts_end_struct()
215 lookup_distinct(const OptsVisitor *ov, const char *name, Error **errp) in lookup_distinct() argument
219 list = g_hash_table_lookup(ov->unprocessed_opts, name); in lookup_distinct()
231 OptsVisitor *ov = to_ov(v); in opts_start_list() local
234 assert(ov->list_mode == LM_NONE); in opts_start_list()
237 ov->repeated_opts = lookup_distinct(ov, name, errp); in opts_start_list()
238 if (!ov->repeated_opts) { in opts_start_list()
242 ov->list_mode = LM_IN_PROGRESS; in opts_start_list()
251 OptsVisitor *ov = to_ov(v); in opts_next_list() local
253 switch (ov->list_mode) { in opts_next_list()
258 if (ov->list_mode == LM_SIGNED_INTERVAL) { in opts_next_list()
259 if (ov->range_next.s < ov->range_limit.s) { in opts_next_list()
260 ++ov->range_next.s; in opts_next_list()
263 } else if (ov->range_next.u < ov->range_limit.u) { in opts_next_list()
264 ++ov->range_next.u; in opts_next_list()
267 ov->list_mode = LM_IN_PROGRESS; in opts_next_list()
273 opt = g_queue_pop_head(ov->repeated_opts); in opts_next_list()
274 if (g_queue_is_empty(ov->repeated_opts)) { in opts_next_list()
275 g_hash_table_remove(ov->unprocessed_opts, opt->name); in opts_next_list()
276 ov->repeated_opts = NULL; in opts_next_list()
277 ov->list_mode = LM_TRAVERSED; in opts_next_list()
306 OptsVisitor *ov = to_ov(v); in opts_end_list() local
308 assert(ov->list_mode == LM_IN_PROGRESS || in opts_end_list()
309 ov->list_mode == LM_SIGNED_INTERVAL || in opts_end_list()
310 ov->list_mode == LM_UNSIGNED_INTERVAL || in opts_end_list()
311 ov->list_mode == LM_TRAVERSED); in opts_end_list()
312 ov->repeated_opts = NULL; in opts_end_list()
313 ov->list_mode = LM_NONE; in opts_end_list()
318 lookup_scalar(const OptsVisitor *ov, const char *name, Error **errp) in lookup_scalar() argument
320 if (ov->list_mode == LM_NONE) { in lookup_scalar()
325 list = lookup_distinct(ov, name, errp); in lookup_scalar()
328 if (ov->list_mode == LM_TRAVERSED) { in lookup_scalar()
332 assert(ov->list_mode == LM_IN_PROGRESS); in lookup_scalar()
333 return g_queue_peek_head(ov->repeated_opts); in lookup_scalar()
338 processed(OptsVisitor *ov, const char *name) in processed() argument
340 if (ov->list_mode == LM_NONE) { in processed()
341 g_hash_table_remove(ov->unprocessed_opts, name); in processed()
344 assert(ov->list_mode == LM_IN_PROGRESS); in processed()
352 OptsVisitor *ov = to_ov(v); in opts_type_str() local
355 opt = lookup_scalar(ov, name, errp); in opts_type_str()
366 processed(ov, name); in opts_type_str()
374 OptsVisitor *ov = to_ov(v); in opts_type_bool() local
377 opt = lookup_scalar(ov, name, errp); in opts_type_bool()
389 processed(ov, name); in opts_type_bool()
397 OptsVisitor *ov = to_ov(v); in opts_type_int64() local
403 if (ov->list_mode == LM_SIGNED_INTERVAL) { in opts_type_int64()
404 *obj = ov->range_next.s; in opts_type_int64()
408 opt = lookup_scalar(ov, name, errp); in opts_type_int64()
415 assert(ov->list_mode == LM_NONE || ov->list_mode == LM_IN_PROGRESS); in opts_type_int64()
422 processed(ov, name); in opts_type_int64()
425 if (*endptr == '-' && ov->list_mode == LM_IN_PROGRESS) { in opts_type_int64()
434 ov->range_next.s = val; in opts_type_int64()
435 ov->range_limit.s = val2; in opts_type_int64()
436 ov->list_mode = LM_SIGNED_INTERVAL; in opts_type_int64()
439 *obj = ov->range_next.s; in opts_type_int64()
445 (ov->list_mode == LM_NONE) ? "an int64 value" : in opts_type_int64()
454 OptsVisitor *ov = to_ov(v); in opts_type_uint64() local
460 if (ov->list_mode == LM_UNSIGNED_INTERVAL) { in opts_type_uint64()
461 *obj = ov->range_next.u; in opts_type_uint64()
465 opt = lookup_scalar(ov, name, errp); in opts_type_uint64()
472 assert(ov->list_mode == LM_NONE || ov->list_mode == LM_IN_PROGRESS); in opts_type_uint64()
477 processed(ov, name); in opts_type_uint64()
480 if (*endptr == '-' && ov->list_mode == LM_IN_PROGRESS) { in opts_type_uint64()
487 ov->range_next.u = val; in opts_type_uint64()
488 ov->range_limit.u = val2; in opts_type_uint64()
489 ov->list_mode = LM_UNSIGNED_INTERVAL; in opts_type_uint64()
492 *obj = ov->range_next.u; in opts_type_uint64()
498 (ov->list_mode == LM_NONE) ? "a uint64 value" : in opts_type_uint64()
507 OptsVisitor *ov = to_ov(v); in opts_type_size() local
511 opt = lookup_scalar(ov, name, errp); in opts_type_size()
523 processed(ov, name); in opts_type_size()
531 OptsVisitor *ov = to_ov(v); in opts_optional() local
534 assert(ov->list_mode == LM_NONE); in opts_optional()
535 *present = (lookup_distinct(ov, name, NULL) != NULL); in opts_optional()
542 OptsVisitor *ov = to_ov(v); in opts_free() local
544 if (ov->unprocessed_opts != NULL) { in opts_free()
545 g_hash_table_destroy(ov->unprocessed_opts); in opts_free()
547 g_free(ov->fake_id_opt); in opts_free()
548 g_free(ov); in opts_free()
555 OptsVisitor *ov; in opts_visitor_new() local
558 ov = g_malloc0(sizeof *ov); in opts_visitor_new()
560 ov->visitor.type = VISITOR_INPUT; in opts_visitor_new()
562 ov->visitor.start_struct = &opts_start_struct; in opts_visitor_new()
563 ov->visitor.check_struct = &opts_check_struct; in opts_visitor_new()
564 ov->visitor.end_struct = &opts_end_struct; in opts_visitor_new()
566 ov->visitor.start_list = &opts_start_list; in opts_visitor_new()
567 ov->visitor.next_list = &opts_next_list; in opts_visitor_new()
568 ov->visitor.check_list = &opts_check_list; in opts_visitor_new()
569 ov->visitor.end_list = &opts_end_list; in opts_visitor_new()
571 ov->visitor.type_int64 = &opts_type_int64; in opts_visitor_new()
572 ov->visitor.type_uint64 = &opts_type_uint64; in opts_visitor_new()
573 ov->visitor.type_size = &opts_type_size; in opts_visitor_new()
574 ov->visitor.type_bool = &opts_type_bool; in opts_visitor_new()
575 ov->visitor.type_str = &opts_type_str; in opts_visitor_new()
580 ov->visitor.optional = &opts_optional; in opts_visitor_new()
581 ov->visitor.free = opts_free; in opts_visitor_new()
583 ov->opts_root = opts; in opts_visitor_new()
585 return &ov->visitor; in opts_visitor_new()