From 4ae5f77fc9c969c6530dd5734934199869b70ab1 Mon Sep 17 00:00:00 2001 From: Konstantin Osipov <kostja@tarantool.org> Date: Wed, 11 Nov 2015 20:33:57 +0300 Subject: [PATCH] salad: rlist.h was moved to lib/small Change the code to use small/rlist.h, to avoid code duplication. small is self-contained. --- src/box/engine.cc | 2 +- src/box/key_def.h | 2 +- src/box/memtx_engine.cc | 2 +- src/box/port.h | 1 - src/box/sophia_engine.cc | 2 +- src/box/space.h | 2 +- src/cbus.h | 1 + src/fiber.c | 2 +- src/fiber.h | 3 +- src/ipc.h | 2 +- src/latch.h | 2 +- src/lib/salad/rlist.h | 337 --------------------------------------- src/trigger.h | 2 +- test/unit/rlist.c | 2 +- 14 files changed, 12 insertions(+), 350 deletions(-) delete mode 100644 src/lib/salad/rlist.h diff --git a/src/box/engine.cc b/src/box/engine.cc index ef9c6d192f..87396e2873 100644 --- a/src/box/engine.cc +++ b/src/box/engine.cc @@ -36,7 +36,7 @@ #include "space.h" #include "exception.h" #include "schema.h" -#include "salad/rlist.h" +#include "small/rlist.h" #include "scoped_guard.h" #include <stdlib.h> #include <string.h> diff --git a/src/box/key_def.h b/src/box/key_def.h index c9e6e74976..54cb5cf250 100644 --- a/src/box/key_def.h +++ b/src/box/key_def.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. */ #include "trivia/util.h" -#include "salad/rlist.h" +#include "small/rlist.h" #include "error.h" #include "msgpuck/msgpuck.h" #define RB_COMPACT 1 diff --git a/src/box/memtx_engine.cc b/src/box/memtx_engine.cc index 5e7bf7c69a..48349212bc 100644 --- a/src/box/memtx_engine.cc +++ b/src/box/memtx_engine.cc @@ -38,7 +38,7 @@ #include "memtx_bitset.h" #include "space.h" #include "msgpuck/msgpuck.h" -#include "salad/rlist.h" +#include "small/rlist.h" #include "request.h" #include "box.h" #include "iproto_constants.h" diff --git a/src/box/port.h b/src/box/port.h index 9e3da50a16..7c81add8ce 100644 --- a/src/box/port.h +++ b/src/box/port.h @@ -31,7 +31,6 @@ * SUCH DAMAGE. */ #include "trivia/util.h" -#include "lib/salad/rlist.h" #if defined(__cplusplus) extern "C" { diff --git a/src/box/sophia_engine.cc b/src/box/sophia_engine.cc index 4a74848a07..eab35f1996 100644 --- a/src/box/sophia_engine.cc +++ b/src/box/sophia_engine.cc @@ -43,7 +43,7 @@ #include "port.h" #include "request.h" #include "iproto_constants.h" -#include "salad/rlist.h" +#include "small/rlist.h" #include <errinj.h> #include <sophia.h> #include <stdlib.h> diff --git a/src/box/space.h b/src/box/space.h index b22343eda5..34790ec166 100644 --- a/src/box/space.h +++ b/src/box/space.h @@ -33,7 +33,7 @@ #include "index.h" #include "key_def.h" #include "engine.h" -#include "salad/rlist.h" +#include "small/rlist.h" struct space { struct access access[BOX_USER_MAX]; diff --git a/src/cbus.h b/src/cbus.h index 0895d86b3e..fb27140b63 100644 --- a/src/cbus.h +++ b/src/cbus.h @@ -32,6 +32,7 @@ */ #include "fiber.h" #include "rmean.h" +#include "third_party/queue.h" #if defined(__cplusplus) extern "C" { diff --git a/src/fiber.c b/src/fiber.c index f81aa32e09..646f8f211c 100644 --- a/src/fiber.c +++ b/src/fiber.c @@ -38,7 +38,7 @@ #include "assoc.h" #include "memory.h" #include "trigger.h" -#include "third_party/pmatomic.h" +#include "small/pmatomic.h" static void (*fiber_invoke)(fiber_func f, va_list ap); diff --git a/src/fiber.h b/src/fiber.h index 9f55238f43..41b2ea6989 100644 --- a/src/fiber.h +++ b/src/fiber.h @@ -40,10 +40,9 @@ #include "diag.h" #include "coro.h" #include "trivia/util.h" -#include "third_party/queue.h" #include "small/mempool.h" #include "small/region.h" -#include "salad/rlist.h" +#include "small/rlist.h" #if defined(__cplusplus) extern "C" { diff --git a/src/ipc.h b/src/ipc.h index 290ac8ed3b..3d7e537bb5 100644 --- a/src/ipc.h +++ b/src/ipc.h @@ -33,7 +33,7 @@ #include <stdbool.h> #include <stdint.h> #include <tarantool_ev.h> -#include "salad/rlist.h" +#include "small/rlist.h" #if defined(__cplusplus) extern "C" { diff --git a/src/latch.h b/src/latch.h index 907172d515..5f3daa9424 100644 --- a/src/latch.h +++ b/src/latch.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. */ #include <assert.h> -#include "salad/rlist.h" +#include "small/rlist.h" #include "fiber.h" /** Latch of cooperative multitasking environment. */ diff --git a/src/lib/salad/rlist.h b/src/lib/salad/rlist.h deleted file mode 100644 index f9e743f2aa..0000000000 --- a/src/lib/salad/rlist.h +++ /dev/null @@ -1,337 +0,0 @@ -#ifndef TARANTOOL_RLIST_H_INCLUDED -#define TARANTOOL_RLIST_H_INCLUDED -/* - * Copyright 2010-2015, Tarantool AUTHORS, please see AUTHORS file. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the - * following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * <COPYRIGHT HOLDER> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include <stddef.h> -#if defined(__cplusplus) -extern "C" { -#endif /* defined(__cplusplus) */ - -#ifndef typeof -/* TODO: 'typeof' is a GNU extension */ -#define typeof __typeof__ -#endif - -/** - * list entry and head structure - */ - -struct rlist { - struct rlist *prev; - struct rlist *next; -}; - -/** - * init list head (or list entry as ins't included in list) - */ - -inline static void -rlist_create(struct rlist *list) -{ - list->next = list; - list->prev = list; -} - -/** - * add item to list - */ -inline static void -rlist_add(struct rlist *head, struct rlist *item) -{ - item->prev = head; - item->next = head->next; - item->prev->next = item; - item->next->prev = item; -} - -/** - * add item to list tail - */ -inline static void -rlist_add_tail(struct rlist *head, struct rlist *item) -{ - item->next = head; - item->prev = head->prev; - item->prev->next = item; - item->next->prev = item; -} - -/** - * delete element - */ -inline static void -rlist_del(struct rlist *item) -{ - item->prev->next = item->next; - item->next->prev = item->prev; - rlist_create(item); -} - -inline static struct rlist * -rlist_shift(struct rlist *head) -{ - struct rlist *shift = head->next; - head->next = shift->next; - shift->next->prev = head; - shift->next = shift->prev = shift; - return shift; -} - -inline static struct rlist * -rlist_shift_tail(struct rlist *head) -{ - struct rlist *shift = head->prev; - rlist_del(shift); - return shift; -} - -/** - * return first element - */ -inline static struct rlist * -rlist_first(struct rlist *head) -{ - return head->next; -} - -/** - * return last element - */ -inline static struct rlist * -rlist_last(struct rlist *head) -{ - return head->prev; -} - -/** - * return next element by element - */ -inline static struct rlist * -rlist_next(struct rlist *item) -{ - return item->next; -} - -/** - * return previous element - */ -inline static struct rlist * -rlist_prev(struct rlist *item) -{ - return item->prev; -} - -/** - * return TRUE if list is empty - */ -inline static int -rlist_empty(struct rlist *item) -{ - return item->next == item->prev && item->next == item; -} - -/** -@brief delete from one list and add as another's head -@param to the head that will precede our entry -@param item the entry to move -*/ -static inline void -rlist_move(struct rlist *to, struct rlist *item) -{ - rlist_del(item); - rlist_add(to, item); -} - -/** -@brief delete from one list and add_tail as another's head -@param to the head that will precede our entry -@param item the entry to move -*/ -static inline void -rlist_move_tail(struct rlist *to, struct rlist *item) -{ - rlist_del(item); - rlist_add_tail(to, item); -} - -static inline void -rlist_swap(struct rlist *rhs, struct rlist *lhs) -{ - struct rlist tmp = *rhs; - *rhs = *lhs; - *lhs = tmp; - /* Relink the nodes. */ - if (lhs->next == rhs) /* Take care of empty list case */ - lhs->next = lhs; - lhs->next->prev = lhs; - lhs->prev->next = lhs; - if (rhs->next == lhs) /* Take care of empty list case */ - rhs->next = rhs; - rhs->next->prev = rhs; - rhs->prev->next = rhs; -} - -/** - * list head initializer - */ -#define RLIST_HEAD_INITIALIZER(name) { &(name), &(name) } - -/** - * list link node - */ -#define RLIST_LINK_INITIALIZER { 0, 0 } - -/** - * allocate and init head of list - */ -#define RLIST_HEAD(name) \ - struct rlist name = RLIST_HEAD_INITIALIZER(name) - -/** - * return entry by list item - */ -#define rlist_entry(item, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (item); \ - (type *)( (char *)__mptr - ((size_t) &((type *)0)->member) ); }) - -/** - * return first entry - */ -#define rlist_first_entry(head, type, member) \ - rlist_entry(rlist_first(head), type, member) - -/** - * Remove one element from the list and return it - * @pre the list is not empty - */ -#define rlist_shift_entry(head, type, member) \ - rlist_entry(rlist_shift(head), type, member) \ - -/** - * Remove one element from the list tail and return it - * @pre the list is not empty - */ -#define rlist_shift_tail_entry(head, type, member) \ - rlist_entry(rlist_shift_tail(head), type, member) \ - - -/** - * return last entry - * @pre the list is not empty - */ -#define rlist_last_entry(head, type, member) \ - rlist_entry(rlist_last(head), type, member) - -/** - * return next entry - */ -#define rlist_next_entry(item, member) \ - rlist_entry(rlist_next(&(item)->member), typeof(*item), member) - -/** - * return previous entry - */ -#define rlist_prev_entry(item, member) \ - rlist_entry(rlist_prev(&(item)->member), typeof(*item), member) - -#define rlist_prev_entry_safe(item, head, member) \ - ((rlist_prev(&(item)->member) == (head)) ? NULL : \ - rlist_entry(rlist_prev(&(item)->member), typeof(*item), member)) - -/** - * add entry to list - */ -#define rlist_add_entry(head, item, member) \ - rlist_add((head), &(item)->member) - -/** - * add entry to list tail - */ -#define rlist_add_tail_entry(head, item, member) \ - rlist_add_tail((head), &(item)->member) - -/** -delete from one list and add as another's head -*/ -#define rlist_move_entry(to, item, member) \ - rlist_move((to), &((item)->member)) - -/** -delete from one list and add_tail as another's head -*/ -#define rlist_move_tail_entry(to, item, member) \ - rlist_move_tail((to), &((item)->member)) - -/** - * delete entry from list - */ -#define rlist_del_entry(item, member) \ - rlist_del(&((item)->member)) - -/** - * foreach through list - */ -#define rlist_foreach(item, head) \ - for (item = rlist_first(head); item != (head); item = rlist_next(item)) - -/** - * foreach backward through list - */ -#define rlist_foreach_reverse(item, head) \ - for (item = rlist_last(head); item != (head); item = rlist_prev(item)) - -/** - * foreach through all list entries - */ -#define rlist_foreach_entry(item, head, member) \ - for (item = rlist_first_entry((head), typeof(*item), member); \ - &item->member != (head); \ - item = rlist_next_entry((item), member)) - -/** - * foreach backward through all list entries - */ -#define rlist_foreach_entry_reverse(item, head, member) \ - for (item = rlist_last_entry((head), typeof(*item), member); \ - &item->member != (head); \ - item = rlist_prev_entry((item), member)) - -#define rlist_foreach_entry_safe(item, head, member, tmp) \ - for ((item) = rlist_first_entry((head), typeof(*item), member); \ - &item->member != (head) && \ - ((tmp) = rlist_next_entry((item), member)); \ - (item) = (tmp)) - -#if defined(__cplusplus) -} /* extern "C" */ -#endif /* defined(__cplusplus) */ - -#endif /* TARANTOOL_RLIST_H_INCLUDED */ diff --git a/src/trigger.h b/src/trigger.h index 51b2506a65..6d165ff336 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -30,7 +30,7 @@ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include "salad/rlist.h" +#include "small/rlist.h" #if defined(__cplusplus) extern "C" { diff --git a/test/unit/rlist.c b/test/unit/rlist.c index 356235a206..c0c29a3f1c 100644 --- a/test/unit/rlist.c +++ b/test/unit/rlist.c @@ -1,4 +1,4 @@ -#include "salad/rlist.h" +#include "small/rlist.h" #include <stdio.h> #include <stdarg.h> #include "unit.h" -- GitLab