aboutsummaryrefslogtreecommitdiff
path: root/gdb/osdata.h
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2017-11-22 16:12:06 -0500
committerSimon Marchi <simon.marchi@ericsson.com>2017-11-22 16:12:06 -0500
commit479f8de1b3b7e69ca8d557bbe9d843c7d1bc89c5 (patch)
tree27159e430d7dfd36bd39da5c303bbfd6f2b27962 /gdb/osdata.h
parent41bd68f52c05f5654bed49f312f6562c8d048897 (diff)
downloadbinutils-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.h42
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