Make intrusive_list_node's next/prev private
authorPedro Alves <pedro@palves.net>
Fri, 8 Apr 2022 19:03:46 +0000 (20:03 +0100)
committerPedro Alves <pedro@palves.net>
Wed, 13 Apr 2022 09:24:38 +0000 (10:24 +0100)
Tromey noticed that intrusive_list_node leaves its data members
public, which seems sub-optimal.

This commit makes intrusive_list_node's data fields private.
intrusive_list_iterator, intrusive_list_reverse_iterator, and
intrusive_list do need to access the fields, so they are made friends.

Change-Id: Ia8b306b40344cc218d423c8dfb8355207a612ac5

gdbsupport/intrusive_list.h

index 77eeeeec5fdd796ce82c789c27403c8b91b0112f..6812266159a3c275199958d13eb141b582f6a862 100644 (file)
 /* A list node.  The elements put in an intrusive_list either inherit
    from this, or have a field of this type.  */
 template<typename T>
-struct intrusive_list_node
+class intrusive_list_node
 {
+public:
   bool is_linked () const
   {
     return next != INTRUSIVE_LIST_UNLINKED_VALUE;
   }
 
+private:
   T *next = INTRUSIVE_LIST_UNLINKED_VALUE;
   T *prev = INTRUSIVE_LIST_UNLINKED_VALUE;
+
+  template<typename T2, typename AsNode>
+  friend struct intrusive_list_iterator;
+
+  template<typename T2, typename AsNode>
+  friend struct intrusive_list_reverse_iterator;
+
+  template<typename T2, typename AsNode>
+  friend struct intrusive_list;
 };
 
 /* Follows a couple types used by intrusive_list as template parameter to find