ctf: use unique_ptr to manage ctf_visitor_generate_ir lifetime
[babeltrace.git] / src / plugins / ctf / common / src / metadata / tsdl / visitor-generate-ir.cpp
index 41d7410cb97eca8f17b595aae42f03407ad32803..6416b3378af71711cc1395add05d8735c7cd191f 100644 (file)
@@ -483,12 +483,12 @@ end:
  * @param trace        Associated trace
  * @returns    New visitor context, or NULL on error
  */
-static struct ctf_visitor_generate_ir *
+static ctf_visitor_generate_ir::UP
 ctx_create(const struct ctf_metadata_decoder_config *decoder_config, const bt2c::Logger& logger)
 {
     BT_ASSERT(decoder_config);
 
-    ctf_visitor_generate_ir *ctx = new ctf_visitor_generate_ir {*decoder_config, logger};
+    ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {*decoder_config, logger}};
 
     if (decoder_config->self_comp) {
         ctx->trace_class = bt_trace_class_create(decoder_config->self_comp);
@@ -505,7 +505,7 @@ ctx_create(const struct ctf_metadata_decoder_config *decoder_config, const bt2c:
     }
 
     /* Root declaration scope */
-    ctx->current_scope = ctx_decl_scope_create(ctx, NULL);
+    ctx->current_scope = ctx_decl_scope_create(ctx.get(), NULL);
     if (!ctx->current_scope) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(ctx->logger, "Cannot create declaration scope.");
         goto error;
@@ -514,8 +514,7 @@ ctx_create(const struct ctf_metadata_decoder_config *decoder_config, const bt2c:
     goto end;
 
 error:
-    ctx_destroy(ctx);
-    ctx = NULL;
+    ctx.reset();
 
 end:
     return ctx;
@@ -4411,15 +4410,14 @@ end:
     return ret;
 }
 
-struct ctf_visitor_generate_ir *
+ctf_visitor_generate_ir::UP
 ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *decoder_config)
 {
-    struct ctf_visitor_generate_ir *ctx = NULL;
-
     bt2c::Logger logger {decoder_config->logger, "PLUGIN/CTF/META/IR-VISITOR"};
 
     /* Create visitor's context */
-    ctx = ctx_create(decoder_config, logger);
+    ctf_visitor_generate_ir::UP ctx = ctx_create(decoder_config, logger);
+
     if (!ctx) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(logger, "Cannot create visitor's context.");
         goto error;
@@ -4428,18 +4426,22 @@ ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *decoder
     goto end;
 
 error:
-    ctx_destroy(ctx);
-    ctx = NULL;
+    ctx.reset();
 
 end:
     return ctx;
 }
 
-void ctf_visitor_generate_ir_destroy(struct ctf_visitor_generate_ir *visitor)
+static void ctf_visitor_generate_ir_destroy(struct ctf_visitor_generate_ir *visitor)
 {
     ctx_destroy(visitor);
 }
 
+void ctf_visitor_generate_ir_deleter::operator()(ctf_visitor_generate_ir *visitor)
+{
+    ctf_visitor_generate_ir_destroy(visitor);
+}
+
 bt_trace_class *ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx)
 {
     BT_ASSERT_DBG(ctx);
This page took 0.033449 seconds and 4 git commands to generate.