]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/intrusive_list.h
Remove the Kiwi links from the readme.
[user/henk/code/inspircd.git] / include / intrusive_list.h
index 7a127eb58996dca5b2a80c048b84a87fb74d4f18..5f55591c7731e41e6d70cbcdc932ef652dd25801 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
- *   Copyright (C) 2013-2014 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
 
 #include <iterator>
 
+namespace insp
+{
+
 struct intrusive_list_def_tag { };
 
 template <typename T, typename Tag = intrusive_list_def_tag> class intrusive_list;
+template <typename T, typename Tag = intrusive_list_def_tag> class intrusive_list_tail;
 
 template <typename T, typename Tag = intrusive_list_def_tag>
 class intrusive_list_node
@@ -48,8 +52,20 @@ class intrusive_list_node
        }
 
        friend class intrusive_list<T, Tag>;
+       friend class intrusive_list_tail<T, Tag>;
 };
 
+} // namespace insp
+
+// Intrusive list where the list only has a pointer to the head element
 #define INSPIRCD_INTRUSIVE_LIST_NAME intrusive_list
 #include "intrusive_list_impl.h"
 #undef INSPIRCD_INTRUSIVE_LIST_NAME
+
+// Intrusive list where the list maintains a pointer to both the head and the tail elements.
+// Additional methods: back(), push_back(), pop_back()
+#define INSPIRCD_INTRUSIVE_LIST_NAME intrusive_list_tail
+#define INSPIRCD_INTRUSIVE_LIST_HAS_TAIL
+#include "intrusive_list_impl.h"
+#undef INSPIRCD_INTRUSIVE_LIST_NAME
+#undef INSPIRCD_INTRUSIVE_LIST_HAS_TAIL