Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 27 06:08:09 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/include/linux: hashtable.h

Log Message:
something like hashtable.h from openbsd, WIP

Author: coypu <[email protected]>
Committer: Taylor R Campbell <[email protected]>


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/include/linux/hashtable.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/include/linux/hashtable.h
diff -u src/sys/external/bsd/drm2/include/linux/hashtable.h:1.1 src/sys/external/bsd/drm2/include/linux/hashtable.h:1.2
--- src/sys/external/bsd/drm2/include/linux/hashtable.h:1.1	Mon Aug 27 05:50:06 2018
+++ src/sys/external/bsd/drm2/include/linux/hashtable.h	Mon Aug 27 06:08:09 2018
@@ -1,6 +1,63 @@
+/*	$OpenBSD: drm_linux.h,v 1.89 2018/06/25 22:29:16 kettenis Exp $	*/
+/*
+ * Copyright (c) 2013, 2014, 2015 Mark Kettenis
+ * Copyright (c) 2017 Martin Pieuchot
+ *
+ * Permission to use, copy, modify, and 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.
+ */
+
 #ifndef _LINUX_HASHTABLE_H_
 #define _LINUX_HASHTABLE_H_
 
+#include <linux/list.h>
+
+#define DECLARE_HASHTABLE(name, bits) struct list_head name[1 << (bits)]
+
+static inline void
+__hash_init(struct list_head *table, u_int size)
+{
+	u_int i;
+
+	for (i = 0; i < size; i++)
+		INIT_LIST_HEAD(&table[i]);
+}
+
+static inline bool
+__hash_empty(struct list_head *table, u_int size)
+{
+	u_int i;
+
+	for (i = 0; i < size; i++) {
+		if (!list_empty(&table[i]))
+			return false;
+	}
+
+	return true;
+}
+
+#define __hash(table, key)	&table[key % (nitems(table) - 1)]
+
+#define hash_init(table)	__hash_init(table, nitems(table))
+#define hash_add(table, node, key) \
+	hlist_add_head(node, __hash(table, key))
+#define hash_del(node)		hlist_del_init(node)
+#define hash_empty(table)	__hash_empty(table, nitems(table))
+#define hash_for_each_possible(table, obj, member, key) \
+	hlist_for_each_entry(obj, __hash(table, key), member)
+#define hash_for_each_safe(table, i, tmp, obj, member) 	\
+	for (i = 0; i < nitems(table); i++)		\
+	       list_for_each_entry_safe(obj, tmp, &table[i], member)
+
 #define DECLARE_HASHTABLE(__a,__b) \
 	uint64_t __a /* XXX */
 

Reply via email to