ctf: add ClkClsConfig and use it
[babeltrace.git] / src / plugins / ctf / common / src / metadata / tsdl / visitor-generate-ir.cpp
index ac04a7fa4cd7fac639e7397fe139a79ce3156630..458177a6d6b9e20eccce56f09a80976f21943670 100644 (file)
@@ -168,44 +168,6 @@ struct ctx_decl_scope
     struct ctx_decl_scope *parent_scope;
 };
 
-/*
- * Visitor context (private).
- */
-struct ctf_visitor_generate_ir
-{
-    explicit ctf_visitor_generate_ir(ctf_metadata_decoder_config decoderConfig,
-                                     bt2c::Logger loggerParam) :
-        decoder_config {std::move(decoderConfig)},
-        logger {std::move(loggerParam)}
-    {
-    }
-
-    /* Trace IR trace class being filled (owned by this) */
-    bt_trace_class *trace_class = nullptr;
-
-    /* CTF meta trace being filled (owned by this) */
-    struct ctf_trace_class *ctf_tc = nullptr;
-
-    /* Current declaration scope (top of the stack) (owned by this) */
-    struct ctx_decl_scope *current_scope = nullptr;
-
-    /* True if trace declaration is visited */
-    bool is_trace_visited = false;
-
-    /* True if this is an LTTng trace */
-    bool is_lttng = false;
-
-    /* Config passed by the user */
-    struct ctf_metadata_decoder_config decoder_config;
-
-    bt2c::Logger logger;
-};
-
-/*
- * Visitor (public).
- */
-struct ctf_visitor_generate_ir;
-
 /**
  * Creates a new declaration scope.
  *
@@ -521,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);
@@ -543,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;
@@ -552,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;
@@ -4247,7 +4208,7 @@ static void calibrate_clock_class_offsets(int64_t *offset_seconds, uint64_t *off
 static void apply_clock_class_is_absolute(struct ctf_visitor_generate_ir *ctx,
                                           struct ctf_clock_class *clock)
 {
-    if (ctx->decoder_config.force_clock_class_origin_unix_epoch) {
+    if (ctx->decoder_config.clkClsCfg.forceOriginIsUnixEpoch) {
         clock->is_absolute = true;
     }
 
@@ -4258,31 +4219,31 @@ static void apply_clock_class_offset(struct ctf_visitor_generate_ir *ctx,
                                      struct ctf_clock_class *clock)
 {
     uint64_t freq;
-    int64_t offset_s_to_apply = ctx->decoder_config.clock_class_offset_s;
+    int64_t offset_s_to_apply = ctx->decoder_config.clkClsCfg.offsetSec;
     uint64_t offset_ns_to_apply;
     int64_t cur_offset_s;
     uint64_t cur_offset_cycles;
 
-    if (ctx->decoder_config.clock_class_offset_s == 0 &&
-        ctx->decoder_config.clock_class_offset_ns == 0) {
+    if (ctx->decoder_config.clkClsCfg.offsetSec == 0 &&
+        ctx->decoder_config.clkClsCfg.offsetNanoSec == 0) {
         goto end;
     }
 
     /* Transfer nanoseconds to seconds as much as possible */
-    if (ctx->decoder_config.clock_class_offset_ns < 0) {
-        const int64_t abs_ns = -ctx->decoder_config.clock_class_offset_ns;
+    if (ctx->decoder_config.clkClsCfg.offsetNanoSec < 0) {
+        const int64_t abs_ns = -ctx->decoder_config.clkClsCfg.offsetNanoSec;
         const int64_t abs_extra_s = abs_ns / INT64_C(1000000000) + 1;
         const int64_t extra_s = -abs_extra_s;
         const int64_t offset_ns =
-            ctx->decoder_config.clock_class_offset_ns - (extra_s * INT64_C(1000000000));
+            ctx->decoder_config.clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
 
         BT_ASSERT(offset_ns > 0);
         offset_ns_to_apply = (uint64_t) offset_ns;
         offset_s_to_apply += extra_s;
     } else {
-        const int64_t extra_s = ctx->decoder_config.clock_class_offset_ns / INT64_C(1000000000);
+        const int64_t extra_s = ctx->decoder_config.clkClsCfg.offsetNanoSec / INT64_C(1000000000);
         const int64_t offset_ns =
-            ctx->decoder_config.clock_class_offset_ns - (extra_s * INT64_C(1000000000));
+            ctx->decoder_config.clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
 
         BT_ASSERT(offset_ns >= 0);
         offset_ns_to_apply = (uint64_t) offset_ns;
@@ -4449,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;
@@ -4466,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.024908 seconds and 4 git commands to generate.