projects
/
babeltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Generate IO struct visitor adapt to def/declaration
[babeltrace.git]
/
formats
/
ctf
/
types
/
enum.c
diff --git
a/formats/ctf/types/enum.c
b/formats/ctf/types/enum.c
index a62d84e712ef6104802f3301197cdc85c859b3c8..15e2590ad6b2cb1c65e57857234eb91dfe1ba22f 100644
(file)
--- a/
formats/ctf/types/enum.c
+++ b/
formats/ctf/types/enum.c
@@
-3,7
+3,7
@@
*
* Enumeration mapping strings (quarks) from/to integers.
*
*
* Enumeration mapping strings (quarks) from/to integers.
*
- * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright 2010
, 2011
- Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@
-20,39
+20,45
@@
#include <stdint.h>
#include <glib.h>
#include <stdint.h>
#include <glib.h>
-GQuark ctf_enum_read(struct stream_pos *pos,
- const struct type_class_enum *src)
+/*
+ * The caller should unref the GArray.
+ */
+GArray *ctf_enum_read(struct stream_pos *pos,
+ const struct declaration_enum *src)
{
{
- const struct
type_class_integer *int_class = &src->p
;
+ const struct
declaration_integer *integer_declaration = src->integer_declaration
;
- if (!int
_class
->signedness) {
+ if (!int
eger_declaration
->signedness) {
uint64_t v;
uint64_t v;
- v = ctf_uint_read(pos, int
_class
);
- return enum_uint_to_quark(src, v);
+ v = ctf_uint_read(pos, int
eger_declaration
);
+ return enum_uint_to_quark
_set
(src, v);
} else {
int64_t v;
} else {
int64_t v;
- v = ctf_int_read(pos, int
_class
);
- return enum_int_to_quark(src, v);
+ v = ctf_int_read(pos, int
eger_declaration
);
+ return enum_int_to_quark
_set
(src, v);
}
}
}
}
+/*
+ * Arbitrarily choose the start of the first matching range.
+ */
void ctf_enum_write(struct stream_pos *pos,
void ctf_enum_write(struct stream_pos *pos,
-
const struct type_class
_enum *dest,
-
GQuark q)
+
const struct declaration
_enum *dest,
+ GQuark q)
{
{
- const struct type_class_integer *int_class = &dest->p;
+ const struct declaration_integer *integer_declaration = dest->integer_declaration;
+ GArray *array;
- if (!int_class->signedness) {
-
uint64_t v
;
+ array = enum_quark_to_range_set(dest, q);
+
assert(array)
;
- v = enum_quark_to_uint(dest, q);
- ctf_uint_write(pos, int_class, v);
+ if (!integer_declaration->signedness) {
+ uint64_t v = g_array_index(array, struct enum_range, 0).start._unsigned;
+ ctf_uint_write(pos, integer_declaration, v);
} else {
} else {
- int64_t v;
-
- v = enum_quark_to_int(dest, q);
- ctf_int_write(pos, int_class, v);
+ int64_t v = g_array_index(array, struct enum_range, 0).start._unsigned;
+ ctf_int_write(pos, integer_declaration, v);
}
}
}
}
This page took
0.024725 seconds
and
4
git commands to generate.