aboutsummaryrefslogtreecommitdiff
path: root/include/internal/list.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/internal/list.h')
-rw-r--r--include/internal/list.h203
1 files changed, 0 insertions, 203 deletions
diff --git a/include/internal/list.h b/include/internal/list.h
deleted file mode 100644
index a40f7fe6c249..000000000000
--- a/include/internal/list.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the Apache License 2.0 (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#ifndef OSSL_INTERNAL_LIST_H
-# define OSSL_INTERNAL_LIST_H
-# pragma once
-
-# include <string.h>
-# include <assert.h>
-
-# ifdef NDEBUG
-# define OSSL_LIST_DBG(x)
-# else
-# define OSSL_LIST_DBG(x) x;
-# endif
-
-# define OSSL_LIST_FOREACH_FROM(p, name, init) \
- for ((p) = (init); \
- (p) != NULL; \
- (p) = ossl_list_##name##_next(p))
-# define OSSL_LIST_FOREACH(p, name, l) \
- OSSL_LIST_FOREACH_FROM(p, name, ossl_list_##name##_head(l))
-
-# define OSSL_LIST_FOREACH_REV_FROM(p, name, init) \
- for ((p) = (init); \
- (p) != NULL; \
- (p) = ossl_list_##name##_prev(p))
-# define OSSL_LIST_FOREACH_REV(p, name, l) \
- OSSL_LIST_FOREACH_FROM(p, name, ossl_list_##name##_tail(l))
-
-# define OSSL_LIST_FOREACH_DELSAFE_FROM(p, pn, name, init) \
- for ((p) = (init); \
- (p) != NULL && (((pn) = ossl_list_##name##_next(p)), 1); \
- (p) = (pn))
-#define OSSL_LIST_FOREACH_DELSAFE(p, pn, name, l) \
- OSSL_LIST_FOREACH_DELSAFE_FROM(p, pn, name, ossl_list_##name##_head(l))
-
-# define OSSL_LIST_FOREACH_REV_DELSAFE_FROM(p, pn, name, init) \
- for ((p) = (init); \
- (p) != NULL && (((pn) = ossl_list_##name##_prev(p)), 1); \
- (p) = (pn))
-# define OSSL_LIST_FOREACH_REV_DELSAFE(p, pn, name, l) \
- OSSL_LIST_FOREACH_REV_DELSAFE_FROM(p, pn, name, ossl_list_##name##_tail(l))
-
-/* Define a list structure */
-# define OSSL_LIST(name) OSSL_LIST_ ## name
-
-/* Define fields to include an element of a list */
-# define OSSL_LIST_MEMBER(name, type) \
- struct { \
- type *next, *prev; \
- OSSL_LIST_DBG(struct ossl_list_st_ ## name *list) \
- } ossl_list_ ## name
-
-# define DECLARE_LIST_OF(name, type) \
- typedef struct ossl_list_st_ ## name OSSL_LIST(name); \
- struct ossl_list_st_ ## name { \
- type *alpha, *omega; \
- size_t num_elems; \
- } \
-
-# define DEFINE_LIST_OF_IMPL(name, type) \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_init(OSSL_LIST(name) *list) \
- { \
- memset(list, 0, sizeof(*list)); \
- } \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_init_elem(type *elem) \
- { \
- memset(&elem->ossl_list_ ## name, 0, \
- sizeof(elem->ossl_list_ ## name)); \
- } \
- static ossl_unused ossl_inline int \
- ossl_list_##name##_is_empty(const OSSL_LIST(name) *list) \
- { \
- return list->num_elems == 0; \
- } \
- static ossl_unused ossl_inline size_t \
- ossl_list_##name##_num(const OSSL_LIST(name) *list) \
- { \
- return list->num_elems; \
- } \
- static ossl_unused ossl_inline type * \
- ossl_list_##name##_head(const OSSL_LIST(name) *list) \
- { \
- assert(list->alpha == NULL \
- || list->alpha->ossl_list_ ## name.list == list); \
- return list->alpha; \
- } \
- static ossl_unused ossl_inline type * \
- ossl_list_##name##_tail(const OSSL_LIST(name) *list) \
- { \
- assert(list->omega == NULL \
- || list->omega->ossl_list_ ## name.list == list); \
- return list->omega; \
- } \
- static ossl_unused ossl_inline type * \
- ossl_list_##name##_next(const type *elem) \
- { \
- assert(elem->ossl_list_ ## name.next == NULL \
- || elem->ossl_list_ ## name.next \
- ->ossl_list_ ## name.prev == elem); \
- return elem->ossl_list_ ## name.next; \
- } \
- static ossl_unused ossl_inline type * \
- ossl_list_##name##_prev(const type *elem) \
- { \
- assert(elem->ossl_list_ ## name.prev == NULL \
- || elem->ossl_list_ ## name.prev \
- ->ossl_list_ ## name.next == elem); \
- return elem->ossl_list_ ## name.prev; \
- } \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_remove(OSSL_LIST(name) *list, type *elem) \
- { \
- assert(elem->ossl_list_ ## name.list == list); \
- OSSL_LIST_DBG(elem->ossl_list_ ## name.list = NULL) \
- if (list->alpha == elem) \
- list->alpha = elem->ossl_list_ ## name.next; \
- if (list->omega == elem) \
- list->omega = elem->ossl_list_ ## name.prev; \
- if (elem->ossl_list_ ## name.prev != NULL) \
- elem->ossl_list_ ## name.prev->ossl_list_ ## name.next = \
- elem->ossl_list_ ## name.next; \
- if (elem->ossl_list_ ## name.next != NULL) \
- elem->ossl_list_ ## name.next->ossl_list_ ## name.prev = \
- elem->ossl_list_ ## name.prev; \
- list->num_elems--; \
- memset(&elem->ossl_list_ ## name, 0, \
- sizeof(elem->ossl_list_ ## name)); \
- } \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_insert_head(OSSL_LIST(name) *list, type *elem) \
- { \
- assert(elem->ossl_list_ ## name.list == NULL); \
- OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \
- if (list->alpha != NULL) \
- list->alpha->ossl_list_ ## name.prev = elem; \
- elem->ossl_list_ ## name.next = list->alpha; \
- elem->ossl_list_ ## name.prev = NULL; \
- list->alpha = elem; \
- if (list->omega == NULL) \
- list->omega = elem; \
- list->num_elems++; \
- } \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_insert_tail(OSSL_LIST(name) *list, type *elem) \
- { \
- assert(elem->ossl_list_ ## name.list == NULL); \
- OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \
- if (list->omega != NULL) \
- list->omega->ossl_list_ ## name.next = elem; \
- elem->ossl_list_ ## name.prev = list->omega; \
- elem->ossl_list_ ## name.next = NULL; \
- list->omega = elem; \
- if (list->alpha == NULL) \
- list->alpha = elem; \
- list->num_elems++; \
- } \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_insert_before(OSSL_LIST(name) *list, type *e, \
- type *elem) \
- { \
- assert(elem->ossl_list_ ## name.list == NULL); \
- OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \
- elem->ossl_list_ ## name.next = e; \
- elem->ossl_list_ ## name.prev = e->ossl_list_ ## name.prev; \
- if (e->ossl_list_ ## name.prev != NULL) \
- e->ossl_list_ ## name.prev->ossl_list_ ## name.next = elem; \
- e->ossl_list_ ## name.prev = elem; \
- if (list->alpha == e) \
- list->alpha = elem; \
- list->num_elems++; \
- } \
- static ossl_unused ossl_inline void \
- ossl_list_##name##_insert_after(OSSL_LIST(name) *list, type *e, \
- type *elem) \
- { \
- assert(elem->ossl_list_ ## name.list == NULL); \
- OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \
- elem->ossl_list_ ## name.prev = e; \
- elem->ossl_list_ ## name.next = e->ossl_list_ ## name.next; \
- if (e->ossl_list_ ## name.next != NULL) \
- e->ossl_list_ ## name.next->ossl_list_ ## name.prev = elem; \
- e->ossl_list_ ## name.next = elem; \
- if (list->omega == e) \
- list->omega = elem; \
- list->num_elems++; \
- } \
- struct ossl_list_st_ ## name
-
-# define DEFINE_LIST_OF(name, type) \
- DECLARE_LIST_OF(name, type); \
- DEFINE_LIST_OF_IMPL(name, type)
-
-#endif