summaryrefslogtreecommitdiff
path: root/src/libknot/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libknot/common.h')
-rw-r--r--src/libknot/common.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/libknot/common.h b/src/libknot/common.h
new file mode 100644
index 0000000..9b2d8ae
--- /dev/null
+++ b/src/libknot/common.h
@@ -0,0 +1,105 @@
+/*!
+ * \file common.h
+ *
+ * \author Lubos Slovak <lubos.slovak@nic.cz>
+ *
+ * \brief Common macros, includes and utilities.
+ *
+ * \addtogroup libknot
+ * @{
+ */
+/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#ifdef HAVE_LIBLDNS
+#define TEST_WITH_LDNS
+#endif
+
+#ifndef _KNOT_COMMON_H_
+#define _KNOT_COMMON_H_
+
+#define KNOT_NAME "lib" PACKAGE_NAME // Project name
+#define KNOT_VER PACKAGE_VERSION // 0xMMIIRR (MAJOR,MINOR,REVISION)
+
+#ifndef UINT_DEFINED
+typedef unsigned int uint; /*!< \brief Unsigned. */
+#define UINT_DEFINED
+#endif
+
+/*! \brief If defined, zone structures will use hash table for lookup. */
+#define USE_HASH_TABLE
+
+/*! \brief Eliminate compiler warning with unused parameters. */
+#define UNUSED(param) (void)(param)
+
+/*! \brief Type-safe minimum macro. */
+#define MIN(a, b) \
+ ({ typeof (a) _a = (a); typeof (b) _b = (b); _a < _b ? _a : _b; })
+
+/*! \brief Type-safe maximum macro. */
+#define MAX(a, b) \
+ ({ typeof (a) _a = (a); typeof (b) _b = (b); _a > _b ? _a : _b; })
+
+/* Optimisation macros. */
+#ifndef likely
+/*! \brief Optimize for x to be true value. */
+#define likely(x) __builtin_expect((x),1)
+#endif
+#ifndef unlikely
+/*! \brief Optimize for x to be false value. */
+#define unlikely(x) __builtin_expect((x),0)
+#endif
+
+/* Optimisation macros. */
+#ifndef likely
+/*! \brief Optimize for x to be true value. */
+#define likely(x) __builtin_expect((x),1)
+#endif
+#ifndef unlikely
+/*! \brief Optimize for x to be false value. */
+#define unlikely(x) __builtin_expect((x),0)
+#endif
+
+/*! \todo Refactor theese. We should have an allocator function handling this.*/
+#ifndef ERR_ALLOC_FAILED
+#define ERR_ALLOC_FAILED fprintf(stderr, "Allocation failed at %s:%d (%s ver.%s)\n", \
+ __FILE__, __LINE__, KNOT_NAME, KNOT_VER)
+#endif
+
+#ifndef CHECK_ALLOC_LOG
+#define CHECK_ALLOC_LOG(var, ret) \
+ do { \
+ if ((var) == NULL) { \
+ ERR_ALLOC_FAILED; \
+ return (ret); \
+ } \
+ } while (0)
+#endif
+
+#ifndef CHECK_ALLOC
+#define CHECK_ALLOC(var, ret) \
+ do { \
+ if ((var) == NULL) { \
+ return (ret); \
+ } \
+ } while (0)
+#endif
+
+#endif /* _KNOT_COMMON_H_ */
+
+/*! @} */