aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport/intrusive_list.h
diff options
context:
space:
mode:
authorPedro Alves <pedro@palves.net>2022-04-08 20:03:46 +0100
committerPedro Alves <pedro@palves.net>2022-04-13 10:24:38 +0100
commit50b032ebc0519a2b2585c499b9901fde9a0eccee (patch)
tree746b62d1507d5057380757dfdab6dedfe79604fd /gdbsupport/intrusive_list.h
parentd095eb4e877edb901e56546e29ac24da0bec346b (diff)
downloadgdb-50b032ebc0519a2b2585c499b9901fde9a0eccee.zip
gdb-50b032ebc0519a2b2585c499b9901fde9a0eccee.tar.gz
gdb-50b032ebc0519a2b2585c499b9901fde9a0eccee.tar.bz2
Make intrusive_list_node's next/prev private
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
Diffstat (limited to 'gdbsupport/intrusive_list.h')
-rw-r--r--gdbsupport/intrusive_list.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/gdbsupport/intrusive_list.h b/gdbsupport/intrusive_list.h
index 77eeeee..6812266 100644
--- a/gdbsupport/intrusive_list.h
+++ b/gdbsupport/intrusive_list.h
@@ -24,15 +24,26 @@
/* 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