#include <babeltrace/ctf-ir/trace-internal.h>
#include <babeltrace/ctf-ir/validation-internal.h>
#include <babeltrace/ctf-ir/utils.h>
+#include <babeltrace/ctf-ir/utils-internal.h>
#include <babeltrace/ref.h>
#include <babeltrace/ctf-ir/attributes-internal.h>
#include <babeltrace/compiler-internal.h>
#include <babeltrace/endian-internal.h>
#include <babeltrace/types.h>
#include <babeltrace/values-internal.h>
+#include <babeltrace/assert-internal.h>
+#include <babeltrace/assert-pre-internal.h>
#include <inttypes.h>
#include <stdlib.h>
const char *bt_event_class_get_name(struct bt_event_class *event_class)
{
- const char *name = NULL;
-
- if (!event_class) {
- BT_LOGW_STR("Invalid parameter: event class is NULL.");
- goto end;
- }
-
- name = event_class->name->str;
-
-end:
- return name;
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
+ BT_ASSERT(event_class->name);
+ return event_class->name->str;
}
int64_t bt_event_class_get_id(struct bt_event_class *event_class)
{
- int64_t ret = 0;
-
- if (!event_class) {
- BT_LOGW_STR("Invalid parameter: event class is NULL.");
- ret = (int64_t) -1;
- goto end;
- }
-
- ret = event_class->id;
-
-end:
- return ret;
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
+ return event_class->id;
}
int bt_event_class_set_id(struct bt_event_class *event_class,
enum bt_event_class_log_level bt_event_class_get_log_level(
struct bt_event_class *event_class)
{
- enum bt_event_class_log_level log_level;
-
- if (!event_class) {
- BT_LOGW_STR("Invalid parameter: event class is NULL.");
- log_level = BT_EVENT_CLASS_LOG_LEVEL_UNKNOWN;
- goto end;
- }
-
- log_level = event_class->log_level;
-
-end:
- return log_level;
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
+ return event_class->log_level;
}
int bt_event_class_set_log_level(struct bt_event_class *event_class,
{
const char *emf_uri = NULL;
- if (!event_class) {
- BT_LOGW_STR("Invalid parameter: event class is NULL.");
- goto end;
- }
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
if (event_class->emf_uri->len > 0) {
emf_uri = event_class->emf_uri->str;
}
-end:
return emf_uri;
}
struct bt_stream_class *bt_event_class_get_stream_class(
struct bt_event_class *event_class)
{
- return event_class ?
- bt_get(bt_event_class_borrow_stream_class(event_class)) :
- NULL;
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
+ return bt_get(bt_event_class_borrow_stream_class(event_class));
}
struct bt_field_type *bt_event_class_get_payload_type(
struct bt_event_class *event_class)
{
- struct bt_field_type *payload = NULL;
-
- if (!event_class) {
- BT_LOGW_STR("Invalid parameter: event class is NULL.");
- goto end;
- }
-
- bt_get(event_class->fields);
- payload = event_class->fields;
-end:
- return payload;
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
+ return bt_get(event_class->fields);
}
int bt_event_class_set_payload_type(struct bt_event_class *event_class,
goto end;
}
- assert(bt_field_type_get_type_id(event_class->fields) ==
+ BT_ASSERT(bt_field_type_get_type_id(event_class->fields) ==
BT_FIELD_TYPE_ID_STRUCT);
ret = bt_field_type_structure_add_field(event_class->fields,
type, name);
goto end;
}
- assert(bt_field_type_get_type_id(event_class->fields) ==
+ BT_ASSERT(bt_field_type_get_type_id(event_class->fields) ==
BT_FIELD_TYPE_ID_STRUCT);
ret = bt_field_type_structure_get_field_count(event_class->fields);
end:
goto end;
}
- assert(bt_field_type_get_type_id(event_class->fields) ==
+ BT_ASSERT(bt_field_type_get_type_id(event_class->fields) ==
BT_FIELD_TYPE_ID_STRUCT);
ret = bt_field_type_structure_get_field_by_index(event_class->fields,
field_name, field_type, index);
goto end;
}
- assert(bt_field_type_get_type_id(event_class->fields) ==
+ BT_ASSERT(bt_field_type_get_type_id(event_class->fields) ==
BT_FIELD_TYPE_ID_STRUCT);
name_quark = g_quark_try_string(name);
if (!name_quark) {
{
struct bt_field_type *context_type = NULL;
- if (!event_class) {
- BT_LOGW_STR("Invalid parameter: event class is NULL.");
- goto end;
- }
+ BT_ASSERT_PRE_NON_NULL(event_class, "Event class");
if (!event_class->context) {
BT_LOGV("Event class has no context field type: "
goto end;
}
- bt_get(event_class->context);
- context_type = event_class->context;
+ context_type = bt_get(event_class->context);
+
end:
return context_type;
}
BT_HIDDEN
void bt_event_class_freeze(struct bt_event_class *event_class)
{
- assert(event_class);
+ BT_ASSERT(event_class);
if (event_class->frozen) {
return;
int ret = 0;
struct bt_value *attr_value = NULL;
- assert(event_class);
- assert(context);
+ BT_ASSERT(event_class);
+ BT_ASSERT(context);
BT_LOGD("Serializing event class's metadata: "
"event-class-addr=%p, event-class-name=\"%s\", "
"event-class-id=%" PRId64 ", metadata-context-addr=%p",
/* Serialize attributes */
g_string_append_printf(context->string, "\tname = \"%s\";\n",
event_class->name->str);
- assert(event_class->id >= 0);
+ BT_ASSERT(event_class->id >= 0);
g_string_append_printf(context->string, "\tid = %" PRId64 ";\n",
event_class->id);
g_string_append_printf(context->string, "\tstream_id = %" PRId64 ";\n",
BT_PUT(attr_value);
return ret;
}
+
+BT_HIDDEN
+int bt_event_class_validate_single_clock_class(
+ struct bt_event_class *event_class,
+ struct bt_clock_class **expected_clock_class)
+{
+ int ret = 0;
+
+ BT_ASSERT(event_class);
+ BT_ASSERT(expected_clock_class);
+ ret = bt_validate_single_clock_class(event_class->context,
+ expected_clock_class);
+ if (ret) {
+ BT_LOGW("Event class's context field type "
+ "is not recursively mapped to the "
+ "expected clock class: "
+ "event-class-addr=%p, "
+ "event-class-name=\"%s\", "
+ "event-class-id=%" PRId64 ", "
+ "ft-addr=%p",
+ event_class,
+ bt_event_class_get_name(event_class),
+ event_class->id,
+ event_class->context);
+ goto end;
+ }
+
+ ret = bt_validate_single_clock_class(event_class->fields,
+ expected_clock_class);
+ if (ret) {
+ BT_LOGW("Event class's payload field type "
+ "is not recursively mapped to the "
+ "expected clock class: "
+ "event-class-addr=%p, "
+ "event-class-name=\"%s\", "
+ "event-class-id=%" PRId64 ", "
+ "ft-addr=%p",
+ event_class,
+ bt_event_class_get_name(event_class),
+ event_class->id,
+ event_class->fields);
+ goto end;
+ }
+
+end:
+ return ret;
+}