Commit | Line | Data |
---|---|---|
312c056a | 1 | /* |
0235b0db | 2 | * SPDX-License-Identifier: MIT |
312c056a | 3 | * |
0235b0db | 4 | * Copyright 2018 Philippe Proulx <pproulx@efficios.com> |
312c056a PP |
5 | */ |
6 | ||
350ad6c1 | 7 | #define BT_LOG_TAG "LIB/FIELD-WRAPPER" |
c2d9d9cf | 8 | #include "lib/logging.h" |
312c056a | 9 | |
578e048b MJ |
10 | #include "lib/object-pool.h" |
11 | #include "lib/object.h" | |
312c056a PP |
12 | #include <glib.h> |
13 | ||
578e048b MJ |
14 | #include "field-wrapper.h" |
15 | #include "field.h" | |
16 | ||
312c056a PP |
17 | BT_HIDDEN |
18 | struct bt_field_wrapper *bt_field_wrapper_new(void *data) | |
19 | { | |
20 | struct bt_field_wrapper *field_wrapper = | |
21 | g_new0(struct bt_field_wrapper, 1); | |
22 | ||
23 | BT_LOGD_STR("Creating empty field wrapper object."); | |
24 | ||
25 | if (!field_wrapper) { | |
870631a2 PP |
26 | BT_LIB_LOGE_APPEND_CAUSE( |
27 | "Failed to allocate one field wrapper."); | |
312c056a PP |
28 | goto end; |
29 | } | |
30 | ||
3fea54f6 | 31 | bt_object_init_unique(&field_wrapper->base); |
312c056a PP |
32 | BT_LOGD("Created empty field wrapper object: addr=%p", |
33 | field_wrapper); | |
34 | ||
35 | end: | |
36 | return field_wrapper; | |
37 | } | |
38 | ||
39 | BT_HIDDEN | |
40 | void bt_field_wrapper_destroy(struct bt_field_wrapper *field_wrapper) | |
41 | { | |
42 | BT_LOGD("Destroying field wrapper: addr=%p", field_wrapper); | |
43 | ||
44 | if (field_wrapper->field) { | |
45 | BT_LOGD_STR("Destroying field."); | |
44c440bc | 46 | bt_field_destroy((void *) field_wrapper->field); |
238b7404 | 47 | field_wrapper->field = NULL; |
312c056a PP |
48 | } |
49 | ||
50 | BT_LOGD_STR("Putting stream class."); | |
51 | g_free(field_wrapper); | |
52 | } | |
53 | ||
54 | BT_HIDDEN | |
55 | struct bt_field_wrapper *bt_field_wrapper_create( | |
5cd6d0e5 | 56 | struct bt_object_pool *pool, struct bt_field_class *fc) |
312c056a PP |
57 | { |
58 | struct bt_field_wrapper *field_wrapper = NULL; | |
59 | ||
98b15851 PP |
60 | BT_ASSERT_DBG(pool); |
61 | BT_ASSERT_DBG(fc); | |
312c056a PP |
62 | field_wrapper = bt_object_pool_create_object(pool); |
63 | if (!field_wrapper) { | |
870631a2 PP |
64 | BT_LIB_LOGE_APPEND_CAUSE( |
65 | "Cannot allocate one field wrapper from field wrapper pool: " | |
312c056a PP |
66 | "%![pool-]+o", pool); |
67 | goto error; | |
68 | } | |
69 | ||
70 | if (!field_wrapper->field) { | |
5cd6d0e5 | 71 | field_wrapper->field = (void *) bt_field_create(fc); |
312c056a | 72 | if (!field_wrapper->field) { |
870631a2 PP |
73 | BT_LIB_LOGE_APPEND_CAUSE( |
74 | "Cannot create field wrapper from field class: " | |
5cd6d0e5 | 75 | "%![fc-]+F", fc); |
312c056a PP |
76 | goto error; |
77 | } | |
78 | ||
79 | BT_LIB_LOGD("Created initial field wrapper object: " | |
80 | "wrapper-addr=%p, %![field-]+f", field_wrapper, | |
81 | field_wrapper->field); | |
82 | } | |
83 | ||
84 | goto end; | |
85 | ||
86 | error: | |
87 | if (field_wrapper) { | |
88 | bt_field_wrapper_destroy(field_wrapper); | |
89 | field_wrapper = NULL; | |
90 | } | |
91 | ||
92 | end: | |
93 | return field_wrapper; | |
94 | } |