diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-03-09 15:00:41 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-03-09 15:00:41 -0700 |
commit | 7a7f497b483cd65e340064f23ed1c73425ecba0a (patch) | |
tree | d5c99ea22a1e10300d06165f8ac96df6b0dc59e1 /src/nvim/lib/queue.h | |
parent | 1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (diff) | |
parent | ade1b12f49c3b3914c74847d791eb90ea90b56b7 (diff) | |
download | rneovim-7a7f497b483cd65e340064f23ed1c73425ecba0a.tar.gz rneovim-7a7f497b483cd65e340064f23ed1c73425ecba0a.tar.bz2 rneovim-7a7f497b483cd65e340064f23ed1c73425ecba0a.zip |
Merge remote-tracking branch 'upstream/master' into aucmd_textputpost
Diffstat (limited to 'src/nvim/lib/queue.h')
-rw-r--r-- | src/nvim/lib/queue.h | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/src/nvim/lib/queue.h b/src/nvim/lib/queue.h deleted file mode 100644 index 40769e44b5..0000000000 --- a/src/nvim/lib/queue.h +++ /dev/null @@ -1,92 +0,0 @@ -// Queue implemented by circularly-linked list. -// -// Adapted from libuv. Simpler and more efficient than klist.h for implementing -// queues that support arbitrary insertion/removal. -// -// Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl> -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -#pragma once - -#include <stddef.h> - -#include "nvim/func_attr.h" - -typedef struct _queue { - struct _queue *next; - struct _queue *prev; -} QUEUE; - -// Public macros. -#define QUEUE_DATA(ptr, type, field) \ - ((type *)((char *)(ptr) - offsetof(type, field))) - -// Important note: the node currently being processed can be safely deleted. -// otherwise, mutating the list while QUEUE_FOREACH is iterating over its -// elements results in undefined behavior. -#define QUEUE_FOREACH(q, h, code) \ - (q) = (h)->next; \ - while ((q) != (h)) { \ - QUEUE *next = q->next; \ - code \ - (q) = next; \ - } - -// ffi.cdef is unable to swallow `bool` in place of `int` here. -static inline int QUEUE_EMPTY(const QUEUE *const q) - FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT -{ - return q == q->next; -} - -#define QUEUE_HEAD(q) (q)->next - -static inline void QUEUE_INIT(QUEUE *const q) FUNC_ATTR_ALWAYS_INLINE -{ - q->next = q; - q->prev = q; -} - -static inline void QUEUE_ADD(QUEUE *const h, QUEUE *const n) - FUNC_ATTR_ALWAYS_INLINE -{ - h->prev->next = n->next; - n->next->prev = h->prev; - h->prev = n->prev; - h->prev->next = h; -} - -static inline void QUEUE_INSERT_HEAD(QUEUE *const h, QUEUE *const q) - FUNC_ATTR_ALWAYS_INLINE -{ - q->next = h->next; - q->prev = h; - q->next->prev = q; - h->next = q; -} - -static inline void QUEUE_INSERT_TAIL(QUEUE *const h, QUEUE *const q) - FUNC_ATTR_ALWAYS_INLINE -{ - q->next = h; - q->prev = h->prev; - q->prev->next = q; - h->prev = q; -} - -static inline void QUEUE_REMOVE(QUEUE *const q) FUNC_ATTR_ALWAYS_INLINE -{ - q->prev->next = q->next; - q->next->prev = q->prev; -} |