X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fintrusive_list.h;h=de013ae386f357c9afdc67a947f00647e8bb9596;hb=62dc1769c952a7211878181ff595d4328e182f6b;hp=7a127eb58996dca5b2a80c048b84a87fb74d4f18;hpb=c7cc5558558d95b021687525d94a07476aee9fd2;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/intrusive_list.h b/include/intrusive_list.h index 7a127eb58..de013ae38 100644 --- a/include/intrusive_list.h +++ b/include/intrusive_list.h @@ -21,9 +21,13 @@ #include +namespace insp +{ + struct intrusive_list_def_tag { }; template class intrusive_list; +template class intrusive_list_tail; template class intrusive_list_node @@ -48,8 +52,20 @@ class intrusive_list_node } friend class intrusive_list; + friend class intrusive_list_tail; }; +} // 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