Hide new bt_ctf_clock_* symbols
[babeltrace.git] / include / babeltrace / ctf-ir / clock-internal.h
1 #ifndef BABELTRACE_CTF_IR_CLOCK_INTERNAL_H
2 #define BABELTRACE_CTF_IR_CLOCK_INTERNAL_H
3
4 /*
5 * BabelTrace - CTF IR: Clock internal
6 *
7 * Copyright 2013, 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 *
9 * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27 * SOFTWARE.
28 */
29
30 #include <babeltrace/ctf-writer/clock.h>
31 #include <babeltrace/ctf-ir/trace-internal.h>
32 #include <babeltrace/object-internal.h>
33 #include <babeltrace/babeltrace-internal.h>
34 #include <glib.h>
35 #include <babeltrace/compat/uuid.h>
36
37 struct bt_ctf_clock {
38 struct bt_object base;
39 GString *name;
40 GString *description;
41 uint64_t frequency;
42 uint64_t precision;
43 int64_t offset_s; /* Offset in seconds */
44 int64_t offset; /* Offset in ticks */
45 uint64_t value; /* Current clock value */
46 uuid_t uuid;
47 int uuid_set;
48 int absolute;
49
50 /*
51 * This field is set once a clock is added to a trace. If the
52 * trace was created by a CTF writer, then the clock's value
53 * can be set and returned. Otherwise both functions fail
54 * because, in non-writer mode, clocks do not have global
55 * values: values are per-stream.
56 */
57 int has_value;
58
59 /*
60 * A clock's properties can't be modified once it is added to a stream
61 * class.
62 */
63 int frozen;
64 };
65
66 /*
67 * This is not part of the public API to prevent users from creating clocks
68 * in an invalid state (being nameless, in this case).
69 *
70 * The only legitimate use-case for this function is to allocate a clock
71 * while the TSDL metadata is being parsed.
72 */
73 BT_HIDDEN
74 struct bt_ctf_clock *_bt_ctf_clock_create(void);
75
76 /*
77 * Not exposed as part of the public API since the only usecase
78 * for this is when we are creating clocks from the TSDL metadata.
79 */
80 BT_HIDDEN
81 int bt_ctf_clock_set_name(struct bt_ctf_clock *clock,
82 const char *name);
83
84 BT_HIDDEN
85 void bt_ctf_clock_freeze(struct bt_ctf_clock *clock);
86
87 BT_HIDDEN
88 void bt_ctf_clock_serialize(struct bt_ctf_clock *clock,
89 struct metadata_context *context);
90
91 /*
92 * bt_ctf_clock_get_name: get a clock's name.
93 *
94 * Get the clock's name.
95 *
96 * @param clock Clock instance.
97 *
98 * Returns the clock's name, NULL on error.
99 */
100 BT_HIDDEN
101 const char *bt_ctf_clock_get_name(struct bt_ctf_clock *clock);
102
103 /*
104 * bt_ctf_clock_get_description: get a clock's description.
105 *
106 * Get the clock's description.
107 *
108 * @param clock Clock instance.
109 *
110 * Returns the clock's description, NULL if unset.
111 */
112 BT_HIDDEN
113 const char *bt_ctf_clock_get_description(struct bt_ctf_clock *clock);
114
115 /*
116 * bt_ctf_clock_get_frequency: get a clock's frequency.
117 *
118 * Get the clock's frequency (Hz).
119 *
120 * @param clock Clock instance.
121 *
122 * Returns the clock's frequency, -1ULL on error.
123 */
124 BT_HIDDEN
125 uint64_t bt_ctf_clock_get_frequency(struct bt_ctf_clock *clock);
126
127 /*
128 * bt_ctf_clock_get_precision: get a clock's precision.
129 *
130 * Get the clock's precision (in clock ticks).
131 *
132 * @param clock Clock instance.
133 *
134 * Returns the clock's precision, -1ULL on error.
135 */
136 BT_HIDDEN
137 uint64_t bt_ctf_clock_get_precision(struct bt_ctf_clock *clock);
138
139 /*
140 * bt_ctf_clock_get_offset_s: get a clock's offset in seconds.
141 *
142 * Get the clock's offset in seconds from POSIX.1 Epoch, 1970-01-01.
143 *
144 * @param clock Clock instance.
145 * @param offset_s Pointer to clock offset in seconds (output).
146 *
147 * Returns 0 on success, a negative value on error.
148 */
149 BT_HIDDEN
150 int bt_ctf_clock_get_offset_s(struct bt_ctf_clock *clock,
151 int64_t *offset_s);
152
153 /*
154 * bt_ctf_clock_get_offset: get a clock's offset in ticks.
155 *
156 * Get the clock's offset in ticks from Epoch + offset_t.
157 *
158 * @param clock Clock instance.
159 * @param offset Clock offset in ticks from Epoch + offset_s (output).
160 *
161 * Returns 0 on success, a negative value on error.
162 */
163 BT_HIDDEN
164 int bt_ctf_clock_get_offset(struct bt_ctf_clock *clock,
165 int64_t *offset);
166
167 /*
168 * bt_ctf_clock_get_is_absolute: get a clock's absolute attribute.
169 *
170 * Get the clock's absolute attribute. A clock is absolute if the clock is a
171 * global reference across the trace's other clocks.
172 *
173 * @param clock Clock instance.
174 *
175 * Returns the clock's absolute attribute, a negative value on error.
176 */
177 BT_HIDDEN
178 int bt_ctf_clock_get_is_absolute(struct bt_ctf_clock *clock);
179
180 /*
181 * bt_ctf_clock_get_uuid: get a clock's UUID.
182 *
183 * Get the clock's UUID.
184 *
185 * @param clock Clock instance.
186 *
187 * Returns a pointer to the clock's UUID (16 byte array) on success,
188 * NULL on error.
189 */
190 BT_HIDDEN
191 const unsigned char *bt_ctf_clock_get_uuid(struct bt_ctf_clock *clock);
192
193 /*
194 * bt_ctf_clock_set_uuid: set a clock's UUID.
195 *
196 * Set a clock's UUID.
197 *
198 * @param clock Clock instance.
199 * @param uuid A 16-byte array containing a UUID.
200 *
201 * Returns 0 on success, a negative value on error.
202 */
203 BT_HIDDEN
204 int bt_ctf_clock_set_uuid(struct bt_ctf_clock *clock,
205 const unsigned char *uuid);
206
207 BT_HIDDEN
208 int64_t bt_ctf_clock_ns_from_value(struct bt_ctf_clock *clock,
209 uint64_t value);
210
211 BT_HIDDEN
212 uint64_t bt_ctf_clock_get_value(struct bt_ctf_clock *clock);
213
214 BT_HIDDEN
215 int bt_ctf_clock_set_value(struct bt_ctf_clock *clock, uint64_t value);
216
217 BT_HIDDEN
218 int bt_ctf_clock_get_time(struct bt_ctf_clock *clock, int64_t *time);
219
220 #endif /* BABELTRACE_CTF_IR_CLOCK_INTERNAL_H */
This page took 0.033515 seconds and 4 git commands to generate.