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