Commit | Line | Data |
---|---|---|
6dc2ca62 MD |
1 | /* |
2 | * Common Trace Format | |
3 | * | |
4 | * Enumeration mapping strings (quarks) from/to integers. | |
5 | * | |
de0ba614 | 6 | * Copyright (c) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
6dc2ca62 | 7 | * |
de0ba614 MD |
8 | * This library is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU Lesser General Public | |
10 | * License as published by the Free Software Foundation; either | |
11 | * version 2.1 of the License, or (at your option) any later version. | |
12 | * | |
13 | * This library is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 | * Lesser General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU Lesser General Public | |
19 | * License along with this library; if not, write to the Free Software | |
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
6dc2ca62 MD |
21 | */ |
22 | ||
d79865b9 | 23 | #include <babeltrace/ctf/types.h> |
6dc2ca62 MD |
24 | #include <stdint.h> |
25 | #include <glib.h> | |
26 | ||
bed864a7 | 27 | GQuark ctf_enum_read(struct stream_pos *pos, |
448d3cc7 MD |
28 | const struct type_class_enum *src) |
29 | { | |
30 | struct type_class_bitfield *bitfield_class = &src->p; | |
31 | struct type_class_integer *int_class = &bitfield_class->p; | |
32 | ||
33 | if (!int_class->signedness) { | |
34 | uint64_t v; | |
35 | ||
bed864a7 | 36 | v = ctf_bitfield_unsigned_read(pos, bitfield_class); |
448d3cc7 MD |
37 | return enum_uint_to_quark(src, v); |
38 | } else { | |
39 | int64_t v; | |
40 | ||
bed864a7 | 41 | v = fsrc->bitfield_signed_read(pos, bitfield_class); |
448d3cc7 MD |
42 | return enum_int_to_quark(src, v); |
43 | } | |
44 | } | |
45 | ||
bed864a7 MD |
46 | size_t ctf_enum_write(struct stream_pos *pos, |
47 | const struct type_class_enum *dest, | |
448d3cc7 MD |
48 | GQuark q) |
49 | { | |
50 | struct type_class_bitfield *bitfield_class = &dest->p; | |
51 | struct type_class_integer *int_class = &bitfield_class->p; | |
52 | ||
53 | if (!int_class->signedness) { | |
54 | uint64_t v; | |
55 | ||
56 | v = enum_quark_to_uint(dest, q); | |
bed864a7 | 57 | return ctf_bitfield_unsigned_write(pos, bitfield_class, v); |
448d3cc7 MD |
58 | } else { |
59 | int64_t v; | |
60 | ||
61 | v = enum_quark_to_int(dest, q); | |
bed864a7 | 62 | return ctf_bitfield_signed_write(pos, bitfield_class, v); |
448d3cc7 | 63 | } |
6dc2ca62 | 64 | } |