diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2017-11-22 16:12:06 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2017-11-22 16:12:06 -0500 |
commit | 479f8de1b3b7e69ca8d557bbe9d843c7d1bc89c5 (patch) | |
tree | 27159e430d7dfd36bd39da5c303bbfd6f2b27962 /gdb/osdata.h | |
parent | 41bd68f52c05f5654bed49f312f6562c8d048897 (diff) | |
download | binutils-479f8de1b3b7e69ca8d557bbe9d843c7d1bc89c5.zip binutils-479f8de1b3b7e69ca8d557bbe9d843c7d1bc89c5.tar.gz binutils-479f8de1b3b7e69ca8d557bbe9d843c7d1bc89c5.tar.bz2 |
C++ify osdata
This patch c++ifies the osdata structure: osdata_column, osdata_item and
osdata. char* are replaced with std::string and VEC are replaced with
std::vector. This allows to get rid of a great deal of cleanup and
free'ing code.
I replaced the splay tree in list_available_thread_groups with an
std::map. Unless there's a good advantage to keep using a splay tree,
I think using the standard type should make things simpler to
understand.
gdb/ChangeLog:
* osdata.h: Include vector isntead of vec.h.
(osdata_column_s): Remove typedef.
(struct osdata_column): Add constructor.
<name, value>: Change type to std::string.
(DEF_VEC_O (osdata_column_s)): Remove.
(osdata_item_s): Remove typedef.
(struct osdata_item) <columns>: Change type to std::vector.
(DEF_VEC_O (osdata_item_s)): Remove.
(struct osdata): Add constructor.
<type>: Change type to std::string.
<items>: Change type to std::vector.
(osdata_p): Remove typedef.
(DEF_VEC_P (osdata_p)): Remove.
(osdata_parse): Return a unique_ptr.
(osdata_free): Remove.
(make_cleanup_osdata_free): Remove.
(get_osdata): Return a unique_ptr.
(get_osdata_column): Return pointer to std::string, take a
reference to osdata_item as parameter.
* osdata.c (struct osdata_parsing_data) <osdata>: Change type to
unique_ptr.
<property_name>: Change type to std::string.
(osdata_start_osdata): Allocate osdata with new and adjust.
(osdata_start_item): Adjust.
(osdata_start_column): Adjust.
(osdata_end_column): Adjust.
(clear_parsing_data): Remove.
(osdata_parse): Return a unique_ptr and adjust, remove cleanup.
(osdata_item_clear): Remove.
(get_osdata): return a unique_ptr and adjust.
(get_osdata_column): Return a pointer to std::string and adjust.
(info_osdata): Adjust.
* mi/mi-main.c: Include <map>.
(free_vector_of_osdata_items): Remove.
(list_available_thread_groups): Adjust, use std::map instead of
splay tree.
Diffstat (limited to 'gdb/osdata.h')
-rw-r--r-- | gdb/osdata.h | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/gdb/osdata.h b/gdb/osdata.h index 5921384..58aaa3c 100644 --- a/gdb/osdata.h +++ b/gdb/osdata.h @@ -20,35 +20,37 @@ #ifndef OSDATA_H #define OSDATA_H -#include "vec.h" +#include <vector> -typedef struct osdata_column +struct osdata_column { - char *name; - char *value; -} osdata_column_s; -DEF_VEC_O(osdata_column_s); + osdata_column (std::string &&name_, std::string &&value_) + : name (std::move (name_)), value (std::move (value_)) + {} -typedef struct osdata_item + std::string name; + std::string value; +}; + +struct osdata_item { - VEC(osdata_column_s) *columns; -} osdata_item_s; -DEF_VEC_O(osdata_item_s); + std::vector<osdata_column> columns; +}; struct osdata { - char *type; + osdata (std::string &&type_) + : type (std::move (type_)) + {} - VEC(osdata_item_s) *items; + std::string type; + std::vector<osdata_item> items; }; -typedef struct osdata *osdata_p; -DEF_VEC_P(osdata_p); - -struct osdata *osdata_parse (const char *xml); -void osdata_free (struct osdata *); -struct cleanup *make_cleanup_osdata_free (struct osdata *data); -struct osdata *get_osdata (const char *type); -const char *get_osdata_column (struct osdata_item *item, const char *name); + +std::unique_ptr<osdata> osdata_parse (const char *xml); +std::unique_ptr<osdata> get_osdata (const char *type); +const std::string *get_osdata_column (const osdata_item &item, + const char *name); /* Dump TYPE info to the current uiout builder. If TYPE is either NULL or empty, then dump the top level table that lists the |