Lines Matching +full:- +full:v
4 * Copyright Red Hat, Inc. 2012-2016
9 * See the COPYING.LIB file in the top-level directory.
15 #include "qapi/string-output-visitor.h"
16 #include "qapi/visitor-impl.h"
71 static StringOutputVisitor *to_sov(Visitor *v) in to_sov() argument
73 return container_of(v, StringOutputVisitor, visitor); in to_sov()
78 switch (sov->list_mode) { in string_output_set()
80 sov->list_mode = LM_IN_PROGRESS; in string_output_set()
83 if (sov->string) { in string_output_set()
84 g_string_free(sov->string, true); in string_output_set()
86 sov->string = g_string_new(string); in string_output_set()
92 g_string_append(sov->string, ", "); in string_output_set()
93 g_string_append(sov->string, string); in string_output_set()
106 sov->ranges = range_list_insert(sov->ranges, r); in string_output_append()
115 sov->ranges = range_list_insert(sov->ranges, r); in string_output_append_range()
123 g_string_append_printf(sov->string, "0x%" PRIx64 "-0x%" PRIx64, in format_string()
127 g_string_append_printf(sov->string, "%" PRId64 "-%" PRId64, in format_string()
132 g_string_append_printf(sov->string, "0x%" PRIx64, range_lob(r)); in format_string()
134 g_string_append_printf(sov->string, "%" PRId64, range_lob(r)); in format_string()
138 g_string_append(sov->string, ","); in format_string()
142 static bool print_type_int64(Visitor *v, const char *name, int64_t *obj, in print_type_int64() argument
145 StringOutputVisitor *sov = to_sov(v); in print_type_int64()
148 if (sov->struct_nesting) { in print_type_int64()
152 switch (sov->list_mode) { in print_type_int64()
158 sov->range_start.s = *obj; in print_type_int64()
159 sov->range_end.s = *obj; in print_type_int64()
160 sov->list_mode = LM_IN_PROGRESS; in print_type_int64()
164 if (sov->range_end.s + 1 == *obj) { in print_type_int64()
165 sov->range_end.s++; in print_type_int64()
167 if (sov->range_start.s == sov->range_end.s) { in print_type_int64()
168 string_output_append(sov, sov->range_end.s); in print_type_int64()
170 assert(sov->range_start.s < sov->range_end.s); in print_type_int64()
171 string_output_append_range(sov, sov->range_start.s, in print_type_int64()
172 sov->range_end.s); in print_type_int64()
175 sov->range_start.s = *obj; in print_type_int64()
176 sov->range_end.s = *obj; in print_type_int64()
181 if (sov->range_end.s + 1 == *obj) { in print_type_int64()
182 sov->range_end.s++; in print_type_int64()
183 assert(sov->range_start.s < sov->range_end.s); in print_type_int64()
184 string_output_append_range(sov, sov->range_start.s, in print_type_int64()
185 sov->range_end.s); in print_type_int64()
187 if (sov->range_start.s == sov->range_end.s) { in print_type_int64()
188 string_output_append(sov, sov->range_end.s); in print_type_int64()
190 assert(sov->range_start.s < sov->range_end.s); in print_type_int64()
192 string_output_append_range(sov, sov->range_start.s, in print_type_int64()
193 sov->range_end.s); in print_type_int64()
203 l = sov->ranges; in print_type_int64()
205 Range *r = l->data; in print_type_int64()
206 format_string(sov, r, l->next != NULL, false); in print_type_int64()
207 l = l->next; in print_type_int64()
210 if (sov->human) { in print_type_int64()
211 l = sov->ranges; in print_type_int64()
212 g_string_append(sov->string, " ("); in print_type_int64()
214 Range *r = l->data; in print_type_int64()
215 format_string(sov, r, l->next != NULL, true); in print_type_int64()
216 l = l->next; in print_type_int64()
218 g_string_append(sov->string, ")"); in print_type_int64()
224 static bool print_type_uint64(Visitor *v, const char *name, uint64_t *obj, in print_type_uint64() argument
229 return print_type_int64(v, name, &i, errp); in print_type_uint64()
232 static bool print_type_size(Visitor *v, const char *name, uint64_t *obj, in print_type_size() argument
235 StringOutputVisitor *sov = to_sov(v); in print_type_size()
239 if (sov->struct_nesting) { in print_type_size()
243 if (!sov->human) { in print_type_size()
258 static bool print_type_bool(Visitor *v, const char *name, bool *obj, in print_type_bool() argument
261 StringOutputVisitor *sov = to_sov(v); in print_type_bool()
263 if (sov->struct_nesting) { in print_type_bool()
271 static bool print_type_str(Visitor *v, const char *name, char **obj, in print_type_str() argument
274 StringOutputVisitor *sov = to_sov(v); in print_type_str()
277 if (sov->struct_nesting) { in print_type_str()
281 if (sov->human) { in print_type_str()
290 static bool print_type_number(Visitor *v, const char *name, double *obj, in print_type_number() argument
293 StringOutputVisitor *sov = to_sov(v); in print_type_number()
295 if (sov->struct_nesting) { in print_type_number()
303 static bool print_type_null(Visitor *v, const char *name, QNull **obj, in print_type_null() argument
306 StringOutputVisitor *sov = to_sov(v); in print_type_null()
309 if (sov->struct_nesting) { in print_type_null()
313 if (sov->human) { in print_type_null()
322 static bool start_struct(Visitor *v, const char *name, void **obj, in start_struct() argument
325 StringOutputVisitor *sov = to_sov(v); in start_struct()
327 sov->struct_nesting++; in start_struct()
331 static void end_struct(Visitor *v, void **obj) in end_struct() argument
333 StringOutputVisitor *sov = to_sov(v); in end_struct()
335 if (--sov->struct_nesting) { in end_struct()
344 start_list(Visitor *v, const char *name, GenericList **list, size_t size, in start_list() argument
347 StringOutputVisitor *sov = to_sov(v); in start_list()
349 if (sov->struct_nesting) { in start_list()
354 assert(sov->list_mode == LM_NONE); in start_list()
357 sov->list = list; in start_list()
359 if (*list && (*list)->next) { in start_list()
360 sov->list_mode = LM_STARTED; in start_list()
365 static GenericList *next_list(Visitor *v, GenericList *tail, size_t size) in next_list() argument
367 StringOutputVisitor *sov = to_sov(v); in next_list()
368 GenericList *ret = tail->next; in next_list()
370 if (sov->struct_nesting) { in next_list()
374 if (ret && !ret->next) { in next_list()
375 sov->list_mode = LM_END; in next_list()
380 static void end_list(Visitor *v, void **obj) in end_list() argument
382 StringOutputVisitor *sov = to_sov(v); in end_list()
384 if (sov->struct_nesting) { in end_list()
388 assert(sov->list == obj); in end_list()
389 assert(sov->list_mode == LM_STARTED || in end_list()
390 sov->list_mode == LM_END || in end_list()
391 sov->list_mode == LM_NONE || in end_list()
392 sov->list_mode == LM_IN_PROGRESS); in end_list()
393 sov->list_mode = LM_NONE; in end_list()
396 static void string_output_complete(Visitor *v, void *opaque) in string_output_complete() argument
398 StringOutputVisitor *sov = to_sov(v); in string_output_complete()
400 assert(opaque == sov->result); in string_output_complete()
401 *sov->result = g_string_free(sov->string, false); in string_output_complete()
402 sov->string = NULL; in string_output_complete()
410 static void string_output_free(Visitor *v) in string_output_free() argument
412 StringOutputVisitor *sov = to_sov(v); in string_output_free()
414 if (sov->string) { in string_output_free()
415 g_string_free(sov->string, true); in string_output_free()
418 g_list_foreach(sov->ranges, free_range, NULL); in string_output_free()
419 g_list_free(sov->ranges); in string_output_free()
425 StringOutputVisitor *v; in string_output_visitor_new() local
427 v = g_malloc0(sizeof(*v)); in string_output_visitor_new()
429 v->string = g_string_new(NULL); in string_output_visitor_new()
430 v->human = human; in string_output_visitor_new()
431 v->result = result; in string_output_visitor_new()
434 v->visitor.type = VISITOR_OUTPUT; in string_output_visitor_new()
435 v->visitor.type_int64 = print_type_int64; in string_output_visitor_new()
436 v->visitor.type_uint64 = print_type_uint64; in string_output_visitor_new()
437 v->visitor.type_size = print_type_size; in string_output_visitor_new()
438 v->visitor.type_bool = print_type_bool; in string_output_visitor_new()
439 v->visitor.type_str = print_type_str; in string_output_visitor_new()
440 v->visitor.type_number = print_type_number; in string_output_visitor_new()
441 v->visitor.type_null = print_type_null; in string_output_visitor_new()
442 v->visitor.start_struct = start_struct; in string_output_visitor_new()
443 v->visitor.end_struct = end_struct; in string_output_visitor_new()
444 v->visitor.start_list = start_list; in string_output_visitor_new()
445 v->visitor.next_list = next_list; in string_output_visitor_new()
446 v->visitor.end_list = end_list; in string_output_visitor_new()
447 v->visitor.complete = string_output_complete; in string_output_visitor_new()
448 v->visitor.free = string_output_free; in string_output_visitor_new()
450 return &v->visitor; in string_output_visitor_new()