From 58e21d8e374206531802b64ae0e5c260e2bf6bf7 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Wed, 26 May 2021 13:37:53 +0200 Subject: [PATCH] Now using __cplusplus instead of DISABLE_TEMPLATES_COLLIDING_WITH_STL, and using std::min(), std::max() and std::swap() if available --- CONTRIBUTORS | 2 ++ HISTORY | 4 +++- tools.h | 16 +++++++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index ef7ddf5f..6ac848a9 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2780,6 +2780,8 @@ Winfried K for improving handling missing VDRPluginDestroyer() for fixing a compiler warning for fixing handling $(PKG_CONFIG) in newplugin + for using __cplusplus instead of DISABLE_TEMPLATES_COLLIDING_WITH_STL, and using + std::min(), std::max() and std::swap() is available Hans-Werner Hilse for adding the command line option --userdump to enable core dumps in case VDR diff --git a/HISTORY b/HISTORY index dcf44fd4..dc0bb7bf 100644 --- a/HISTORY +++ b/HISTORY @@ -9706,9 +9706,11 @@ Video Disk Recorder Revision History order to restore this functionality. However, it is recommended to use the function with the TimerActive parameter instead. -2021-05-25: +2021-05-26: - cRecordingInfo::Errors() now returns -1 for old recordings; added a missing 'const' (suggested by Christoph Haubrich). - The error counter of a recording is now copied as is when editing a recording. - Added missing initialization of cRecorder::lastErrors. +- Now using __cplusplus instead of DISABLE_TEMPLATES_COLLIDING_WITH_STL, and using + std::min(), std::max() and std::swap() if available (thanks to Winfried Köhler). diff --git a/tools.h b/tools.h index 922a342b..ff6169ee 100644 --- a/tools.h +++ b/tools.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 5.5 2021/05/20 10:13:43 kls Exp $ + * $Id: tools.h 5.6 2021/05/26 13:37:53 kls Exp $ */ #ifndef __TOOLS_H @@ -51,14 +51,20 @@ template inline void DELETENULL(T *&p) { T *q = p; p = NULL; delete q; #define CHECK(s) { if ((s) < 0) LOG_ERROR; } // used for 'ioctl()' calls #define FATALERRNO (errno && errno != EAGAIN && errno != EINTR) -// In case some plugin needs to use the STL and gets an error message regarding one -// of these functions, you can #define DISABLE_TEMPLATES_COLLIDING_WITH_STL before -// including any VDR header files. -#if !defined(DISABLE_TEMPLATES_COLLIDING_WITH_STL) +#if __cplusplus >= 201103L +// any gcc >= 4.8.1; we have swap, min, max +#include // std::min, std::max, (c++98: also swap) +#include // std::swap (since c++11) +using std::min; +using std::max; +using std::swap; +#else +// no c++11 and old compiler, let's include our own templates template inline T min(T a, T b) { return a <= b ? a : b; } template inline T max(T a, T b) { return a >= b ? a : b; } template inline void swap(T &a, T &b) { T t = a; a = b; b = t; } #endif + template inline int sgn(T a) { return a < 0 ? -1 : a > 0 ? 1 : 0; } template inline T constrain(T v, T l, T h) { return v < l ? l : v > h ? h : v; }