Make tui_gen_win_info constructor protected
[external/binutils.git] / gdb / tui / tui-data.h
index 6567874..8991a4a 100644 (file)
@@ -31,19 +31,18 @@ struct tui_point
   int x, y;
 };
 
-struct tui_win_element;
-
-/* This describes the content of the window.  */
-typedef struct tui_win_element **tui_win_content;
-
 /* Generic window information.  */
 struct tui_gen_win_info
 {
+protected:
+
   explicit tui_gen_win_info (enum tui_win_type t)
     : type (t)
   {
   }
 
+public:
+
   virtual ~tui_gen_win_info ();
 
   /* Call to refresh this window.  */
@@ -75,10 +74,6 @@ struct tui_gen_win_info
   int height = 0;
   /* Origin of window.  */
   struct tui_point origin = {0, 0};
-  /* Content of window.  */
-  tui_win_content content = nullptr;
-  /* Size of content (# of elements).  */
-  int content_size = 0;
   /* Can it be used, or is it already used?  */
   int content_in_use = FALSE;
   /* Viewport height.  */
@@ -146,15 +141,6 @@ enum tui_layout_type
   UNDEFINED_LAYOUT
 };
 
-/* Basic data types that can be displayed in the data window.  */
-enum tui_data_type
-{
-  TUI_REGISTER,
-  TUI_SCALAR,
-  TUI_COMPLEX,
-  TUI_STRUCT
-};
-
 enum tui_line_or_address_kind
 {
   LOA_LINE,
@@ -181,10 +167,21 @@ struct tui_layout_def
 /* Elements in the Source/Disassembly Window.  */
 struct tui_source_element
 {
-  char *line;
+  tui_source_element ()
+  {
+    line_or_addr.loa = LOA_LINE;
+    line_or_addr.u.line_no = 0;
+  }
+
+  ~tui_source_element ()
+  {
+    xfree (line);
+  }
+
+  char *line = nullptr;
   struct tui_line_or_address line_or_addr;
-  int is_exec_point;
-  int has_break;
+  bool is_exec_point = false;
+  int has_break = 0;
 };
 
 
@@ -209,18 +206,6 @@ struct tui_source_element
 
 typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
 
-/* An content element in a window.  */
-union tui_which_element
-{
-  struct tui_source_element source;    /* The source elements.  */
-  struct tui_data_item_window *data_window;    /* Data display elements.  */
-};
-
-struct tui_win_element
-{
-  union tui_which_element which_element;
-};
-
 /* Execution info window class.  */
 
 struct tui_exec_info_window : public tui_gen_win_info
@@ -282,7 +267,6 @@ struct tui_data_item_window : public tui_gen_win_info
   const char *name = nullptr;
   /* The register number, or data display number.  */
   int item_no = UNDEFINED_ITEM;
-  enum tui_data_type data_type = TUI_REGISTER;
   void *value = nullptr;
   bool highlight = false;
   char *content = nullptr;
@@ -421,6 +405,8 @@ public:
 
   /* Architecture associated with code at this location.  */
   struct gdbarch *gdbarch = nullptr;
+
+  std::vector<tui_source_element> content;
 };
 
 /* A TUI source window.  */
@@ -472,7 +458,6 @@ struct tui_data_window : public tui_win_info
   {
   }
 
-  ~tui_data_window () override;
   DISABLE_COPY_AND_ASSIGN (tui_data_window);
 
   void clear_detail () override;
@@ -487,12 +472,8 @@ struct tui_data_window : public tui_win_info
     return DATA_NAME;
   }
 
-  /* Start of data display content.  */
-  tui_win_content data_content = NULL;
-  int data_content_count = 0;
-  /* Start of regs display content.  */
-  tui_win_content regs_content = NULL;
-  int regs_content_count = 0;
+  /* Windows that are used to display registers.  */
+  std::vector<std::unique_ptr<tui_data_item_window>> regs_content;
   int regs_column_count = 0;
   /* Should regs be displayed at all?  */
   bool display_regs = false;
@@ -505,6 +486,10 @@ protected:
   {
   }
   void do_make_visible_with_new_height () override;
+
+  /* Return the index of the first element displayed.  If none are
+     displayed, then return -1.  */
+  int first_data_item_displayed ();
 };
 
 struct tui_cmd_window : public tui_win_info
@@ -549,7 +534,7 @@ protected:
   void do_make_visible_with_new_height () override;
 };
 
-extern int tui_win_is_auxillary (enum tui_win_type win_type);
+extern int tui_win_is_auxiliary (enum tui_win_type win_type);
 
 
 /* Global Data.  */
@@ -562,13 +547,6 @@ extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
 
 /* Data Manipulation Functions.  */
 extern void tui_initialize_static_data (void);
-extern void tui_init_generic_part (struct tui_gen_win_info *);
-extern tui_win_content tui_alloc_content (int, enum tui_win_type);
-extern int tui_add_content_elements (struct tui_gen_win_info *, 
-                                    int);
-extern void tui_free_win_content (struct tui_gen_win_info *);
-extern void tui_free_data_content (tui_win_content, int);
-extern void tui_free_all_source_wins_content (void);
 extern struct tui_win_info *tui_partial_win_by_name (const char *);
 extern enum tui_layout_type tui_current_layout (void);
 extern void tui_set_current_layout_to (enum tui_layout_type);