]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - common.h
common: Define DP_STATIC_ASSERT which wraps static_assert
[xonotic/darkplaces.git] / common.h
index 360ed9c0435b7559ff09c0fa92a65b31c70da675..d71899fe446a58abedfb401dc5a011b5d4d47c0e 100644 (file)
--- a/common.h
+++ b/common.h
@@ -1,5 +1,6 @@
 /*
 Copyright (C) 1996-1997 Id Software, Inc.
+Copyright (C) 2000-2020 DarkPlaces contributors
 
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
@@ -21,6 +22,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef COMMON_H
 #define COMMON_H
 
+#include <stdarg.h>
+#include <assert.h>
+#include "qtypes.h"
+#include "qdefs.h"
 
 /// MSVC has a different name for several standard functions
 #ifdef WIN32
@@ -38,7 +43,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 //============================================================================
 
-#define ContainerOf(ptr, type, member) ((type *)((char *)&(ptr) - offsetof(type, member)))
+#define ContainerOf(ptr, type, member) ((type *)((char *)(ptr) - offsetof(type, member)))
 
 typedef struct sizebuf_s
 {
@@ -212,6 +217,12 @@ void COM_InitGameType (void);
 char *va(char *buf, size_t buflen, const char *format, ...) DP_FUNC_PRINTF(3);
 // does a varargs printf into provided buffer, returns buffer (so it can be called in-line unlike dpsnprintf)
 
+// GCC with -Werror=c++-compat will error out if static_assert is used even though the macro is valid C11...
+#ifndef __cplusplus
+#define DP_STATIC_ASSERT(expr, str) _Static_assert(expr, str)
+#else
+#define DP_STATIC_ASSERT(expr, str) static_assert(expr, str)
+#endif
 
 // snprintf and vsnprintf are NOT portable. Use their DP counterparts instead
 #ifdef snprintf
@@ -295,6 +306,7 @@ typedef enum gamemode_e
        GAME_MOONHELM,
        GAME_VORETOURNAMENT,
        GAME_DOOMBRINGER, // added by Cloudwalk for kristus
+       GAME_BATTLEMETAL, // added by Cloudwalk for Subject9x
        GAME_COUNT
 }
 gamemode_t;