diff options
Diffstat (limited to 'gdb/common')
-rw-r--r-- | gdb/common/btrace-common.c | 34 | ||||
-rw-r--r-- | gdb/common/btrace-common.h | 45 |
2 files changed, 45 insertions, 34 deletions
diff --git a/gdb/common/btrace-common.c b/gdb/common/btrace-common.c index 6cbbdc1..ec0ba6a 100644 --- a/gdb/common/btrace-common.c +++ b/gdb/common/btrace-common.c @@ -64,28 +64,20 @@ btrace_format_short_string (enum btrace_format format) /* See btrace-common.h. */ void -btrace_data_init (struct btrace_data *data) +btrace_data::fini () { - data->format = BTRACE_FORMAT_NONE; -} - -/* See btrace-common.h. */ - -void -btrace_data_fini (struct btrace_data *data) -{ - switch (data->format) + switch (format) { case BTRACE_FORMAT_NONE: /* Nothing to do. */ return; case BTRACE_FORMAT_BTS: - VEC_free (btrace_block_s, data->variant.bts.blocks); + VEC_free (btrace_block_s, variant.bts.blocks); return; case BTRACE_FORMAT_PT: - xfree (data->variant.pt.data); + xfree (variant.pt.data); return; } @@ -94,19 +86,19 @@ btrace_data_fini (struct btrace_data *data) /* See btrace-common.h. */ -int -btrace_data_empty (struct btrace_data *data) +bool +btrace_data::empty () const { - switch (data->format) + switch (format) { case BTRACE_FORMAT_NONE: - return 1; + return true; case BTRACE_FORMAT_BTS: - return VEC_empty (btrace_block_s, data->variant.bts.blocks); + return VEC_empty (btrace_block_s, variant.bts.blocks); case BTRACE_FORMAT_PT: - return (data->variant.pt.size == 0); + return (variant.pt.size == 0); } internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); @@ -115,10 +107,10 @@ btrace_data_empty (struct btrace_data *data) /* See btrace-common.h. */ void -btrace_data_clear (struct btrace_data *data) +btrace_data::clear () { - btrace_data_fini (data); - btrace_data_init (data); + fini (); + format = BTRACE_FORMAT_NONE; } /* See btrace-common.h. */ diff --git a/gdb/common/btrace-common.h b/gdb/common/btrace-common.h index 80e9fc6..debf833 100644 --- a/gdb/common/btrace-common.h +++ b/gdb/common/btrace-common.h @@ -164,7 +164,32 @@ struct btrace_data_pt /* The branch trace data. */ struct btrace_data { - enum btrace_format format; + btrace_data () = default; + + ~btrace_data () + { + fini (); + } + + btrace_data &operator= (btrace_data &&other) + { + if (this != &other) + { + fini (); + format = other.format; + variant = other.variant; + other.format = BTRACE_FORMAT_NONE; + } + return *this; + } + + /* Return true if this is empty; false otherwise. */ + bool empty () const; + + /* Clear this object. */ + void clear (); + + enum btrace_format format = BTRACE_FORMAT_NONE; union { @@ -174,6 +199,12 @@ struct btrace_data /* Format == BTRACE_FORMAT_PT. */ struct btrace_data_pt pt; } variant; + +private: + + DISABLE_COPY_AND_ASSIGN (btrace_data); + + void fini (); }; /* Target specific branch trace information. */ @@ -217,18 +248,6 @@ extern const char *btrace_format_string (enum btrace_format format); /* Return an abbreviation string representation of FORMAT. */ extern const char *btrace_format_short_string (enum btrace_format format); -/* Initialize DATA. */ -extern void btrace_data_init (struct btrace_data *data); - -/* Cleanup DATA. */ -extern void btrace_data_fini (struct btrace_data *data); - -/* Clear DATA. */ -extern void btrace_data_clear (struct btrace_data *data); - -/* Return non-zero if DATA is empty; zero otherwise. */ -extern int btrace_data_empty (struct btrace_data *data); - /* Append the branch trace data from SRC to the end of DST. Both SRC and DST must use the same format. Returns zero on success; a negative number otherwise. */ |