From 8d2fee240671812bcf3a40f287189e7eb31c8f5f Mon Sep 17 00:00:00 2001 From: Markus Lehr Date: Wed, 17 Apr 2024 09:34:52 +0200 Subject: [PATCH] 1st Version with ECAL --- CMakeLists.txt | 65 + __doc/.~lock.ECAL_Infos.odt# | 1 + __doc/ECAL_Infos.odt | Bin 0 -> 256694 bytes __logicsample/backend.c | 1057 + __logicsample/keyboard.c | 204 + __logicsample/testMQ.c | 64 + include/GILLock.h | 21 + include/RTSCoproHelper.h | 37 + include/RTSMonFrame.h | 60 + include/RTSMonitoringTask.h | 41 + include/RTSMonitoringTask.h.old | 39 + include/RelGILLock.h | 19 + include/json.hpp | 24766 +++++++++++++++++ include/json_fwd.hpp | 176 + protobuf/RTService.pb.cc | 2040 ++ protobuf/RTService.pb.h | 2130 ++ src/RTService.cpp | 149 + src/monitoringTask/RTSMonitoringTask.cpp | 76 + src/monitoringTask/RTSMonitoringTask.cpp.old | 231 + src/proto_messages/RTService.proto | 74 + src/rt_service.cpp | 86 + src/utilities/GILLock.cpp | 14 + src/utilities/RTSCoproHelper.cpp | 298 + src/utilities/RelGILLock.cpp | 16 + 24 files changed, 31664 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 __doc/.~lock.ECAL_Infos.odt# create mode 100644 __doc/ECAL_Infos.odt create mode 100644 __logicsample/backend.c create mode 100644 __logicsample/keyboard.c create mode 100644 __logicsample/testMQ.c create mode 100644 include/GILLock.h create mode 100644 include/RTSCoproHelper.h create mode 100644 include/RTSMonFrame.h create mode 100644 include/RTSMonitoringTask.h create mode 100644 include/RTSMonitoringTask.h.old create mode 100644 include/RelGILLock.h create mode 100644 include/json.hpp create mode 100644 include/json_fwd.hpp create mode 100644 protobuf/RTService.pb.cc create mode 100644 protobuf/RTService.pb.h create mode 100644 src/RTService.cpp create mode 100644 src/monitoringTask/RTSMonitoringTask.cpp create mode 100644 src/monitoringTask/RTSMonitoringTask.cpp.old create mode 100644 src/proto_messages/RTService.proto create mode 100644 src/rt_service.cpp create mode 100644 src/utilities/GILLock.cpp create mode 100644 src/utilities/RTSCoproHelper.cpp create mode 100644 src/utilities/RelGILLock.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5016010 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,65 @@ + +cmake_minimum_required(VERSION 3.5) + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +project(RTService) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + + + +# Find python and Boost - both are required dependencies +#find_package(PythonLibs 3.10 REQUIRED) +find_package(Boost COMPONENTS python REQUIRED) +find_package(eCAL REQUIRED) +find_package(Protobuf REQUIRED) + + +set(source_files + + ${CMAKE_CURRENT_SOURCE_DIR}/src/RTService.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/monitoringTask/RTSMonitoringTask.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utilities/RTSCoproHelper.cpp + +) + + +set(rtservice_proto + + ${CMAKE_CURRENT_SOURCE_DIR}/src/proto_messages/RTService.proto + +) + +add_executable(${PROJECT_NAME} ${source_files}) + +#ecal_add_sample(${PROJECT_NAME} ${math_client_src}) +#PROTOBUF_TARGET_CPP(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src ${rtservice_proto}) +PROTOBUF_TARGET_CPP(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/proto_messages/ ${rtservice_proto}) + +#set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set (CMAKE_RUNTIME_OUTPUT_DIRECTORY /home/markus/git/vrpmdvweb/vrpmdvserver/extensions/rt_service) +set (RTSERVICEINCLUDE ./include) + + +file( GLOB LIB_SOURCES .src/*.cpp ) +file( GLOB LIB_HEADERS lib/*.h ) +# Add a shared module - modules are intended to be imported at runtime. +# - This is where you add the source files +#add_library(rt_service MODULE ./src/rt_service.cpp ./src/monitoringTask/RTSMonitoringTask.cpp ./src/utilities/RelGILLock.cpp ./src/utilities/GILLock.cpp ./src/utilities/RTSCoproHelper.cpp) +#add_executable(RTService ./src/RTService.cpp ./src/monitoringTask/RTSMonitoringTask.cpp ./src/utilities/RTSCoproHelper.cpp) + + +# Set up the libraries and header search paths for this target +#target_link_libraries(rt_service ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}) +#target_include_directories(rt_service PRIVATE ${PYTHON_INCLUDE_DIRS} ${RTSERVICEINCLUDE}) +# target_link_libraries(RTService ${Boost_LIBRARIES} ) +target_link_libraries(${PROJECT_NAME} + eCAL::core + protobuf::libprotobuf +) +target_include_directories(${PROJECT_NAME} PRIVATE ${RTSERVICEINCLUDE}) + + + diff --git a/__doc/.~lock.ECAL_Infos.odt# b/__doc/.~lock.ECAL_Infos.odt# new file mode 100644 index 0000000..aef11a2 --- /dev/null +++ b/__doc/.~lock.ECAL_Infos.odt# @@ -0,0 +1 @@ +,markus,U2204VM,15.04.2024 12:29,file:///home/markus/.config/libreoffice/4; \ No newline at end of file diff --git a/__doc/ECAL_Infos.odt b/__doc/ECAL_Infos.odt new file mode 100644 index 0000000000000000000000000000000000000000..4b1d40009b30248cfdc7486e4b46665694adff5a GIT binary patch literal 256694 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 vf0yupI-=O|?(^o{^>7g+MCQ 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 literal 0 HcmV?d00001 diff --git a/__logicsample/backend.c b/__logicsample/backend.c new file mode 100644 index 0000000..80bb741 --- /dev/null +++ b/__logicsample/backend.c @@ -0,0 +1,1057 @@ +/* +* logic_analyser_backend.c +* Implements the logic analyser backend to intereact with the GUI. +* +* Copyright (C) 2019, STMicroelectronics - All Rights Reserved +* Author: Michel Catrouillet michel.catrouillet@st.com for STMicroelectronics. +* +* License type: GPLv2 +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License version 2 as published by +* the Free Software Foundation. +* +* 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/. +* https://github.com/STMicroelectronics/meta-st-stm32mpu-app-logicanalyser/blob/kirkstone/recipes-graphics/st-software/logic-analyser-backend/backend.c +*/ + +#define _GNU_SOURCE /* To get DN_* constants from */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for usleep +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SAMP_SRAM_PACKET_SIZE (256*2) +#define SAMP_DDR_BUFFER_SIZE (1024*1024) + +#define TTY_CTRL_OPTS (CS8 | CLOCAL | CREAD) +#define TTY_INPUT_OPTS IGNPAR +#define TTY_OUTPUT_OPTS 0 +#define TTY_LOCAL_OPTS 0 + +#define DATA_BUF_POOL_SIZE 1024*1024 /* 1MB */ +#define MAX_BUF 80 + +#define PORT 8888 +#define GET 0 +#define POST 1 +#define POSTBUFFERSIZE 512 + +#define DMA_DDR_BUFF 1 +#define PHYS_RESERVED_REGION_ADDR 0xdb000000 +#define PHYS_RESERVED_REGION_SIZE 0x1000000 + +#define RPMSG_SDB_IOCTL_SET_EFD _IOW('R', 0x00, struct rpmsg_sdb_ioctl_set_efd *) +#define RPMSG_SDB_IOCTL_GET_DATA_SIZE _IOWR('R', 0x01, struct rpmsg_sdb_ioctl_get_data_size *) + +#define TIMEOUT 60 +#define NB_BUF 10 + +typedef struct +{ + int bufferId, eventfd; +} rpmsg_sdb_ioctl_set_efd; + +typedef struct +{ + int bufferId; + uint32_t size; +} rpmsg_sdb_ioctl_get_data_size; + +struct connection_info_struct +{ + int connectiontype; + char *answerstring; + struct MHD_PostProcessor *postprocessor; +}; + +struct MHD_Daemon *mHttpDaemon; + +char FIRM_NAME[50]; +struct timeval tval_before, tval_after, tval_result; + +typedef enum { + STATE_READY = 0, + STATE_SAMPLING_LOW, + STATE_SAMPLING_HIGH, +} machine_state_t; + +static char machine_state_str[5][13] = {"READY", "SAMPLING_LOW", "SAMPLING_HIGH"}; +static char SELECTED[10] = {" selected"}; +static char NOT_SELECTED[10] = {""}; +static char freq_unit_str[3][4] = {"MHz", "kHz", "Hz"}; +static char FREQU[3] = {'M', 'k', 'H'}; + +/* The file descriptor used to manage our TTY over RPMSG */ +static int mFdRpmsg[2] = {-1, -1}; + +/* The file descriptor used to manage our SDB over RPMSG */ +static int mFdSdbRpmsg = -1; + +static int virtual_tty_send_command(int len, char* commandStr); + +static char mByteBuffer[512]; +static char mByteBuffCpy[512]; +static int mNbReadTty = 0; + +static char mRxTraceBuffer[512]; + +static char mSamplingStr[15]; +static int32_t mSampFreq_Hz = 4; +static machine_state_t mMachineState; +static int32_t mSampParmCount; +static uint8_t mExitRequested = 0, mErrorDetected = 0; +static uint32_t mNbUncompData=0, mNbWrittenInFileData; +static uint32_t mNbUncompMB=0, mNbPrevUncompMB=0, mNbTty0Frame=0; +static uint8_t mDdrBuffAwaited; +static uint8_t mThreadCancel = 0; + +void* mmappedData[NB_BUF]; +static int fMappedData = 0; +FILE *pOutFile = NULL; +static char mFileNameStr[150]; +static pthread_t threadTTY, threadSDB, threadUI; + +static int efd[NB_BUF]; +static struct pollfd fds[NB_BUF]; + +static GtkWidget *window; +static GtkWidget *f_scale; +static GtkAdjustment *fadjustment; + +static GtkWidget *controlTitle_label; +static GtkWidget *fTitle_label; +static GtkWidget *fValue_label; +static GtkWidget *measurTitle_label; +static GtkWidget *state_label; +static GtkWidget *state_value; +static GtkWidget *nbCompData_label; +static GtkWidget *nbCompData_value; +static GtkWidget *nbRealData_label; +static GtkWidget *nbRealData_value; +static GtkWidget *nbRpmsgFrame_label ; +static GtkWidget *nbRpmsgFrame_value; +static GtkWidget *data_label; +static GtkWidget *data_value; +static GtkWidget *butSingle; +static GtkWidget *notchSetdata; + +/******************************************************************************** +Copro functions allowing to manage a virtual TTY over RPMSG +*********************************************************************************/ +int copro_isFwRunning(void) +{ + int fd; + size_t byte_read; + int result = 0; + unsigned char bufRead[MAX_BUF]; + char *user = getenv("USER"); + if (user && strncmp(user, "root", 4)) { + system("XTERM=xterm su root -c 'cat /sys/class/remoteproc/remoteproc0/state' > /tmp/remoteproc0_state"); + fd = open("/tmp/remoteproc0_state", O_RDONLY); + } else { + fd = open("/sys/class/remoteproc/remoteproc0/state", O_RDONLY); + } + if (fd < 0) { + printf("CA7 : Error opening remoteproc0/state, err=-%d\n", errno); + return (errno * -1); + } + byte_read = (size_t) read (fd, bufRead, MAX_BUF); + if (byte_read >= strlen("running")) { + char* pos = strstr((char*)bufRead, "running"); + if(pos) { + result = 1; + } + } + close(fd); + return result; +} + +int copro_stopFw(void) +{ + int fd; + char *user = getenv("USER"); + if (user && strncmp(user, "root",4)) { + system("su root -c 'echo stop > /sys/class/remoteproc/remoteproc0/state'"); + return 0; + } + fd = open("/sys/class/remoteproc/remoteproc0/state", O_RDWR); + if (fd < 0) { + printf("CA7 : Error opening remoteproc0/state, err=-%d\n", errno); + return (errno * -1); + } + write(fd, "stop", strlen("stop")); + close(fd); + return 0; +} + +int copro_startFw(void) +{ + int fd; + char *user = getenv("USER"); + if (user && strncmp(user, "root",4)) { + system("su root -c 'echo start > /sys/class/remoteproc/remoteproc0/state'"); + return 0; + } + fd = open("/sys/class/remoteproc/remoteproc0/state", O_RDWR); + if (fd < 0) { + printf("CA7 : Error opening remoteproc0/state, err=-%d\n", errno); + return (errno * -1); + } + write(fd, "start", strlen("start")); + close(fd); + return 0; +} + +int copro_getFwPath(char* pathStr) +{ + int fd; + int byte_read; + char *user = getenv("USER"); + if (user && strncmp(user, "root",4)) { + system("XTERM=xterm su root -c 'cat /sys/module/firmware_class/parameters/path' > /tmp/parameters_path"); + fd = open("/tmp/parameters_path", O_RDONLY); + } else { + fd = open("/sys/module/firmware_class/parameters/path", O_RDONLY); + } + if (fd < 0) { + printf("CA7 : Error opening firmware_class/parameters/path, err=-%d\n", errno); + return (errno * -1); + } + byte_read = read (fd, pathStr, MAX_BUF); + close(fd); + return byte_read; +} + +int copro_setFwPath(char* pathStr) +{ + int fd; + int result = 0; + char *user = getenv("USER"); + if (user && strncmp(user, "root",4)) { + char cmd[1024]; + snprintf(cmd, 1024, "su root -c 'echo %s > /sys/module/firmware_class/parameters/path'", pathStr); + system(cmd); + return strlen(pathStr); + } + fd = open("/sys/module/firmware_class/parameters/path", O_RDWR); + if (fd < 0) { + printf("CA7 : Error opening firmware_class/parameters/path, err=-%d\n", errno); + return (errno * -1); + } + result = write(fd, pathStr, strlen(pathStr)); + close(fd); + return result; +} + +int copro_getFwName(char* pathStr) +{ + int fd; + int byte_read; + char *user = getenv("USER"); + if (user && strncmp(user, "root",4)) { + system("XTERM=xterm su root -c 'cat /sys/class/remoteproc/remoteproc0/firmware' > /tmp/remoteproc0_firmware"); + fd = open("/tmp/remoteproc0_firmware", O_RDONLY); + } else { + fd = open("/sys/class/remoteproc/remoteproc0/firmware", O_RDWR); + } + if (fd < 0) { + printf("CA7 : Error opening remoteproc0/firmware, err=-%d\n", errno); + return (errno * -1); + } + byte_read = read (fd, pathStr, MAX_BUF); + close(fd); + return byte_read; +} + +int copro_setFwName(char* nameStr) +{ + int fd; + int result = 0; + char *user = getenv("USER"); + if (user && strncmp(user, "root",4)) { + char cmd[1024]; + snprintf(cmd, 1024, "su root -c 'echo %s > /sys/class/remoteproc/remoteproc0/firmware'", nameStr); + system(cmd); + return strlen(nameStr); + } + fd = open("/sys/class/remoteproc/remoteproc0/firmware", O_RDWR); + if (fd < 0) { + printf("CA7 : Error opening remoteproc0/firmware, err=-%d\n", errno); + return (errno * -1); + } + result = write(fd, nameStr, strlen(nameStr)); + close(fd); + return result; +} + +int copro_openTtyRpmsg(int ttyNb, int modeRaw) +{ + struct termios tiorpmsg; + char devName[50]; + sprintf(devName, "/dev/ttyRPMSG%d", ttyNb%2); + mFdRpmsg[ttyNb%2] = open(devName, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (mFdRpmsg[ttyNb%2] < 0) { + printf("CA7 : Error opening ttyRPMSG%d, err=-%d\n", ttyNb%2, errno); + return (errno * -1); + } +#if 1 + /* get current port settings */ + tcgetattr(mFdRpmsg[ttyNb%2],&tiorpmsg); + if (modeRaw) { +#if 0 + tiorpmsg.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP + | INLCR | IGNCR | ICRNL | IXON); + tiorpmsg.c_oflag &= ~OPOST; + tiorpmsg.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); + tiorpmsg.c_cflag &= ~(CSIZE | PARENB); + tiorpmsg.c_cflag |= CS8; +#else + memset(&tiorpmsg, 0, sizeof(tiorpmsg)); + tiorpmsg.c_cflag = TTY_CTRL_OPTS; + tiorpmsg.c_iflag = TTY_INPUT_OPTS; + tiorpmsg.c_oflag = TTY_OUTPUT_OPTS; + tiorpmsg.c_lflag = TTY_LOCAL_OPTS; + tiorpmsg.c_cc[VTIME] = 0; + tiorpmsg.c_cc[VMIN] = 1; + cfmakeraw(&tiorpmsg); +#endif + } else { + /* ECHO off, other bits unchanged */ + tiorpmsg.c_lflag &= ~ECHO; + /*do not convert LF to CR LF */ + tiorpmsg.c_oflag &= ~ONLCR; + } + if (tcsetattr(mFdRpmsg[ttyNb%2], TCSANOW, &tiorpmsg) < 0) { + printf("Error %d in copro_openTtyRpmsg(%d) tcsetattr", errno, ttyNb); + return (errno * -1); + } +#endif + return 0; +} + +int copro_closeTtyRpmsg(int ttyNb) +{ + close(mFdRpmsg[ttyNb%2]); + mFdRpmsg[ttyNb%2] = -1; + return 0; +} + +int copro_writeTtyRpmsg(int ttyNb, int len, char* pData) +{ + int result = 0; + if (mFdRpmsg[ttyNb%2] < 0) { + printf("CA7 : Error writing ttyRPMSG%d, fileDescriptor is not set\n", ttyNb%2); + return mFdRpmsg[ttyNb%2]; + } + + result = write(mFdRpmsg[ttyNb%2], pData, len); + return result; +} + +int copro_readTtyRpmsg(int ttyNb, int len, char* pData) +{ + int byte_rd, byte_avail; + int result = 0; + if (mFdRpmsg[ttyNb%2] < 0) { + printf("CA7 : Error reading ttyRPMSG%d, fileDescriptor is not set\n", ttyNb%2); + return mFdRpmsg[ttyNb%2]; + } + ioctl(mFdRpmsg[ttyNb%2], FIONREAD, &byte_avail); + if (byte_avail > 0) { + if (byte_avail >= len) { + byte_rd = read (mFdRpmsg[ttyNb%2], pData, len); + } else { + byte_rd = read (mFdRpmsg[ttyNb%2], pData, byte_avail); + } + //printf("CA7 : read successfully %d bytes to %p, [0]=0x%x\n", byte_rd, pData, pData[0]); + result = byte_rd; + } else { + result = 0; + } + return result; +} +/******************************************************************************** +End of Copro functions +*********************************************************************************/ + +void +print_time() { + struct timespec ts; + clock_gettime(1, &ts); + printf("Time: %lld\n", (ts.tv_sec * 1000LL) + (ts.tv_nsec / 1000000LL)); +} + +/******************************************************************************** +GTK UI functions +*********************************************************************************/ +static void +open_raw_file(void) { + time_t t = time(NULL); + struct tm tm = *localtime(&t); + sprintf(mFileNameStr, "/usr/local/demo/la/%04d%02d%02d-%02d%02d%02d.dat", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); + pOutFile = fopen(mFileNameStr,"wb"); +} + +static int32_t +write_raw_file(unsigned char* pData, unsigned int size) { + // perform the write by packets of 4kB + int rest2write = size; + int index = 0; + int size2write = 4096; + int writtenSize = 0; + do { + if (rest2write < 4096) { + size2write = rest2write; + } + writtenSize += fwrite(pData+index, 1, size2write, pOutFile); + rest2write -= size2write; + index += size2write; + } while (rest2write > 0); + return writtenSize; +} + +static void +close_raw_file(void) { + if (pOutFile != NULL) { + fclose(pOutFile); + pOutFile = NULL; + } +} + +static gboolean refreshUI_CB (gpointer data) +{ + char tmpStr[200]; + + if (mMachineState >= STATE_SAMPLING_LOW) { + gtk_button_set_label (GTK_BUTTON (butSingle), "Stop"); + } else { + gtk_button_set_label (GTK_BUTTON (butSingle), "Start"); + } + gtk_label_set_text (GTK_LABEL (state_value), machine_state_str[mMachineState]); + sprintf(tmpStr, "%uMB : %u", mNbUncompMB, mNbUncompData); + gtk_label_set_text (GTK_LABEL (nbRealData_value), tmpStr); + sprintf(tmpStr, "%u", mNbTty0Frame); + gtk_label_set_text (GTK_LABEL (nbRpmsgFrame_value), tmpStr); + //gtk_label_set_text (GTK_LABEL (fileName_value), mFileNameStr); + sprintf(tmpStr, "%x", mByteBuffCpy[0]); + gtk_label_set_text (GTK_LABEL (data_value), tmpStr); + + gtk_widget_show_all(window); + + return FALSE; +} + +static void single_clicked (GtkWidget *widget, gpointer data) +{ + char setData = 'n'; + if (mMachineState == STATE_READY) { + if (mSampFreq_Hz > 5) { + mMachineState = STATE_SAMPLING_HIGH; + } else { + mMachineState = STATE_SAMPLING_LOW; + } + mNbUncompData=0; + mNbPrevUncompMB = 0; + mNbUncompMB = 0; + mNbWrittenInFileData=0; + mDdrBuffAwaited=0; + mNbTty0Frame=0; + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (notchSetdata))) { + setData = 'y'; + } + // build sampling string + sprintf(mSamplingStr, "S%03dMs%c", mSampFreq_Hz, setData); + printf("CA7 : Start sampling at %dMHz\n", mSampFreq_Hz); + virtual_tty_send_command(strlen(mSamplingStr), mSamplingStr); + gdk_threads_add_idle (refreshUI_CB, window); + } else if (mMachineState >= STATE_SAMPLING_LOW) { + mMachineState = STATE_READY; + printf("CA7 : Stop sampling\n"); + virtual_tty_send_command(strlen("Exit"), "Exit"); + gdk_threads_add_idle (refreshUI_CB, window); + } else { + printf("CA7 : Start sampling param error: mMachineState=%d mSampFreq_Hz=%d \n", + mMachineState, mSampFreq_Hz); + } +} + +static void f_scale_moved (GtkRange *range, gpointer user_data) +{ + GtkWidget *label = user_data; + + gdouble pos = gtk_range_get_value (range); + gdouble val = 1 + 11 * pos / 100; + gchar *str = g_strdup_printf ("%.0f", val); + mSampFreq_Hz = atoi(str); + gtk_label_set_text (GTK_LABEL (label), str); + printf("CA7 : fscale = %d\n", mSampFreq_Hz); + + g_free(str); +} + +void *ui_thread(void *arg) +{ + + GtkWidget *mainGrid; + char tmpStr[100]; + + time_t t = time(NULL); + struct tm tm = *localtime(&t); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "STHowToM4ToA7LargeDataExchange"); + g_signal_connect (window, "destroy", + G_CALLBACK (gtk_main_quit), NULL); + gtk_container_set_border_width (GTK_CONTAINER (window), 10); + gtk_window_fullscreen(GTK_WINDOW (window)); + + GtkCssProvider *provider = gtk_css_provider_new (); + gtk_css_provider_load_from_path (provider, "/usr/local/demo/la/bin/la.css", NULL); + + GdkDisplay* Display = gdk_display_get_default(); + GdkScreen* Screen = gdk_display_get_default_screen(Display); + gtk_style_context_add_provider_for_screen(Screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER); + + controlTitle_label = gtk_label_new ("Control"); + gtk_widget_set_name(controlTitle_label, "title1"); + + fTitle_label = gtk_label_new ("Sampling freq. (MHz) :"); + gtk_label_set_xalign (GTK_LABEL (fTitle_label), 0); + gtk_widget_set_name(fTitle_label, "header"); + + fValue_label = gtk_label_new ("4"); + gtk_label_set_xalign (GTK_LABEL (fValue_label), 0); + gtk_widget_set_name(fValue_label, "value"); + + fadjustment = gtk_adjustment_new (16, 0, 100, 5, 10, 0); + f_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, fadjustment); + gtk_scale_set_draw_value (GTK_SCALE (f_scale), FALSE); + g_object_set (GTK_SCALE (f_scale), "expand", TRUE, NULL); + + g_signal_connect (f_scale, + "value-changed", + G_CALLBACK (f_scale_moved), + fValue_label); + + measurTitle_label = gtk_label_new ("Measurements"); + gtk_widget_set_name(measurTitle_label, "title1"); + + state_label = gtk_label_new ("Machine state :"); + gtk_label_set_xalign (GTK_LABEL (state_label), 0); + gtk_widget_set_name(state_label, "header"); + state_value = gtk_label_new (""); + gtk_label_set_xalign (GTK_LABEL (state_value), 0); + gtk_widget_set_name(state_value, "value"); + + nbRealData_label = gtk_label_new ("Nb of received data :"); + gtk_label_set_xalign (GTK_LABEL (nbRealData_label), 0); + gtk_widget_set_name(nbRealData_label, "header"); + nbRealData_value = gtk_label_new (""); + gtk_label_set_xalign (GTK_LABEL (nbRealData_value), 0); + gtk_widget_set_name(nbRealData_value, "value"); + + nbRpmsgFrame_label = gtk_label_new ("Nb of RPMSG data frame :"); + gtk_label_set_xalign (GTK_LABEL (nbRpmsgFrame_label ), 0); + gtk_widget_set_name(nbRpmsgFrame_label, "header"); + + nbRpmsgFrame_value = gtk_label_new (""); + gtk_label_set_xalign (GTK_LABEL (nbRpmsgFrame_value), 0); + gtk_widget_set_name(nbRpmsgFrame_value, "value"); + + data_label = gtk_label_new ("Data :"); + gtk_label_set_xalign (GTK_LABEL (data_label), 0); + gtk_widget_set_name(data_label, "header"); + + data_value = gtk_label_new (""); + gtk_label_set_xalign (GTK_LABEL (data_value), 0); + gtk_widget_set_name(data_value, "value"); + + gtk_label_set_text (GTK_LABEL (state_value), machine_state_str[mMachineState]); + sprintf(tmpStr, "%u", mNbUncompData); + gtk_label_set_text (GTK_LABEL (nbCompData_value), tmpStr); + sprintf(tmpStr, "%u", mNbUncompData); + gtk_label_set_text (GTK_LABEL (nbRealData_value), tmpStr); + sprintf(tmpStr, "%u", mNbWrittenInFileData); + gtk_label_set_text (GTK_LABEL (nbRpmsgFrame_value), tmpStr); + + butSingle = gtk_button_new_with_label("Start"); + g_signal_connect(butSingle, + "clicked", + G_CALLBACK (single_clicked), + NULL); + gtk_style_context_add_class( + gtk_widget_get_style_context(GTK_WIDGET(butSingle)), "circular"); + gtk_widget_set_name(butSingle, "mybutt"); + + notchSetdata = gtk_check_button_new_with_label("Set DATA"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(notchSetdata), FALSE); + + + mainGrid = gtk_grid_new (); + gtk_grid_set_row_spacing (GTK_GRID (mainGrid), 5); + gtk_grid_set_column_spacing (GTK_GRID (mainGrid), 20); + // Control title in (0,0) is 3 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), controlTitle_label, 0, 0, 3, 1); + // Freq. title in (0,1) is 1 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), fTitle_label, 0, 1, 1, 1); + // Freq. value in (1,1) is 1 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), fValue_label, 1, 1, 1, 1); + // Freq. scale in (2,1) is 1 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), f_scale, 2, 1, 1, 1); + + // Start button in (0,2) is 2 column large & 2 row high + gtk_grid_attach (GTK_GRID (mainGrid), butSingle, 0, 2, 2, 2); + + // SetDATA notch in (3,2) is 2 column large & 2 row high + gtk_grid_attach (GTK_GRID (mainGrid), notchSetdata, 2, 2, 2, 1); + + // Measurement title in (0,4) is 3 columns large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), measurTitle_label, 0, 4, 3, 1); + // State label in (0,5) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), state_label, 0, 5, 2, 1); + // State value in (2,5) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), state_value, 2, 5, 2, 1); + + // Real data label in (0,7) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), nbRealData_label, 0, 6, 2, 1); + // Real data value in (2,7) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), nbRealData_value, 2, 6, 2, 1); + + // Nb of RPMSG frame label in (0,8) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), nbRpmsgFrame_label, 0, 7, 2, 1); + // Nb of RPMSG frame value in (2,8) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), nbRpmsgFrame_value, 2, 7, 2, 1); + + + // Data label in (0,9) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), data_label, 0, 8, 2, 1); + // File name value in (2,9) is 2 column large & 1 row high + gtk_grid_attach (GTK_GRID (mainGrid), data_value, 2, 8, 2, 1); + + gtk_grid_set_row_homogeneous (GTK_GRID (mainGrid), TRUE); + + gtk_container_add (GTK_CONTAINER (window), mainGrid); + + gtk_widget_show_all(window); + + + gtk_main (); + return 0; +} + +/************************************************************************************* +End of GTK UI functions +*************************************************************************************/ + +static void sleep_ms(int milliseconds) +{ + usleep(milliseconds * 1000); +} + +static int virtual_tty_send_command(int len, char* commandStr) { + + struct timespec ts; + clock_gettime(1, &ts); + printf("CA7 [%lld] : virtual_tty_send_command len=%d => %s\n", + (ts.tv_sec * 1000LL) + (ts.tv_nsec / 1000000LL), len, commandStr); + return copro_writeTtyRpmsg(0, len, commandStr); +} + +size_t getFilesize(const char* filename) { + struct stat st; + stat(filename, &st); + return st.st_size; +} + +void incatchr(int signum){ + printf("%s!\n",__func__); +} + +void exit_fct(int signum) +{ + gtk_main_quit(); + mThreadCancel = 1; + sleep_ms(100); + if (fMappedData) { + for (int i=0;i 0) { + mNbTty0Frame++; + mNbUncompData += read0; + + mNbUncompMB = mNbUncompData / 1024 / 1024; + if (mNbUncompMB != mNbPrevUncompMB) { + // a new MB has been received, update display + mNbPrevUncompMB = mNbUncompMB; + mByteBuffCpy[0] = mByteBuffer[0]; + gdk_threads_add_idle (refreshUI_CB, window); + } + } + + // tty1 is dedicated to trace of M4 + read1 = copro_readTtyRpmsg(1, 512, mRxTraceBuffer); + mRxTraceBuffer[read1] = 0; // to be sure to get a end of string + if (read1 > 0) { + if (strcmp(mRxTraceBuffer, "CM4 : DMA TransferError") == 0) { + // sampling is aborted, refresh the UI + mErrorDetected = 1; + //mMachineState = STATE_READY; + //gdk_threads_add_idle (refreshUI_CB, window); + } + gettimeofday(&tval_after, NULL); + timersub(&tval_after, &tval_before, &tval_result); + if (mRxTraceBuffer[0] == 'C') { + printf("[%ld.%06ld] : %s\n", + (long int)tval_result.tv_sec, (long int)tval_result.tv_usec, + mRxTraceBuffer); + } else { + printf("[%ld.%06ld] : CA7 : tty1 got %d [%x] bytes\n", + (long int)tval_result.tv_sec, (long int)tval_result.tv_usec, + read1, mRxTraceBuffer[0]); + } + } + //usleep(500); + + //sleep_ms(1); // give time to UI + } + return 0; +} + +void *sdb_thread(void *arg) +{ + int ret, rc, i, n; + int buffIdx = 0; + char buf[16]; + char dbgmsg[80]; + rpmsg_sdb_ioctl_get_data_size q_get_data_size; + char *filename = "/dev/rpmsg-sdb"; + rpmsg_sdb_ioctl_set_efd q_set_efd; + + mFdSdbRpmsg = open(filename, O_RDWR); + assert(mFdSdbRpmsg != -1); + for (i=0;i buf[%d] is empty\n", mDdrBuffAwaited); + } + mDdrBuffAwaited++; + if (mDdrBuffAwaited >= NB_BUF) { + mDdrBuffAwaited = 0; + } + } else { + // we face message lost due to SDB driver not managing RPMSG DATA containing several messages + // in this case, just treat several message + mDdrBuffAwaited++; + if (mDdrBuffAwaited >= NB_BUF) { + mDdrBuffAwaited = 0; + } + if (fds[mDdrBuffAwaited].revents & POLLIN) { + rc = read(efd[mDdrBuffAwaited], buf, 16); + if (!rc) { + printf("CA7 : stdin closed\n"); + return 0; + } + /* Get buffer data size*/ + q_get_data_size.bufferId = mDdrBuffAwaited; + + if(ioctl(mFdSdbRpmsg, RPMSG_SDB_IOCTL_GET_DATA_SIZE, &q_get_data_size) < 0) { + error(EXIT_FAILURE, errno, "Failed to get data size"); + } + + if (q_get_data_size.size) { + mNbUncompMB += 2; + mNbUncompData += q_get_data_size.size; + mNbUncompData += q_get_data_size.size; // need twice as we missed one + unsigned char* pData = (unsigned char*)mmappedData[mDdrBuffAwaited]; + // save a copy of 1st data + mByteBuffCpy[0] = *pData; + gettimeofday(&tval_after, NULL); + timersub(&tval_after, &tval_before, &tval_result); + printf("[%ld.%06ld] sdb_thread data EVENT mDdrBuffAwaited=%d mNbUncompData=%u \n", + (long int)tval_result.tv_sec, (long int)tval_result.tv_usec, mDdrBuffAwaited, + mNbUncompData); + gdk_threads_add_idle (refreshUI_CB, window); + } + else { + printf("CA7 : sdb_thread => buf[%d] is empty\n", mDdrBuffAwaited); + } + mDdrBuffAwaited++; + if (mDdrBuffAwaited >= NB_BUF) { + mDdrBuffAwaited = 0; + } + } else { + // we may have started the timeout, but have stopped and started sampling in RPMSG + if (mMachineState == STATE_SAMPLING_HIGH) { + n = 0; + for (i=0; i use rpmsg-sdb driver to perform CMA buff allocation ******/ + + mMachineState = STATE_READY; + mSampFreq_Hz = 4; + mSampParmCount = 0; + + gtk_init (&argc, &argv); + + if (pthread_create( &threadUI, NULL, ui_thread, NULL) != 0) { + printf("CA7 : ui_thread creation fails\n"); + goto end; + } + + printf("CA7 : Entering in Main loop\n"); + + while (1) { + if (mExitRequested) break; + if (mErrorDetected) { + if (mMachineState >= STATE_SAMPLING_LOW) { + virtual_tty_send_command(strlen("Exit"), "Exit"); + if (mErrorDetected == 2) printf("CA7 : ERROR in DDR Buffer order => Stop sampling!!!\n"); + //else if (mErrorDetected == 2) printf("CA7 : File System full => Stop sampling!!!\n"); + else if (mErrorDetected == 1) printf("CA7 : M4 reported DMA error !!!\n"); + mErrorDetected = 0; + mMachineState = STATE_READY; + gdk_threads_add_idle (refreshUI_CB, window); +#if 0 + close_raw_file(); +#endif + } + } + sleep_ms(1); // give time to UI + } + for (i=0;i + * + * Copyright (C) 2018, STMicroelectronics - All Rights Reserved + * Author: YOUR NAME <> for STMicroelectronics. + * + * License type: GPLv2 + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + * + * 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 + * . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define USER_GPIO_OFFSET 13 + +int running = 0; +int gpio13_pressed = 0; +int gpio14_pressed = 0; +static pthread_t thread_ioctl1; +static pthread_t thread_ioctl2; +pthread_mutex_t keybMutex; +struct gpioevent_request ereq1, ereq2; +struct gpioevent_data event1, event2; + +static void sleep_ms(int milliseconds) +{ + usleep(milliseconds * 1000); +} + +/***************** configure_userbutton ***************************/ +int configure_userbutton(struct gpioevent_request *ereq, int offset) +{ + char chrdev_name[20]; + int fd,ret; + + strcpy(chrdev_name, "/dev/gpiochip0"); + + /* Open device: gpiochip0 for GPIO bank A */ + fd = open(chrdev_name, 0); + + if (fd == -1) { + ret = -errno; + fprintf(stderr, "Failed to open %s\n", chrdev_name); + return ret; + } + + /* request GPIO line for Button activation*/ + memset(ereq,0,sizeof(struct gpioevent_request)); + ereq->lineoffset = offset; + ereq->handleflags = GPIOHANDLE_REQUEST_INPUT; + ereq->eventflags = GPIOEVENT_EVENT_FALLING_EDGE; + sprintf(ereq->consumer_label, "User PA%02d", offset); + + ret = ioctl(fd, GPIO_GET_LINEEVENT_IOCTL, ereq); + if (ret == -1) { + ret = -errno; + fprintf(stderr, "Failed to issue GET event1 IOCTL (%d)\n",ret); + return ret; + } + + close(fd); + return 0; +} + +void *ioctl1_thread(void *arg) +{ + int ret; + while (1) { + /* read User button input event1 */ + ret = read(ereq1.fd, &event1, sizeof(event1)); + if (ret == -1) { + if (errno == -EAGAIN) { + fprintf(stderr, "nothing available\n"); + continue; + } else { + ret = -errno; + fprintf(stderr, "Failed to read event1 (%d)\n",ret); + break; + } + } + if (ret != sizeof(event1)) { + fprintf(stderr, "Reading event1 failed\n"); + ret = -EIO; + break; + } + + /* process the event1 received */ + switch (event1.id) { + case GPIOEVENT_EVENT_FALLING_EDGE: + printf("GPIO13 GPIOEVENT_EVENT_FALLING_EDGE\n"); + pthread_mutex_lock(&keybMutex); + gpio13_pressed = 1; + pthread_mutex_unlock(&keybMutex); + break; + default: + fprintf(stdout, "unknown event1\n"); + } + } +} + +void *ioctl2_thread(void *arg) +{ + int ret; + while (1) { + /* read User button input event2 */ + ret = read(ereq2.fd, &event2, sizeof(event2)); + if (ret == -1) { + if (errno == -EAGAIN) { + fprintf(stderr, "nothing available\n"); + continue; + } else { + ret = -errno; + fprintf(stderr, "Failed to read event2 (%d)\n",ret); + break; + } + } + if (ret != sizeof(event2)) { + fprintf(stderr, "Reading event2 failed\n"); + ret = -EIO; + break; + } + + /* process the event2 received */ + switch (event2.id) { + case GPIOEVENT_EVENT_FALLING_EDGE: + printf("GPIO14 GPIOEVENT_EVENT_FALLING_EDGE\n"); + pthread_mutex_lock(&keybMutex); + gpio14_pressed = 1; + pthread_mutex_unlock(&keybMutex); + break; + default: + fprintf(stdout, "unknown event2\n"); + } + } +} + + +int main(int argc, char **argv) +{ + int ret=0; + + printf("read keyb event thread\n"); + + if ((getuid ()) != 0) { + fprintf(stderr, "You are not root! This may not work...\n"); + return 0; + } + + /* configure USER button */ + if (configure_userbutton(&ereq1, 14) < 0){ + perror("GPIO_A14 export issue"); + goto quit; + } + if (configure_userbutton(&ereq2, 13) < 0){ + perror("GPIO_A13 export issue"); + goto quit; + } + if (pthread_create( &thread_ioctl1, NULL, ioctl1_thread, NULL) != 0) { + printf("greio_receiver_thread creation fails\n"); + goto quit; + } + if (pthread_create( &thread_ioctl2, NULL, ioctl2_thread, NULL) != 0) { + printf("greio_receiver_thread creation fails\n"); + goto quit; + } + pthread_mutex_init(&keybMutex, NULL); + + while(1) { + sleep_ms(1); + pthread_mutex_lock(&keybMutex); + if (gpio13_pressed) { + gpio13_pressed = 0; + system("/usr/local/demo/la/run_la.sh"); + } else if (gpio14_pressed) { + gpio14_pressed = 0; + system("/usr/local/demo/la/run_la.sh"); + } + pthread_mutex_unlock(&keybMutex); + } + return EXIT_SUCCESS; + +quit: + return 0; +} diff --git a/__logicsample/testMQ.c b/__logicsample/testMQ.c new file mode 100644 index 0000000..d56b092 --- /dev/null +++ b/__logicsample/testMQ.c @@ -0,0 +1,64 @@ +#include +#include +#include + +namespace bip = boost::interprocess; +using MQ = bip::message_queue; + +template +static inline void safe_copy(std::array& dst, std::string_view src) { + std::copy_n(src.data(), std::min(src.size(), N), dst.data()); + dst.back() = 0; // make sure of NUL termination +} + +struct AccessQueue { + std::array name{0}; + std::array action{0}; + + AccessQueue(std::string_view n = "", std::string_view a = "") { + safe_copy(name, n); + safe_copy(action, a); + } +}; + +static_assert(std::is_standard_layout_v); + +struct X { + void send() { + AccessQueue packet("asd", "vsq"); + try { + mq.send(&packet, sizeof(packet), 0); + } catch(std::exception const & ex) { + std::cout << ex.what() << std::endl; + } + } + + AccessQueue receive() { + AccessQueue retval; + + report(); + try { + unsigned int priority; + MQ::size_type recvd_size; + mq.try_receive(&retval, sizeof(AccessQueue), recvd_size, priority); + } catch(std::exception const & ex) { + std::cout << ex.what() << std::endl; + } + report(); + return retval; + } + + void report() { + std::cout << mq.get_num_msg() << "\t" << mq.get_max_msg_size() << "\t" << mq.get_max_msg() << std::endl; + } + + MQ mq { bip::open_or_create, "somequeue", 10, sizeof(AccessQueue) }; +}; + +int main() { + X tryit; + tryit.send(); + auto const& [name, action] = tryit.receive(); + + std::cout << std::quoted(name.data()) << " " << std::quoted(action.data()) << std::endl; +} diff --git a/include/GILLock.h b/include/GILLock.h new file mode 100644 index 0000000..854123e --- /dev/null +++ b/include/GILLock.h @@ -0,0 +1,21 @@ +#include +#include + + + +//Use this class in a c++ funktion that called into python : c++ => python +class PyLockGIL +{ + +public: + + PyLockGIL(); + + ~PyLockGIL(); + + PyLockGIL(const PyLockGIL&) = delete; + PyLockGIL& operator=(const PyLockGIL&) = delete; + +private: + PyGILState_STATE m_gstate; +}; diff --git a/include/RTSCoproHelper.h b/include/RTSCoproHelper.h new file mode 100644 index 0000000..127ed7e --- /dev/null +++ b/include/RTSCoproHelper.h @@ -0,0 +1,37 @@ +/* +*/ + +#include + + +class RTSCoproHelper +{ +private: + /* data */ + //lock Element + int mFdRpmsg[2] = {-1, -1}; + +public: + + RTSCoproHelper(/* args */); + ~RTSCoproHelper(); + + int Init(std::string fwPath, std::string fwName); + + int Copro_isFwRunning(void); + + int Copro_openTtyRpmsg(int ttyNb, int modeRaw); + int Copro_closeTtyRpmsg(int ttyNb); + int Copro_writeTtyRpmsg(int ttyNb, int len, char* pData); + int Copro_readTtyRpmsg(int ttyNb, int len, char* pData); + int Copro_stopFw(void); + int Copro_startFw(void); + +private: + + int Copro_getFwPath(char* pathStr); + int Copro_setFwPath(char* pathStr); + int Copro_getFwName(char* pathStr); + int Copro_setFwName(char* nameStr); + +}; diff --git a/include/RTSMonFrame.h b/include/RTSMonFrame.h new file mode 100644 index 0000000..93b0789 --- /dev/null +++ b/include/RTSMonFrame.h @@ -0,0 +1,60 @@ +/* +*/ + +#include +#include + + +class RTSMonFrame +{ +private: + /* data */ + std::string id; + int samplerate; + int sampleperiod; + int downtime; + std::list items; + +public: + + RTSMonFrame(std::string id, int samplerate, int sampleperiod, int downtime) { + this->id = id; + this->samplerate = samplerate; + this->sampleperiod = sampleperiod; + this->downtime = downtime; + } + + RTSMonFrame(std::string id) { + this->id = id; + } + + RTSMonFrame(RTSMonFrame& rtsMonFrameCopy) { + this->id = rtsMonFrameCopy.GetId(); + } + + ~RTSMonFrame(); + + void Add(std::string item){ + this->items.push_back(item); + } + std::string GetId() { + return this->id; + } + + int GetSampleRate() { + return this->samplerate; + } + + int GetSamplePeriod(){ + return this->sampleperiod; + } + + int GetDownTime(){ + return this->downtime; + } + + std::list& GetItems() { + return this->items; + } + +}; diff --git a/include/RTSMonitoringTask.h b/include/RTSMonitoringTask.h new file mode 100644 index 0000000..f4bd9ef --- /dev/null +++ b/include/RTSMonitoringTask.h @@ -0,0 +1,41 @@ +/* +*/ +#include "RTSCoproHelper.h" +#include "RTSMonFrame.h" +#include +#include +#include + + + + +class RTSMonitoringTask +{ +private: + /* data */ + //lock Element + + /* The file descriptor used to manage our TTY over RPMSG */ + int mFdRpmsg[2] = {-1, -1}; + RTSCoproHelper coproHelper; + + std::map rtsMonFrames; + + pthread_t monThread; + +public: + + RTSMonitoringTask(/* args */); + ~RTSMonitoringTask(); + + //static RTSMonitoringTask& Instance(); + bool Init(); + bool CreateMonitoring(std::string id, int samplerate, int sampleperiod, int downtime, std::string status); + bool LoadFW(); + bool Start(); + bool Stop(); + +private: + static void* Run(void *obj); + +}; diff --git a/include/RTSMonitoringTask.h.old b/include/RTSMonitoringTask.h.old new file mode 100644 index 0000000..efff49e --- /dev/null +++ b/include/RTSMonitoringTask.h.old @@ -0,0 +1,39 @@ +/* +*/ +#include "../../include/RTSCoproHelper.h" + + +class RTSMonitoringTask +{ +public: + + typedef enum RTSMonitoringTaskState { + OFF= 0, + LOADED = 1, + READY = 2, + }; + +private: + /* data */ + //lock Element + + /* The file descriptor used to manage our TTY over RPMSG */ + int mFdRpmsg[2] = {-1, -1}; + RTSCoproHelper coproHelper; + RTSMonitoringTaskState rtsState=RTSMonitoringTaskState::OFF; + +public: + + RTSMonitoringTask(/* args */); + + ~RTSMonitoringTask(); + + bool Init(); + bool LoadFW(); + bool Start(); + bool Stop(); + + +private: + +}; diff --git a/include/RelGILLock.h b/include/RelGILLock.h new file mode 100644 index 0000000..347be4d --- /dev/null +++ b/include/RelGILLock.h @@ -0,0 +1,19 @@ +#include +#include + + +//Use this class in a c++ funktion that is called from python : python => c++ +class PyRelinquishGIL +{ + +public: + PyRelinquishGIL(); + + ~PyRelinquishGIL(); + + PyRelinquishGIL(const PyRelinquishGIL&) = delete; + PyRelinquishGIL& operator=(const PyRelinquishGIL&) = delete; + +private: + PyThreadState* m_thread_state; +}; diff --git a/include/json.hpp b/include/json.hpp new file mode 100644 index 0000000..a858728 --- /dev/null +++ b/include/json.hpp @@ -0,0 +1,24766 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 3 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +inline constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple +#include // char_traits + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(EOF); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(EOF); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template