From d04b7008099e4d0862609e50d79803f7e694cac3 Mon Sep 17 00:00:00 2001 From: kin-fuyuki Date: Tue, 17 Feb 2026 01:35:06 -0300 Subject: [PATCH] movind stuf around --- .gitmodules | 15 + built/launcher/linux/res/btn.png | Bin 159 -> 0 bytes built/launcher/linux/res/btnhover.png | Bin 166 -> 0 bytes built/launcher/linux/res/btnpress.png | Bin 165 -> 0 bytes built/launcher/linux/res/exit.png | Bin 754 -> 0 bytes built/launcher/linux/res/forebutton.png | Bin 2963 -> 0 bytes built/launcher/linux/res/forebuttonon.png | Bin 2043 -> 0 bytes built/launcher/linux/res/forums.png | Bin 1020 -> 0 bytes built/launcher/linux/res/help.png | Bin 794 -> 0 bytes built/launcher/linux/res/info.ttf | Bin 66676 -> 0 bytes built/launcher/linux/res/launcher.png | Bin 11748 -> 0 bytes built/launcher/linux/res/lockbutton.png | Bin 2767 -> 0 bytes built/launcher/linux/res/log.ttf | Bin 24220 -> 0 bytes built/launcher/linux/res/options.png | Bin 1048 -> 0 bytes built/launcher/linux/res/playoff.png | Bin 6082 -> 0 bytes built/launcher/linux/res/playon.png | Bin 5976 -> 0 bytes built/launcher/linux/res/showcase.ttf | Bin 69692 -> 0 bytes built/launcher/linux/res/update.png | Bin 1139 -> 0 bytes built/launcher/linux/res/verify.png | Bin 965 -> 0 bytes built/launcher/linux/res/versions.png | Bin 1206 -> 0 bytes built/launcher/linux/res/website.png | Bin 1126 -> 0 bytes engine/CMakeLists.txt | 59 - engine/src/aud.h | 0 engine/src/engine.cpp | 1 - engine/src/engine.h | 14 - engine/src/gr.h | 2 - engine/src/graph/window.h | 1 - engine/src/net.h | 0 engine/src/program.cpp | 17 - engine/src/program.h | 46 - engine/src/resmgr.h | 12 - engine/src/scenes/node2d.h | 338 - engine/src/scenes/node2drelative.h | 423 - engine/src/scenes/nodes.h | 27 - engine/src/scenes/scene.h | 38 - engine/test.cpp | 53 - engine/test/libenginend.so | 1 - engine/test/libraylib.so.550 | 1 - games/endlauncher/CMakeLists.txt | 22 - games/endlauncher/src/main.cpp | 356 - games/endlauncher/src/netio.cpp | 5 - games/endlauncher/src/netio.h | 229 - games/forespend/CMakeLists.txt | 22 - games/forespend/src/client/client.cpp | 33 - games/forespend/src/client/client.h | 15 - .../src/client/scenes/configmenu.cpp | 31 - .../forespend/src/client/scenes/configmenu.h | 11 - games/forespend/src/client/scenes/game.cpp | 1 - games/forespend/src/client/scenes/game.h | 7 - .../forespend/src/client/scenes/mainmenu.cpp | 1 - games/forespend/src/client/scenes/mainmenu.h | 33 - games/forespend/src/main.cpp | 57 - games/forespend/src/server/server.cpp | 8 - games/forespend/src/server/server.h | 14 - include/enginend/aud.h | 0 include/enginend/engine.h | 14 - include/enginend/gr.h | 2 - include/enginend/graph/window.h | 1 - include/enginend/net.h | 0 include/enginend/program.h | 46 - include/enginend/resmgr.h | 12 - include/enginend/scenes/node2d.h | 338 - include/enginend/scenes/node2drelative.h | 417 - include/enginend/scenes/nodes.h | 26 - include/enginend/scenes/scene.h | 38 - include/incmgr.h | 7 - include/json.h | 25712 ---------------- lib/enginend | 1 + lib/raylib | 1 - lib/sdl2 | 1 + lib/sdl3 | 1 + lib/tiny | 1 + lib/tiny-lua | 1 + link/FILESARELINKEDFROMHERE | 0 versions.tdf | 4 +- 75 files changed, 22 insertions(+), 28494 deletions(-) delete mode 100644 built/launcher/linux/res/btn.png delete mode 100644 built/launcher/linux/res/btnhover.png delete mode 100644 built/launcher/linux/res/btnpress.png delete mode 100644 built/launcher/linux/res/exit.png delete mode 100644 built/launcher/linux/res/forebutton.png delete mode 100644 built/launcher/linux/res/forebuttonon.png delete mode 100644 built/launcher/linux/res/forums.png delete mode 100644 built/launcher/linux/res/help.png delete mode 100644 built/launcher/linux/res/info.ttf delete mode 100644 built/launcher/linux/res/launcher.png delete mode 100644 built/launcher/linux/res/lockbutton.png delete mode 100644 built/launcher/linux/res/log.ttf delete mode 100644 built/launcher/linux/res/options.png delete mode 100644 built/launcher/linux/res/playoff.png delete mode 100644 built/launcher/linux/res/playon.png delete mode 100644 built/launcher/linux/res/showcase.ttf delete mode 100644 built/launcher/linux/res/update.png delete mode 100644 built/launcher/linux/res/verify.png delete mode 100644 built/launcher/linux/res/versions.png delete mode 100644 built/launcher/linux/res/website.png delete mode 100644 engine/CMakeLists.txt delete mode 100644 engine/src/aud.h delete mode 100644 engine/src/engine.cpp delete mode 100644 engine/src/engine.h delete mode 100644 engine/src/gr.h delete mode 100644 engine/src/graph/window.h delete mode 100644 engine/src/net.h delete mode 100644 engine/src/program.cpp delete mode 100644 engine/src/program.h delete mode 100644 engine/src/resmgr.h delete mode 100644 engine/src/scenes/node2d.h delete mode 100644 engine/src/scenes/node2drelative.h delete mode 100644 engine/src/scenes/nodes.h delete mode 100644 engine/src/scenes/scene.h delete mode 100644 engine/test.cpp delete mode 120000 engine/test/libenginend.so delete mode 120000 engine/test/libraylib.so.550 delete mode 100644 games/endlauncher/CMakeLists.txt delete mode 100644 games/endlauncher/src/main.cpp delete mode 100644 games/endlauncher/src/netio.cpp delete mode 100644 games/endlauncher/src/netio.h delete mode 100644 games/forespend/CMakeLists.txt delete mode 100644 games/forespend/src/client/client.cpp delete mode 100644 games/forespend/src/client/client.h delete mode 100644 games/forespend/src/client/scenes/configmenu.cpp delete mode 100644 games/forespend/src/client/scenes/configmenu.h delete mode 100644 games/forespend/src/client/scenes/game.cpp delete mode 100644 games/forespend/src/client/scenes/game.h delete mode 100644 games/forespend/src/client/scenes/mainmenu.cpp delete mode 100644 games/forespend/src/client/scenes/mainmenu.h delete mode 100644 games/forespend/src/main.cpp delete mode 100644 games/forespend/src/server/server.cpp delete mode 100644 games/forespend/src/server/server.h delete mode 100644 include/enginend/aud.h delete mode 100644 include/enginend/engine.h delete mode 100644 include/enginend/gr.h delete mode 100644 include/enginend/graph/window.h delete mode 100644 include/enginend/net.h delete mode 100644 include/enginend/program.h delete mode 100644 include/enginend/resmgr.h delete mode 100644 include/enginend/scenes/node2d.h delete mode 100644 include/enginend/scenes/node2drelative.h delete mode 100644 include/enginend/scenes/nodes.h delete mode 100644 include/enginend/scenes/scene.h delete mode 100644 include/incmgr.h delete mode 100644 include/json.h create mode 160000 lib/enginend delete mode 160000 lib/raylib create mode 160000 lib/sdl2 create mode 160000 lib/sdl3 create mode 160000 lib/tiny create mode 160000 lib/tiny-lua delete mode 100644 link/FILESARELINKEDFROMHERE diff --git a/.gitmodules b/.gitmodules index ba0955c..e7764a6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,18 @@ [submodule "lib/tiny"] path = lib/tiny url = https://github.com/kin-fuyuki/tiny-cpp.git +[submodule "lib/boost"] + path = lib/boost + url = https://github.com/boostorg/boost.git +[submodule "lib/sdl2"] + path = lib/sdl2 + url = https://github.com/libsdl-org/SDL.git +[submodule "lib/enginend"] + path = lib/enginend + url = https://github.com/kin-fuyuki/enginend-cpp.git +[submodule "lib/sdl3"] + path = lib/sdl3 + url = https://github.com/kin-fuyuki/SDL.git +[submodule "lib/tiny-lua"] + path = lib/tiny-lua + url = https://github.com/kin-fuyuki/tiny-lua.git diff --git a/built/launcher/linux/res/btn.png b/built/launcher/linux/res/btn.png deleted file mode 100644 index f68b8a08bb27b2cde72a51d58013a96e1392fad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^2|z5s!2~4JZoFLwq&N#aB8wRqxP?KOkzv*x37}x0 zr;B4qMC;oN8+jQNc@7+CxKY1yKC9wIMX?{e1v5qVaq4XU+bZYga%O65V8nU873UoF npIdcUaA3loosaIk={i(*M3vLfzu diff --git a/built/launcher/linux/res/btnpress.png b/built/launcher/linux/res/btnpress.png deleted file mode 100644 index 2a6b8005895a68b895cc952d54c25a4314ffd1a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^2|z5s!2~4JZoFLwq&N#aB8wRqxP?KOkzv*x37}xO zr;B4qMC;oN3q>0Y1P)wizCP37jXmos;VWC7i3mHS_&@QVF#Yk)cNeyc3D&N=D_J^s tH}k6E3-c$wRCs^|UicNGTwLxJtDlw2b86Q^TQi^)44$rjF6*2UngAwaJ5>Mx diff --git a/built/launcher/linux/res/exit.png b/built/launcher/linux/res/exit.png deleted file mode 100644 index 328384c736f5465bee405b5258b08158b0c21af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmVAHIP00009a7bBm000XU z000XU0RWnu7ytkQq)9|UR9J=W)lW#1VH^kW@3TdWn5JH8hL{5P8@B2LO`}@Q1g$FR1OeWL6AR@O!m>Wq zRoCCBbQb^sB9aT>DuA;9HUYeg#bU2Rp%9%;Cu}xbFMz`&Zz!cs0C)gkUTfXD{ryP* z5AnO7ds^$S39;P(nzFOAvkD6f&xOO`_W<5%tzV?F#{=E%rMLo62izO}W* z@$vE4@bK^iNeci}R#xT?4Gl3GjWQ4j6nA!ZKHuEjB*~4PI3&H3lan+IgCuJca~Ouv z8w!P(3@puMmYHHs2{r)kMfBw?h+1V@o{r!t|b#+ZE zD=VcW!z527#d0q!EWAt}fQV%Ie7>6`U!|(Ay*iZc0!Xe`RaMQkwYAv+xRbUEc5WIQ z8)uwO=i~bN`c|dX8h}emsr8f=yARSnfM75f$OawOA~*0Q&cmgXGWU<>mZHBx0?osIV!eP6LQ)t!MYGu{}!r z003Zdaq-FO>grvW%QZDUJw0Z#**mE=h!4Pd0Py?$7Y)P66OnAKbsqo(gTalWqN0_Kj*i=QyZu>aX68gs zPtTE@oSZeK)YEkKeqfNyBsoPgzJ1M+ys*7@KjH9nkZeeJF5Z4;E%}rsIhK^;Lqhx+ kk_EffVltUbCQ~Z>0+uClgWVAsb^rhX07*qoM6N<$f*A!}@Bjb+ diff --git a/built/launcher/linux/res/forebutton.png b/built/launcher/linux/res/forebutton.png deleted file mode 100644 index d38eddc743036e991eeed9d3dfeb1f1d2750a523..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2963 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 JPDHLkV1f#Mqg4O^ diff --git a/built/launcher/linux/res/forebuttonon.png b/built/launcher/linux/res/forebuttonon.png deleted file mode 100644 index 5c0c010fb49bff879d9a47269335b8e0e2a7cdf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2043 zcmV8`G-{_3ZD^u!(& z<#|4tOw8=;?Cj}73-cp%b#*nFOpYE}jJwf#y*9J?e4b_5BNKf-pI=>FnOWcWPaayB zJJWnV2izYe*0U^|PN$CyFiMY4bfCo?V5+L>y3WjsqA;_r>x!ainx?9%rfD$1Jtnzh zOxJbm^_o-oR{M2nuBc2fCeL#-Td&urr>9w#VL-y_2ta5kcU?mp9MfzGZSYYJY^(Ah zJnED@&pBqjUKd4y75l#L`#vE$?LkxF7kX2y*xs>{PFv2!Z=UDu*R|Bxu7{nY(I|v) zA6R$5P)In%x~_Bff|8KFs;auK`8E;P$?N^+;XhXD5PkaTxtXok>paha1v6VL79oVu zXtddEcC21il_KoptN%s9qVG9Orm>DV^RUtvMM2jj`e|}=!BIVli2V5K$-^Qi&-1S9 z02`CY=B@5R2Oclq&F@9X9nv5RVt)wX`1sh@Fz{$(BJ|t@rhB(N)^)-l!kF3h^|cor z6X?;*4#bbrr=OnF7`B^eTq;#Qapbl=0gWJWZ8MwAWmq2&$ zOBzDegY;U}*=`X9XH8(;A_O~B>?0ammr=1)K4!h7K9}$2U}AzCGuv!73^Ly8wzcJf zBGD1unq~$EV96q6Ymf7jSPd7W0d$Mql!`ii6!gjQPERUBpwmGS0Rb~QiIZ6SW8YgY zmu5Db&3s(f(Ceg+MW^&!K;xuTkHm*As_?(C#fLIwuMB<;2O?E}jX(1AMCcGFO7IMiNt0PD9e1nx@AuK=`WCASvg zjuH}Yd2yG%q;{!pU!eT>>PcLURJ&&)+YLl+35y(2t7WHZ(=;b1Cmfs*-ANe-tbJ2l zbp^wws6fsM+2v%(b}^J8iplxXRjR3s*AO_S6!WMrPLc z{c5#JWK-oHw__zu4rx{DuxwlN^YEsdL*iQG>8>V0bzRqWJsywkHh?)mOoz$oanjKn z5xrVLk<46P$vr}x&YPww%hHRkcNmAk&GEL!iMid34`7SKTYRd(idyC3#>*My zjYEY%^3#A)GN>`+u^+)9uFOc91e2ZW2~}0KZJWN#h$TC`2@p#M@Z&_Yy(7R|;(RZ5K9JXWPEd87kqeTy2F~%IOsFfN8fT`9`Wx*BKD zgHw{lZmRWd%qSkLYtS{(*7az6MWCt?r#ww_&GwE&>-BF~cRu05b5a4u=J;)FE%yzO z%r#8ujbF~SM8atng_?L}~ zi;ECKmSy<3I{$DPuSYui>sJ_qyGh&Bb=@@0X0stH^gs>_!>hWkIg7;4Mwp13j1a>4 z`FXnha&%a3GyD7J-xY#Q)1cD8Bjwhf5CR2F%B>t|6!z>K@aFTI+UWH3l;f7m<#*+# z^cD_Z0^E(%!9obwI;Y`{)xUiCfKmp^a6*!;sK`05tpelTv+I-q8I^_*py z8v8KaSbZ{?yng)}J4-BH{q~j!qcJEMXfzsCRYhX}Ee`r7=ua|v_UzeoIyJMt@4tTi ziht_p6#A$d{%EmSTwGk7ot>E(=2um!6-rmnI9cdDVURA}zL(su`_M{2~V>lz7i7>2Se(QezeEX!dSkoI4` ze2LNp*St67SF8{leCv>dKc%RwZakGID~^-$H&LEjT>#-;$BYM_{9L@+0@}u z1#(u`HeHQjPU9U(S;2&5S-yGm212h^D@sH8C^ULjtCbE=9d?RdLX-dWv8}zCQz(!s zz!1UTvMgaU>@w`cUnj2Wpl{6#$576qN^RRdr5w({u3vW}wl0GV%;|){N*2+0Jcd!P zudfv(u@1@hk?j`Kpe)PK38bnTao}4nm%}iepP$3PDkb5o3#*OC<1yvNu`Sjx$#XWF Z{R0oeXU9Sxff@h+002ovPDHLkV1g!1^^O1l diff --git a/built/launcher/linux/res/forums.png b/built/launcher/linux/res/forums.png deleted file mode 100644 index 5611d840679fb88e3ca297d2dca09658f62da4a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1020 zcmVAHIP00009a7bBm000XU z000XU0RWnu7ytkRu1Q2eR9J=WmtjcUWgN%9k25_67w6zMdQlK8qDb+6M9gAhXrZWO z7&x`4y{SQO76+#9RQF37tDHr0+kWD20pEp~}Rr_o1CT`*|^-kyR z|Lui;;W(rcy1StJy!!F{p6~Ph{eKVt=ivd;q)C$|WvFBsiO4YkZve0WxE+l~&jf=( zCd>bSkBFRJSy}mvWRyFENghabU8yD`iC(vIa&oEwJgs&(sFaE((f>b5!jB*kDFN^% z02CD!m5q*$4gvT?)3j><;BYvyl~VNpo&)dzz$L>l`lqL-Y3l0%ybRz&08av_1fXe} z<`I$S0lW*qrD@udh@1dW2H+!2({6~!834BdQ^5{dZc=jRQ>Fm3{X&*vLhUS1~25&)Q)nYlJMH%F51iHN1MvvX^8b@is-?~e`+ z4lb{+uYca#+e?z;rvJ00rKMHd+uOfIA`uP@3_Ms|T>OFLi>c^U!VrEyOUnx+uakT!8GT9S z9k3@Bi{&8zVWretN~tBK)UU0rt!Du|7CX;ov)u>aQA)k0l)9^wax0~be`s^1udnZy za5x+Q@Tsor_W;~7b77aub+)*;_^HOm#`9TOS)Ts>{x6kM!~fbx{sozTKP7Pl0s*6- zpdfo}Z0unXv6%Ig0=SF4@2B7Q7~2j60*7oi+W`?d3ZP`4WmJ2;-nH`b^2c*?b8FVt z)++6G`)QIErBvfS*V;D;{{uv%UPLYcsB}7=Pl$+DMC`lyt*xyuLZOhgu(0r|)oMNO za5xT6PELLRKsWUt19-o^z5RG?ZS6@BX^FGAIyE(AYieq8TdmeAr_*_4XlUr2Xfz4{ z4WUrzRbAID0MOCVam>^l^m@IA&G=4UUS3;UTiZ8fWo6H}-R`gQ^YeWG4kfTH$%W)} z{0&U9FeYy&IZM(o-wBsu-v}f(J6ZinlO|1?6!9mjv@E5k@RQI00000AHIP00009a7bBm000XU z000XU0RWnu7ytkQ%t=H+R9J=WmqAEWQ51&%^BN&Sh731BWcXxCYrst*xCmp;Al0rm z1r7xf(ohf-M2l3YBq$2eTpENzp|ubf@?1<(LL^kgIN7`&sf7tqQDbH~^S5v&1~D)* zpVWMC;hoEQ|NRg5-FLV^jvP61xQ4j7xT;nFI0xW_Wm)zjH8ub^4qz*QQ*n@pn&Aj zzP`RB0H|sWfE@t705AYd1E{wwYbK*1B3D)QU2ALW*=%i94FNa+;0|U_$aeq*0B%~A zb#FQ9Tk)vs;r90SHzZ>u?e6aGiFiCdMsl61u2Iz+Bp;J}Nzxu4AAi-=)ipt~aE?xm zZQHTAC!nsb?!9f>VCn!CA|v6_T7b45JhP0)c=bBHJy?dbmIhZ!{WRoe2VgfCs>O!!Ur^ ze&Q;t++18$O97mmoSgKPmzO^s92^`5a3+yRl==Ps*R{2^w|qX|sN*q35s$}H zBq9gO%F1q6S6A;5kt=T2zak)cjii%qvfD_W&WiV@b9ysPI6YpHyq~2JP0u@7c@F?U zRWGIE=$!XE-KzP&K~+Pl`mnjV`GczNblcB-xOx*_4oE%$;02HZ@Ipj(yKE^(jvPPv Y0a{LRp(%C9u>b%707*qoM6N<$f_rsa>Hq)$ diff --git a/built/launcher/linux/res/info.ttf b/built/launcher/linux/res/info.ttf deleted file mode 100644 index c809d80c3896f28c73766517f1df24cf6be9e696..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66676 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 Q6<;g~F`KsJgw3-40hjW+T>t<8 diff --git a/built/launcher/linux/res/launcher.png b/built/launcher/linux/res/launcher.png deleted file mode 100644 index 72a1c40a5213288aa6a7904739e22c6027dbf433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11748 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 diff --git a/built/launcher/linux/res/lockbutton.png b/built/launcher/linux/res/lockbutton.png deleted file mode 100644 index 1bddb89879cc21172a7a920aa195746af4983815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2767 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 diff --git a/built/launcher/linux/res/playon.png b/built/launcher/linux/res/playon.png deleted file mode 100644 index 48a57fcfb7d5694659d4b3b1e6e722ddc7bafc89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5976 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 Gmirr)T#f$# diff --git a/built/launcher/linux/res/update.png b/built/launcher/linux/res/update.png deleted file mode 100644 index c47f0ca18515c966605f4e0c1eeec739b4d83c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcmV-(1dRKMP)AHIP00009a7bBm000XU z000XU0RWnu7ytkSB}qg6(8ZujHe zAKk%WQByi4^!3+=@B8yS&-?p4d_Uh0aL6GC8Qp#x*eL}C1-kU~^qWSb@uixfpF7aLT3*;eh%P55C!OS{Q8TqmVxwI^ zMDhXD0ccQ4EsIDMfKmX>N~!Neq#i&9fExf_0dO3^1b`b#sjX0sV*suIcmjY6zlL0_PUTbV@ zEc5w%cinC``}_MhEf&kQ$Rmj4C6eo2ub183-9eI{g*CU^{mJS7!C-JkL=r^g63ID|*GZn3o}RAg@9$p-4?slDipVt)v5Lss6%`fllU$0ZpJ=gI zYDs?nH{Mc;iiX7hSgRn^ypg@rvOB_(|w9UT)St=sqi*F^mY3Pb+m*R1pV{nY7n zPimUB0RSRmt*)+q-Dot%rKYB)0{BtWv^PWAkjZ5FxU8(KR75lY&vkTkY-DF=Uk(O? z#|8%n0|4$nptWBM3k&Bh7KdrVEjw1yH1+ki@odoc#$K&yaVq;=rVm2}}Gp~9)p1PWv zn)&th^~T^$!mW3|t8W0%3hCD=X`_)z#J8$;rvKq@<+t zBO@ba0Jbzu7^6WY-?`C;E^)Me_I15AZI@4@2u%5ve3OPO_Hdz0mVJB;zCE zGe|Cnv<;FKq4n*MZX+2a86f!;$%%0Oh#cdgJ;6}^(-GPUlG73TJjn~u?u!=f0{=$n z8k(1zn_E0KHuj=Y>dXE1bl@QQL&Wv4cfb7{a>yZj#UEpBYSs>HZFv9y002ovPDHLk FV1n69AKCx_ diff --git a/built/launcher/linux/res/verify.png b/built/launcher/linux/res/verify.png deleted file mode 100644 index 207bd09280a407affb53c09e109c4ba0fc401588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmV;$13LVPP)AHIP00009a7bBm000XU z000XU0RWnu7ytkRcS%G+R9J=WmtSaGRUF5^$Eb9L=BW~<&>>=1YGm!h)K)O`SG|IR zKp%7?;H-4a`mjE@W$lB33chSUjCL@~5Vn@KV1p<=ZG@dha*f!*W=$v=BZaPuL((;) zu#x`B{rb=w30c@)np;@=f%|aJ_nhDT-rwQ;&N;v?yX<7tb{lXC5qSr|Q2=`YWJrdl zr>D8iww@hCq*p{dPtd>0<#OMXEO3)YBwbE=eC8pUCi#9PO+-E+d5`3Nr+qz%s+J%T zIRfAifOP=J0lWg>TU)-Mwf;jy_5%0}KqG)h0Ipe<^-DAwr5)o_00w|>05k#c1Gu5J z9AHTG`yiAf0 z0YF4vo12@n>^^Tek)x_2BJOZFoFM75-;ZrmQIq0yt}ZlFji>-Z2e=BzgK8~F&qxh7E70i z9JVa$bCTz_J{ynoe6>HIwO(mzYMSco?7Sc%egOAeE>{r1n*dxL9UbX`fq^;z@0AUG zwe-d9cCP`rsFVuXO(R?6Z>_PhvA?yo^}L7#0NhkcjR9!eiug~X>JtC}sZ?q#7K?r9 z^?G|lq0l^l+e)c50BC4vxF3(l6QNM(EdT`YIslK>`dWohcdF#?s%e^;Kp=3Ur>EyG zfXhlLM~ZS7rMT^4{2rPMqCh{y|leSPVfnVEbtnf$Y+rsn4G@Nk{S zDCU458Nr%kPOuozcF`T=+Wprxhd?QAxCHwzxXre9 n79AHIP00009a7bBm000XU z000XU0RWnu7ytkSXh}ptR9J=Wm48T_bsWdvUp;)3R#NjYEnAyxj`_$ybaT(Az{{9f z47WjZ>tK`Yk10`%NnL;F{x}K1CA)W^CzTf+-s;W1MC>}sQfFuC(0Iqnw-p2O!cJ_N51@IDp zQvkLD*bksvRn}Wc z2;l1C;^NmG9UZJFO0*E-JOB%Tg8-fYa81*++V1Xd1e3q+G&eVoxLhvw^JsH(bMes7 z5HmA-Jf5>ebo~1D>&LuauS?T3?&<0Awzjr@&&**<9({d%BlY$5Tvb)|iKb~*hr{9X z`FuYD01@rV&CNaN@p$fNn#PwdU0R%&nCN0=!;+qv5BK)=veW5gW_~$vJ|Zf}&(Ghl zY1-}i`FWqsX7jbQvuOd-T=tJI-+or?f2 zEO`_b79NR@kFP2yC^#%h((efg39&+m5B*E}IXOA`-MYHES)dNs?|xMMcFK42Esf)6+TtO#ooETJOrTd?6+# zCNm-;BHd=Qz2J7cBLU?3ZI;bnDXTUB0K45jvt!4OhV1O@N+QYyFs{?-J_3-!%;8yC zS)-+;r5gY|cb{}~;2}CXdI7*^LWmN7=~Dn8qWR+D;blp|)YNd` zz=12l%qK}w1b}%V#4&$ql88RY%gZ})-_>`75Pd|n)8%q~o0yom(O+Lx{=-<41pvVC z@NjKwYwK}YmJ7{h^A7+s;YYR0alI&)LyNv zt)0oq$=NK+a^CFh>^{9-|28vALI~5t=Ca%EK7+v^wY9ZH6Hz2H>x2-m0GLAXZ{Uja zmt)NqpsMOmX=!O~Sy@?!^m@Gyz+eBzv9YmpQ&UqX_UzfyH!v{J85tSbZLwH3#KpzE zE`)fEh{^#xWwBUNG)+q z1pvy+%hR1sX95vDuBvK10Jz=mn(^`RQyCc<1O5H|_AOhs+^Vdsd<(!`B1!`A=9x2R zQcFroS``<6O}!mV{(lN){*9T39#DUbnfsX8=l@2Td1pXhAHIP00009a7bBm000XU z000XU0RWnu7ytkS7)eAyR9J=Wm48T_bsWdv-#dTAyoENMa|AXl1$S@@Dd+RK#SP=e zf-xOrjWZlnV>&2@(k=r3=?B`Nz>WTitQf00!gn_=VBYQ7-39O-<#BNEd*O0Q@9R`h319 z0BD+)rIdONKsA8h0elPKlCJBw6YD(z;C%qfYPIgrb^VtlKP!Nin>TOfx3;#LMdSDmlFM-w{G2fw70i+&f#!01cO0aadB}TlKyC=)Y+DnmK~8u`;cz$$z@pu5?|` z@DEO>vsx*2A3!;PVqMq2Sq^Z!-KIbwkfmu_j#8=`z&fSWJpc;8i#O{>-zX={nEt)*@6Jv8W|b6 zd+^}FcgxGmdxOE?!iEhSngDzW0MpacCuV17^J{8quA5Az&k73*?Jk!~NS+aq!vMBb zR#ryy^75`078be+3JNr@*INx>y;3R;VAgClf7IRG?WwP?fBMv^Qx_~2ixH{{H?3l809EdqD3i{g5mo z86%lZ(n2zt(tniXb&~fJSCFJ7(Yr-*iDVnedx=AGn&jh2^8+NmPMQyp%uVY5ntIBT s97}Pyk~IGl$t|n#%a9>MhKGc|0Cc>LNhi5Q*8l(j07*qoM6N<$g13MtPXGV_ diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt deleted file mode 100644 index 5a9d9ce..0000000 --- a/engine/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -cmake_minimum_required(VERSION 3.20) -set(CMAKE_CXX_FLAGS "-std=c++17 -Wno-error") - -file(GLOB_RECURSE ENGINE_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") -add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/force_rebuild" - COMMAND rm -f "${CMAKE_SOURCE_DIR}/link/libenginend.so" - COMMAND rm -rf "${CMAKE_SOURCE_DIR}/include/enginend" -) -add_library(enginend SHARED ${ENGINE_SOURCES} "${CMAKE_BINARY_DIR}/force_rebuild" - ../include/json.h) -target_link_directories( - enginend PUBLIC - "${CMAKE_SOURCE_DIR}/link") -set(ENGINE_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") -set(ENGINE_EXPORT_DIR "${CMAKE_SOURCE_DIR}/include/enginend") -set_target_properties(enginend PROPERTIES - CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/link" - ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/link" - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/link" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/link" -) - -file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS "${ENGINE_SRC_DIR}/*.h" "${ENGINE_SRC_DIR}/*.hpp") -foreach(HEADER ${HEADER_FILES}) - file(RELATIVE_PATH REL_PATH "${ENGINE_SRC_DIR}" "${HEADER}") - - set(DEST "${ENGINE_EXPORT_DIR}/${REL_PATH}") - - get_filename_component(DEST_DIR "${DEST}" DIRECTORY) - - add_custom_command( - TARGET enginend PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${DEST_DIR}" - COMMAND ${CMAKE_COMMAND} -E copy_if_different "${HEADER}" "${DEST}" - ) -endforeach() - - -add_executable(test test.cpp) - -set_target_properties(test PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/engine/test" -) -target_link_directories( - test PUBLIC - "${CMAKE_SOURCE_DIR}/link") -target_link_libraries(test PRIVATE - "${CMAKE_SOURCE_DIR}/link/libenginend.so" - "${CMAKE_SOURCE_DIR}/link/libdesktopraylib.so" -) -target_include_directories(test PUBLIC - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/lib/raylib/linux-64/raylib/include -) -target_include_directories(enginend PUBLIC - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/lib/raylib/linux-64/raylib/include - -) diff --git a/engine/src/aud.h b/engine/src/aud.h deleted file mode 100644 index e69de29..0000000 diff --git a/engine/src/engine.cpp b/engine/src/engine.cpp deleted file mode 100644 index 11856cc..0000000 --- a/engine/src/engine.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "engine.h" \ No newline at end of file diff --git a/engine/src/engine.h b/engine/src/engine.h deleted file mode 100644 index f2f7746..0000000 --- a/engine/src/engine.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include "net.h" -#include "gr.h" -#include "aud.h" -#include "program.h" -#include "scenes/scene.h" -enum PLATFORM { - WINDOWS,LINUX,MACOS, - ANDROID,IOS -}; -extern PLATFORM platform; -extern std::string androidpackage; -#include "resmgr.h" \ No newline at end of file diff --git a/engine/src/gr.h b/engine/src/gr.h deleted file mode 100644 index 8c898e6..0000000 --- a/engine/src/gr.h +++ /dev/null @@ -1,2 +0,0 @@ - -#include "graph/window.h" \ No newline at end of file diff --git a/engine/src/graph/window.h b/engine/src/graph/window.h deleted file mode 100644 index ff2092c..0000000 --- a/engine/src/graph/window.h +++ /dev/null @@ -1 +0,0 @@ -#include \ No newline at end of file diff --git a/engine/src/net.h b/engine/src/net.h deleted file mode 100644 index e69de29..0000000 diff --git a/engine/src/program.cpp b/engine/src/program.cpp deleted file mode 100644 index 692a326..0000000 --- a/engine/src/program.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "program.h" - -long long calibrate() { - unsigned long long start = __rdtsc(); - struct timespec ts; - ts.tv_sec = 0; - ts.tv_nsec = 100000000L; // 0.1 seconds - nanosleep(&ts, NULL); - return (__rdtsc() - start) * 10; -} -const long long enginend::CPUCLOCK=calibrate(); -void enginend::program::changescene(scene *scn) { - this->currentscene->exit(); - delete this->currentscene; - this->currentscene = scn; - this->currentscene->boot(); -} diff --git a/engine/src/program.h b/engine/src/program.h deleted file mode 100644 index 1d7d517..0000000 --- a/engine/src/program.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once -#define CFG this->CONF() -#include -#include - -#include "scenes/scene.h" - -namespace enginend{ - extern const long long CPUCLOCK; -inline const char* COMMONCONFIG(); -class program { - unsigned long long currenttick = __rdtsc(); - unsigned long long currentframe = __rdtsc(); -public: - scene *currentscene; - int tickrate; - int framerate; - void changescene(scene*scn); - program():client(false){} - program(bool isclient):client(isclient){} - virtual const char* CONF()=0; - const bool client; - virtual void boot()=0; - virtual void tick()=0; - virtual void draw()=0; - virtual void exit()=0; - bool shouldtick() { - unsigned long long now = __rdtsc(); - unsigned long long interval = CPUCLOCK / tickrate; - if (now - currenttick >= interval) { - currenttick = now; - return true; - } - return false; - } - - bool shoulddraw() { - unsigned long long now = __rdtsc(); - unsigned long long interval = CPUCLOCK / framerate; - if (now - currentframe >= interval) { - currentframe = now; - return true; - } - return false; - } -};} diff --git a/engine/src/resmgr.h b/engine/src/resmgr.h deleted file mode 100644 index 206166a..0000000 --- a/engine/src/resmgr.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include -#include "engine.h" -inline const char *AT(std::string path) { - if (platform==LINUX || platform==WINDOWS || platform==MACOS) { - return path.c_str(); - }else { - if (platform==ANDROID) { - return ("/data/data/"+androidpackage+"/files/"+path).c_str(); - } - } -} diff --git a/engine/src/scenes/node2d.h b/engine/src/scenes/node2d.h deleted file mode 100644 index 9c1c78b..0000000 --- a/engine/src/scenes/node2d.h +++ /dev/null @@ -1,338 +0,0 @@ -#pragma once -#include - -#include "nodes.h" - -namespace enginend { - namespace nodes { - struct node2d :public node { - Vector2 pos; - node2d(){} - node2d(float x,float y):pos(Vector2{x,y}){} - }; - struct rect :virtual public node2d{ - Vector2 size; - rect(){} - rect(float x,float y,float w,float h):size(Vector2{w,h}){ - this->pos=Vector2{x,y}; - } - }; - struct textured :virtual public rect{ - Texture2D* texture; - textured(){} - textured(Texture2D* texture,float x,float y,float w,float h):texture(texture){ - this->pos=Vector2{x,y};this->size=Vector2{w,h}; - } - void boot()override{} - void tick()override{} - void draw()override{if(texture!=nullptr)DrawTexture(*texture,pos.x,pos.y,WHITE);} - void exit()override{delete texture;} - }; - struct animated : virtual public textured { - Image animimage; - int frames; - int currentframe; - int framedelay; - int framecounter; - unsigned int nextframeoffset; - int prevframe; - - animated() : frames(0), currentframe(0), framedelay(6), framecounter(0), nextframeoffset(0) { - animimage.data = nullptr; - } - - animated(const char* gifpath, Vector2 position, Vector2 size, int delay = 6) - : textured(nullptr, position.x, position.y, size.x, size.y), - framedelay(delay), currentframe(0), framecounter(0), frames(0), nextframeoffset(0) - { - animimage = LoadImageAnim(gifpath, &frames); - if (frames > 0) { - texture = new Texture2D(LoadTextureFromImage(animimage)); - } - } - - void tick() override { - textured::tick(); - if (frames <= 1) return; - - framecounter++; - if (framecounter >= framedelay) { - framecounter = 0; - currentframe++; - if (currentframe >= frames) currentframe = 0; - nextframeoffset = animimage.width * animimage.height * 4 * currentframe; - } - } - void draw() override { - - if (prevframe!=currentframe){ - prevframe=currentframe; - UpdateTexture(*this->texture,((unsigned char*)animimage.data)+nextframeoffset); - } - textured::draw(); - } - void exit() override { - if (animimage.data) UnloadImage(animimage); - if (texture) { - UnloadTexture(*texture); - delete texture; - texture = nullptr; - } - } - }; - struct colored :virtual public rect{ - Color c; - colored(){} - colored(Color color,float x,float y,float w,float h):c(color){ - this->pos=Vector2{x,y};this->size=Vector2{w,h}; - } - void boot()override{} - void tick()override{} - void draw()override{DrawRectangle(pos.x,pos.y,size.x,size.y,c);} - void exit()override{} - }; - struct tinted :virtual public colored,virtual public textured{ - tinted(){} - tinted(Texture2D* texture,Color color,float x,float y,float w,float h): - node2d(x,y), - rect(x,y,w,h), - colored(color,x,y,w,h), - textured(texture,x,y,w,h) - {} - void boot()override{this->colored::boot();this->textured::boot();} - void tick()override{this->colored::tick();this->textured::tick();} - void draw()override{if(texture!=nullptr)DrawTexture(*texture,pos.x,pos.y,c);} - void exit()override{this->colored::exit();this->textured::exit();} - }; - struct text :public tinted { - protected: - std::string result; - public: - Font font; - float fs; - Color txc; - std::string content; - text(){fs=20;} - text(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize,std::string txt): - font(f),fs(fsize),content(txt) - { - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->texture=texture;this->c=color;this->txc=txcol; - - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - void boot()override{this->tinted::boot();} - void tick()override { - this->tinted::tick(); - if(result!=content){ - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - } - void draw()override { - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,1); - Vector2 charsize=MeasureTextEx(font," ",fs,1); - float p=charsize.x>charsize.y?charsize.x/minsize.x:charsize.y/minsize.y; - p=p*2; - int minh=(minsize.y>size.y)?minsize.y:size.y; - int minw=(minsize.x>size.x)?minsize.x:size.x; - DrawRectangle(pos.x-charsize.x,pos.y-charsize.y,minw+p,minh+p,c); - DrawTextEx(font,content.c_str(),pos,fs,1,txc); - } - void exit()override{this->tinted::exit();} - }; - struct button :virtual public tinted{ - std::function func; - bool pressed; - bool hover; - button():pressed(false){} - button(Texture2D* texture,Color color,float x,float y,float w,float h,std::function f):func(f),pressed(false){ - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->texture=texture;this->c=color; - } - void boot()override{this->tinted::boot();} - void tick()override{ - this->tinted::tick(); - Vector2 mouse=GetMousePosition(); - if(CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y})){hover=true; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - pressed=true; - if(func)func(); - }else{ - pressed=false; - } - }else{ - hover=false; - } - } - void draw()override { - if(this->texture!=nullptr)DrawTexture(*texture,pos.x,pos.y,c); - else DrawRectangle(pos.x,pos.y,size.x,size.y,c); - } - void exit()override{this->tinted::exit();} - }; - struct labeledbutton :virtual public button { - std::string label; - Font font; - int fs; - Color txc; - labeledbutton(std::string name,Texture2D* texture,Color color,Color text, - float x,float y,float w,float h,std::function f, - Font fnt,int size):font(fnt),fs(size),txc(text){ - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->texture=texture;this->c=color; - this->func=f;this->pressed=false; - this->label=name; - } - void boot()override{this->button::boot();} - void tick()override{this->button::tick();} - void draw()override{ - this->button::draw(); - Vector2 tsize=MeasureTextEx(font,label.c_str(),fs,1); - Vector2 tpos={ - pos.x+(size.x-tsize.x)/2, - pos.y+(size.y-tsize.y)/2 - }; - DrawTextEx(font,label.c_str(),tpos,fs,1,txc); - } - void exit()override{this->button::exit();} - }; - struct slider :virtual public tinted{ - float val; - float minv; - float maxv; - slider():val(0),minv(0),maxv(1){} - slider(Texture2D* texture,Color color,float x,float y,float w,float h,float min,float max,float v):val(v),minv(min),maxv(max){ - this->pos=Vector2{x,y};this->size=Vector2{x,y};this->texture=texture;this->c=color; - } - void boot()override{this->tinted::boot();} - void tick()override{ - this->tinted::tick(); - Vector2 mouse=GetMousePosition(); - if(CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y})&&IsMouseButtonDown(MOUSE_LEFT_BUTTON)){ - float t=(mouse.x-pos.x)/size.x; - val=minv+t*(maxv-minv); - if(valmaxv)val=maxv; - } - } - void draw()override{ - DrawRectangle(pos.x,pos.y,size.x,size.y,DARKGRAY); - float t=(val-minv)/(maxv-minv); - DrawRectangle(pos.x,pos.y,size.x*t,size.y,c); - } - void exit()override{this->tinted::exit();} - }; - struct textfield :public text{ - textfield(){} - textfield(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize,std::string txt): - text(texture,txcol,color,x,y,w,h,f,fsize,txt){} - void boot()override{this->text::boot();} - void tick()override{this->text::tick();} - void draw()override{ - Vector2 p=pos; - Vector2 charsize=MeasureTextEx(font," ",fs,0); - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,charsize.x/2); - float po=charsize.x>charsize.y?charsize.x/charsize.y:charsize.y/charsize.x;po=po*5; - int minh=(minsize.y>size.y)?minsize.y:size.y; - int minw=(minsize.x>size.x)?minsize.x:size.x; - DrawRectangle(pos.x-(po/2),pos.y-(po/2),minw+(po*1.1),minh+(po*1.1),c); - DrawTextEx(font,content.c_str(),p,fs,charsize.x/2,this->txc); - } - void exit()override{this->text::exit();} - }; - struct textinput :public text{ - bool active; - int cpos; - textinput():active(false),cpos(0){} - textinput(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize):active(false),cpos(0){ - this->pos=Vector2{x,y};this->size=Vector2{x,y};this->texture=texture;this->c=color;this->font=f;this->content=""; - this->txc=txcol;this->fs=fsize; - } - void boot()override{this->text::boot();} - void tick()override{ - this->text::tick(); - Vector2 mouse=GetMousePosition(); - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y}); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - } - } - void draw()override{ - this->text::draw(); - if(active)DrawRectangle(pos.x+MeasureText(content.c_str(),fs),pos.y,2,fs,{0,0,0,127}); - } - void exit()override{this->text::exit();} - }; - struct textinputfield :public textfield{ - bool active; - int cpos; - textinputfield():active(false),cpos(0){} - textinputfield(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize):active(false),cpos(0), - textfield(texture,txcol,color,x,y,w,h,f,fsize,""){} - void boot()override{this->textfield::boot();} - void tick()override{ - this->textfield::tick(); - Vector2 mouse=GetMousePosition(); - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y}); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - if(IsKeyPressed(KEY_ENTER)){ - content+='\n'; - cpos++; - } - } - } - void draw()override{ - this->textfield::draw(); - if(active){ - Vector2 p=pos; - float lh=fs+2; - std::string line=""; - for(char ch:content){ - if(ch=='\n'){ - p.y+=lh; - line=""; - }else{ - line+=ch; - } - } - DrawRectangle(p.x+MeasureText(line.c_str(),fs),p.y,2,fs,BLACK); - } - } - void exit()override{this->textfield::exit();} - }; - } -} \ No newline at end of file diff --git a/engine/src/scenes/node2drelative.h b/engine/src/scenes/node2drelative.h deleted file mode 100644 index 52d8575..0000000 --- a/engine/src/scenes/node2drelative.h +++ /dev/null @@ -1,423 +0,0 @@ -#pragma once -#include - -#include "nodes.h" - -namespace enginend{ - namespace nodes{ - namespace relative { - struct node2d :public node { - double x; - double y; - double w; - double h; - node2d(){x=0;y=0;w=0;h=0;} - node2d(double x,double y,double w=0,double h=0):x(x),y(y),w(w),h(h){} - }; - struct rect :virtual public node2d{ - rect(){} - rect(double x,double y,double w,double h):node2d(x,y,w,h){} - }; - struct textured :virtual public rect{ - Texture2D* texture; - textured(){texture=nullptr;} - textured(Texture2D* texture,double x,double y,double w,double h):texture(texture),rect(x,y,w,h){} - void boot() override{} - void tick() override{} - void draw()override{ - if(texture==nullptr)return; - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - tiny::echo("og: %f %f %f %f", x,y,w,h); - tiny::echo("transformed: %f %f %f %f", ax, ay, aw, ah); - DrawTexturePro(*texture,{0,0,(float)texture->width,(float)texture->height},{ax,ay,aw,ah},{0,0},0,WHITE); - } - void exit()override { - if(texture){ - UnloadTexture(*texture); - delete texture; - texture=nullptr; - } - } - }; - struct animated :virtual public textured{ - Image animimage; - int frames; - int currentframe; - int framedelay; - int framecounter; - int prevframe; - unsigned int nextframeoffset; - animated():frames(0),currentframe(1),framedelay(6),framecounter(0),nextframeoffset(0){ - animimage.data=nullptr; - prevframe=currentframe; - } - animated(const char* gifpath,double x,double y,double w,double h,int delay=6): - textured(nullptr,x,y,w,h),framedelay(delay),currentframe(1),framecounter(0),frames(0),nextframeoffset(0) - { - prevframe=currentframe; - this->x=x; this->y=y; this->w=w; this->h=h; - animimage=LoadImageAnim(gifpath,&frames); - if(frames>0){ - texture=new Texture2D(LoadTextureFromImage(animimage)); - } - } - void tick()override{ - if(frames<=1)return; - framecounter++; - if(framecounter>=framedelay){ - framecounter=0; - currentframe++; - if(currentframe>=frames)currentframe=0; - nextframeoffset=animimage.width*animimage.height*4*currentframe; - tiny::echo("updating node\nframes: %i\n current frame: %i",frames,currentframe); - tiny::echo("%i",nextframeoffset); - } - } - void draw()override { - if (prevframe!=currentframe){ - prevframe=currentframe; - UpdateTexture(*this->texture,((unsigned char*)animimage.data)+nextframeoffset); - } - textured::draw(); - } - void exit()override{ - if(animimage.data)UnloadImage(animimage); - textured::exit(); - } - }; - struct colored :virtual public rect{ - Color c; - colored(){} - colored(Color color,double x,double y,double w,double h):c(color),rect(x,y,w,h){} - void boot()override{} - void tick()override{} - void draw()override{ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - DrawRectangle(ax,ay,aw,ah,c); - } - void exit()override{} - }; - struct tinted :virtual public colored,virtual public textured{ - tinted(){} - tinted(Texture2D* texture,Color color,double x,double y,double w,double h): - node2d(x,y,w,h), - rect(x,y,w,h), - colored(color,x,y,w,h), - textured(texture,x,y,w,h) - {} - void boot()override{} - void tick()override{} - void draw()override{ - if(texture==nullptr)return; - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - DrawTexturePro(*texture,{0,0,(float)texture->width,(float)texture->height},{ax,ay,aw,ah},{0,0},0,c); - } - void exit()override{ - textured::exit(); - } - }; - struct text :public tinted { - protected: - std::string result; - public: - Font font; - float fs; - Color txc; - std::string content; - text(){fs=20;} - text(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize,std::string txt): - //tinted(texture,color,x,y,w,h), - font(f),fs(fsize),content(txt),txc(txcol) - { - this->x=x;this->y=y;this->w=w;this->h=h; - this->texture=texture;this->c=color; - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - void boot()override{} - void tick()override { - if(result!=content){ - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - } - void draw()override { - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - - float aw=w*sw; - float ah=h*sh; - tiny::echo("og: %f %f %f %f", x,y,w,h); - tiny::echo("drawing text: %s", content.c_str()); - tiny::echo("transformed: %f %f %f %f", ax, ay, aw, ah); - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,1); - Vector2 charsize=MeasureTextEx(font," ",fs,1); - float p=charsize.x>charsize.y?charsize.x/minsize.x:charsize.y/minsize.y; - p=p*2; - int minh=(minsize.y>ah)?minsize.y:ah; - int minw=(minsize.x>aw)?minsize.x:aw; - DrawRectangle(ax-charsize.x,ay-charsize.y,minw+p,minh+p,c); - DrawTextEx(font,content.c_str(),{ax,ay},fs,1,txc); - } - void exit()override{ - tinted::exit(); - } - }; - struct button :virtual public tinted{ - void(*func)(); - bool pressed; - bool hover; - button():func(nullptr),pressed(false),hover(false){} - button(Texture2D* texture,Color color,double x,double y,double w,double h,void(*f)()):func(f),pressed(false),hover(false),tinted(texture,color,x,y,w,h){} - void boot()override{} - void tick()override{ - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(CheckCollisionPointRec(mouse,r)){hover=true; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - pressed=true; - if(func)func(); - }else{ - pressed=false; - } - }else{ - hover=false; - pressed=false; - } - } - void draw()override { - tinted::draw(); - } - void exit()override{ - tinted::exit(); - } - }; - struct labeledbutton :virtual public button { - std::string label; - Font font; - int fs; - Color txc; - labeledbutton(std::string name,Texture2D* texture,Color color,Color text, - double x,double y,double w,double h,void(*f)(), - Font fnt,int size):font(fnt),fs(size),txc(text),label(name), - button(texture,color,x,y,w,h,f) - {} - void boot()override{} - void tick()override{ - button::tick(); - } - void draw()override{ - button::draw(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - Vector2 tsize=MeasureTextEx(font,label.c_str(),fs,1); - Vector2 tpos={ - ax+(aw-tsize.x)/2, - ay+(ah-tsize.y)/2 - }; - DrawTextEx(font,label.c_str(),tpos,fs,1,txc); - } - void exit()override{ - button::exit(); - } - }; - struct slider :virtual public tinted{ - float val; - float minv; - float maxv; - slider():val(0),minv(0),maxv(1){} - slider(Texture2D* texture,Color color,double x,double y,double w,double h,float min,float max,float v):val(v),minv(min),maxv(max),tinted(texture,color,x,y,w,h){} - void boot()override{} - void tick()override{ - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(CheckCollisionPointRec(mouse,r)&&IsMouseButtonDown(MOUSE_LEFT_BUTTON)){ - float t=(mouse.x-(x*sw))/(w*sw); - val=minv+t*(maxv-minv); - if(valmaxv)val=maxv; - } - } - void draw()override{ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - DrawRectangle(ax,ay,aw,ah,DARKGRAY); - float t=(val-minv)/(maxv-minv); - DrawRectangle(ax,ay,aw*t,ah,c); - } - void exit()override{ - tinted::exit(); - } - }; - struct textfield :public text{ - textfield(){} - textfield(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize,std::string txt): - text(texture,txcol,color,x,y,w,h,f,fsize,txt){} - void boot()override{} - void tick()override{ - text::tick(); - } - void draw()override{ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - Vector2 charsize=MeasureTextEx(font," ",fs,0); - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,charsize.x/2); - float po=charsize.x>charsize.y?charsize.x/charsize.y:charsize.y/charsize.x;po=po*5; - int minh=(minsize.y>ah)?minsize.y:ah; - int minw=(minsize.x>aw)?minsize.x:aw; - DrawRectangle(ax-(po/2),ay-(po/2),minw+(po*1.1),minh+(po*1.1),c); - DrawTextEx(font,content.c_str(),{ax,ay},fs,charsize.x/2,txc); - } - void exit()override{ - text::exit(); - } - }; - struct textinput :public text{ - bool active; - int cpos; - textinput():active(false),cpos(0){} - textinput(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize):active(false),cpos(0), - text(texture,txcol,color,x,y,w,h,f,fsize,""){} - void boot()override{} - void tick()override{ - text::tick(); - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,r); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - } - } - void draw()override{ - text::draw(); - if(active){ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - DrawRectangle(ax+MeasureTextEx(font,content.c_str(),fs,1).x,ay,2,fs,{0,0,0,127}); - } - } - void exit()override{ - text::exit(); - } - }; - struct textinputfield :public textfield{ - bool active; - int cpos; - textinputfield():active(false),cpos(0){} - textinputfield(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize):active(false),cpos(0), - textfield(texture,txcol,color,x,y,w,h,f,fsize,""){} - void boot()override{} - void tick()override{ - textfield::tick(); - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,r); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - if(IsKeyPressed(KEY_ENTER)){ - content+='\n'; - cpos++; - } - } - } - void draw()override{ - textfield::draw(); - if(active){ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float lh=fs+2; - Vector2 p={ax,ay}; - std::string line=""; - for(char ch:content){ - if(ch=='\n'){ - p.y+=lh; - line=""; - }else{ - line+=ch; - } - } - DrawRectangle(p.x+MeasureTextEx(font,line.c_str(),fs,1).x,p.y,2,fs,BLACK); - } - } - void exit()override{ - textfield::exit(); - } - }; - } - } -} \ No newline at end of file diff --git a/engine/src/scenes/nodes.h b/engine/src/scenes/nodes.h deleted file mode 100644 index 006d2c6..0000000 --- a/engine/src/scenes/nodes.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once -#include - -#include "../gr.h" -#include "../aud.h" -#include "../net.h" -#include - -namespace enginend { - namespace nodes { - struct node{ - public: - virtual void boot()=0; - virtual void tick()=0; - virtual void draw()=0; - virtual void exit()=0; - }; - } - struct group : public virtual enginend::nodes::node { - std::vector children; - group(std::vector& children) : children(std::move(children)) {} - void boot(){for (node* n: children){n->boot();}} - void tick(){for (node* n: children){n->tick();}} - void draw(){for (node* n: children){n->draw();}} - void exit(){for (node* n: children){n->exit();}} - }; -} \ No newline at end of file diff --git a/engine/src/scenes/scene.h b/engine/src/scenes/scene.h deleted file mode 100644 index 5647e2d..0000000 --- a/engine/src/scenes/scene.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include "nodes.h" -#include - - -namespace enginend { - struct scene{ - std::list nodes; - virtual void boot() { - int i=0; - tiny::echo((char*)"initializing scene"); - for (enginend::nodes::node* n : nodes) { - tiny::echo((char*)"initializing object of ID: %i",i++); - n->boot(); - } - } - virtual void draw() { - - ClearBackground(rl::BLANK); - BeginDrawing(); - for (enginend::nodes::node* n : nodes) { - n->draw(); - } - EndDrawing(); - } - virtual void tick() { - for (enginend::nodes::node* n : nodes) { - n->tick(); - } - } - virtual void exit() { - for (enginend::nodes::node* n : nodes) { - n->exit(); - } - } - }; -} \ No newline at end of file diff --git a/engine/test.cpp b/engine/test.cpp deleted file mode 100644 index 074db2e..0000000 --- a/engine/test.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include -using namespace enginend; -class launcher:public program { -public: - - bool vsync = true; - scene s; - const char* CONF() final{return "test.tdf";} - launcher(){}; - void boot() override { - SetConfigFlags(FLAG_VSYNC_HINT); - InitWindow(500,500,"test"); - SetTargetFPS(GetMonitorRefreshRate(GetCurrentMonitor())); - this->tickrate=GetMonitorRefreshRate(GetCurrentMonitor()); - s.nodes=std::list{ - - new nodes::colored(Color{255,255,255,255},0,0,500,500), - new nodes::textfield(nullptr,Color{255,127,127,255},Color{127,127,127,255} - ,100,100,220,32,GetFontDefault(),32, - "welcome to enginend!\n" - "hehe" - ) - }; - s.boot(); - - } - void tick() override { - if (shouldtick()) { - s.tick(); - } - } - void draw() override { - s.draw(); - } - void exit() override { - s.exit(); - } -}; - -tiny::ErrorLevel tiny::level{6}; -int main(int argc, char *argv[]) { - tiny::startup((char*)"enginend test",(char*)"1.0"); - launcher e; - e.boot(); - while (!WindowShouldClose()) { - e.tick(); - e.draw(); - } - e.exit(); - return 0; -} \ No newline at end of file diff --git a/engine/test/libenginend.so b/engine/test/libenginend.so deleted file mode 120000 index d81c6b5..0000000 --- a/engine/test/libenginend.so +++ /dev/null @@ -1 +0,0 @@ -link/libenginend.so \ No newline at end of file diff --git a/engine/test/libraylib.so.550 b/engine/test/libraylib.so.550 deleted file mode 120000 index 6686f51..0000000 --- a/engine/test/libraylib.so.550 +++ /dev/null @@ -1 +0,0 @@ -libraylib.so.550 \ No newline at end of file diff --git a/games/endlauncher/CMakeLists.txt b/games/endlauncher/CMakeLists.txt deleted file mode 100644 index 4919281..0000000 --- a/games/endlauncher/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.20) - -set(CMAKE_CXX_FLAGS "-std=c++17 -g -Wno-error -O0") -file(GLOB_RECURSE ENDLAUNCHER "src/*.cpp") -add_executable(endlauncher ${ENDLAUNCHER}) - -set_target_properties(endlauncher PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/built/launcher/${PLATFORM_DIR}" -) -target_link_directories( - endlauncher PUBLIC - "${CMAKE_SOURCE_DIR}/link") -target_link_libraries(endlauncher PRIVATE - "${CMAKE_SOURCE_DIR}/link/libenginend.so" - "${CMAKE_SOURCE_DIR}/link/liblinux64raylib.so" - curl zip -) -target_include_directories(endlauncher PUBLIC - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/lib/raylib/linux-64/raylib/include - ${CMAKE_SOURCE_DIR}/engine/include -) diff --git a/games/endlauncher/src/main.cpp b/games/endlauncher/src/main.cpp deleted file mode 100644 index 44e57a2..0000000 --- a/games/endlauncher/src/main.cpp +++ /dev/null @@ -1,356 +0,0 @@ -#include -#include -#include -#include "netio.h" -#include -#include -#include - -using namespace enginend; -using namespace enginend::nodes; -netio nete{}; -/* - - */ -struct background: public virtual textured { - background(Texture2D* texture,float x,float y,float w, float h) { - this->pos=Vector2{x,y};this->size=Vector2{w,h}; - this->texture=texture; - this->justclicked=false; - } - void boot()override{ - img=LoadImageFromTexture(*this->texture); - } - void tick()override { - Vector2 mp=Vector2(GetMousePositionDesktop()); - Vector2 wp=GetWindowPosition(); - Vector2 rp=Vector2{mp.x-wp.x,mp.y-wp.y}; - if (IsMouseButtonDown(0)) { - if (rp.x>=0&&rp.y>=0&&rp.x<600&&rp.y<300) { - Color pix=GetImageColor(img, (int)rp.x, (int)(300-rp.y)); - if (pix.a!=0) { - if (clicked==false) { - clicked=true; - relmouse=rp; - } - } - } - }else { - clicked=false; - } - if (clicked) { - Vector2 nwp{ - mp.x-relmouse.x, mp.y-relmouse.y - }; - int cm=GetCurrentMonitor(); - Vector2 mop=GetMonitorPosition(cm); - int newwpx=nwp.x-mop.x; - int newwpy=nwp.y-mop.y; - int maxwpx=GetMonitorWidth(cm)-GetScreenWidth(); - int maxwpy=GetMonitorHeight(cm)-GetScreenHeight(); - newwpx=newwpx>maxwpx?maxwpx:newwpx<0?0:newwpx; - newwpy=newwpy>maxwpy?maxwpy:newwpy<0?0:newwpy; - SetWindowPosition(newwpx,newwpy); - } - } - void draw()override{this->textured::draw();} - void exit()override{} -private: - Image img;bool justclicked;bool clicked=false; - Vector2 relmouse; -}; - -struct logi: public virtual textfield { - logi(Texture2D* texture,Color textcol,Color color,float x,float y,float w,float h,Font f,float fs,std::string txt) { - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->content=txt; - this->texture=texture;this->txc=textcol;this->c=color; - this->font=f; - this->fs=fs; - } - void draw() override { - Vector2 p=pos; - float spacing=fs/2.0f; - std::stringstream ss(content); - std::string line; - int lines=0; - - while (std::getline(ss, line)) { - if (lines%2==0) { - Vector2 charPos=p; - for (char& c : line) { - char str[2]={c, '\0'}; - Color fc=Color{255,0,255,255}; - if (c=='/'||c==':') { - fc=Color{255,255,0,255}; - } - - DrawTextEx(font, str, charPos, (float)fs, spacing, fc); - charPos.x+=MeasureTextEx(font, str, (float)fs, spacing).x; - } - } else { - DrawTextEx(font, line.c_str(), p, (float)fs, spacing, Color{0,255,255,255}); - } - - p.y+=(fs+2); - lines++; - } - } -}; -void playbuttonfunc(); -void quit(){exit(0);} -#include -class launcher:public program { -public: - Texture2D bg; - Texture2D buttonfore; - Texture2D buttonlock; - Texture2D playbtn[2]; - Texture2D menubtn[3]; - button* buttons[8]; - button* playbutton; - Texture2D buttonslabel[8]; - Font gamename,changelog,information; - bool vsync=true; - RenderTexture2D target; - text version; - std::string selectedversion=""; - Image img; - bool captured=true; - const char* CONF() final{return "test.tdf";} - launcher(){}; - void boot() override { - tickrate=15; - framerate=15; - SetConfigFlags(FLAG_WINDOW_UNDECORATED|FLAG_WINDOW_TRANSPARENT|FLAG_WINDOW_TOPMOST); - tiny::error("is transparent lol"); - InitWindow(600,300,"test");target=LoadRenderTexture(600, 300); - img=GenImageColor(600, 300, rl::BLANK); - SetTargetFPS(GetMonitorRefreshRate(GetCurrentMonitor())); - this->tickrate=GetMonitorRefreshRate(GetCurrentMonitor()); - bg=LoadTexture("res/launcher.png"); - buttonfore=LoadTexture("res/forebuttonon.png"); - buttonlock=LoadTexture("res/lockbutton.png"); - gamename=LoadFont("res/showcase.ttf"); - changelog=LoadFont("res/log.ttf"); - information=LoadFont("res/info.ttf"); - menubtn[0]=LoadTexture("res/btn.png"); - menubtn[1]=LoadTexture("res/btnhover.png"); - menubtn[2]=LoadTexture("res/btnpress.png"); - selectedversion=nete.currentversion; - version= text (nullptr,Color{255,255,255,255},Color{0,0,0,0},96,16*17,1,1,information,20,"version: "+selectedversion); - SetTraceLogLevel(LOG_ERROR); - buttons[0]=new button(&menubtn[0], {255,255,255,255},468,58,96,16,nullptr); - buttonslabel[0]=LoadTexture("res/options.png"); - buttons[1]=new button(&menubtn[0], {255,255,255,255},468,58+(18*1),96,16,std::function([]() { - OpenURL("http://kosumi.ddns.net:60000/"); - })); - buttonslabel[1]=LoadTexture("res/website.png"); - buttons[2]=new button(&menubtn[0], {255,255,255,255},468,58+(18*2),96,16,std::function([]() { - OpenURL("http://kosumi.ddns.net:60001/"); - })); - buttonslabel[2]=LoadTexture("res/forums.png"); - buttons[3]=new button(&menubtn[0], {255,255,255,255},468,58+(18*3),96,16,std::function([]() { - OpenURL("https://github.com/kin-fuyuki/allgames/issues"); - })); - buttonslabel[3]=LoadTexture("res/help.png"); - buttons[4]=new button(&menubtn[0], {255,255,255,255},468,58+(18*4),96,16,std::function([]() { - nete.download(); - })); - buttonslabel[4]=LoadTexture("res/update.png"); - buttons[5]=new button(&menubtn[0], {255,255,255,255},468,58+(18*5),96,16,nullptr); - buttonslabel[5]=LoadTexture("res/verify.png"); - buttons[6]=new button(&menubtn[0], {255,255,255,255},468,58+(18*6)+15,96,16,nullptr); - buttonslabel[6]=LoadTexture("res/versions.png"); - buttons[7]=new button(&menubtn[0], {255,255,255,255},468,58+(18*7)+17,96,16,std::function([]() { - quit(); - })); - buttonslabel[7]=LoadTexture("res/exit.png"); - playbtn[0]=LoadTexture("res/playoff.png"); - playbtn[1]=LoadTexture("res/playon.png"); - playbutton= new button(&playbtn[0], {255,255,255,255},406,(18*11)+17+9,153,59,std::function(playbuttonfunc)); - currentscene->nodes=std::list{ - new background(&bg,0,0,600,300), - new textured(&buttonfore,3,36,62,62), - new textured(&buttonlock,3,36+((62+4)*1),62,62), - new textured(&buttonlock,3,36+((62+4)*2),62,62), - new textured(&buttonlock,3,36+((62+4)*3),62,62), - new text(nullptr,Color{0,255,0,255},{0,0,0,0},232,19,1,1,gamename,16,"FORESPEND"), - buttons[0],new textured(&buttonslabel[0],468,58,96,16), - buttons[1],new textured(&buttonslabel[1],468,58+(18*1),96,16), - buttons[2],new textured(&buttonslabel[2],468,58+(18*2),96,16), - buttons[3],new textured(&buttonslabel[3],468,58+(18*3),96,16), - buttons[4],new textured(&buttonslabel[4],468,58+(18*4),96,16), - buttons[5],new textured(&buttonslabel[5],468,58+(18*5),96,16), - buttons[6],new textured(&buttonslabel[6],468,58+(18*6)+15,96,16), - buttons[7],new textured(&buttonslabel[7],468,58+(18*7)+17,96,16), - playbutton, - new logi(nullptr,Color{255,0,255,255},Color{0,0,0,0},90,58,466,159,changelog,8,nete.changelog), - new text(nullptr,Color{255,255,255,255},Color{0,0,0,0},96+16,(16*14)-3,1,1,information,20,"downloaded verified"), - &version, - }; - currentscene->boot(); - } - int buttondelay=0; - void tick() override { - if (nete.currentversion!=selectedversion) { - selectedversion=nete.currentversion; - this->version.content="version: "+selectedversion; - tiny::echo("selecting version: %s",selectedversion.c_str()); - } - { - for (button* b : buttons) { - if (b->hover) { - if (b->pressed) { - b->texture=&menubtn[2]; - buttondelay=5; - }else { - if (b->texture->id==menubtn[2].id) { - if(buttondelay<0) { - b->texture=&menubtn[1]; - } - }else { - b->texture=&menubtn[1]; - } - } - }else { - if (b->texture->id==menubtn[2].id) { - if(buttondelay<0) { - b->texture=&menubtn[0]; - } - }else { - b->texture=&menubtn[0]; - } - } - } - } - { - if (playbutton->pressed) { - playbutton->texture=&playbtn[1]; - buttondelay=5; - }else { - if(buttondelay<0) { - playbutton->texture=&playbtn[0]; - } - } - } - currentscene->tick(); - buttondelay--; - } - bool changedmenu=true; - bool itemchanged=true; - void draw() override { - BeginTextureMode(target); - currentscene->draw(); - EndTextureMode(); - BeginDrawing(); - ClearBackground(rl::BLANK); - DrawTexturePro(target.texture, {0, 0, 600, -300}, {0, 0, 600, 300}, {0, 0}, 0, rl::WHITE); - EndDrawing(); - Vector2 mp=Vector2(GetMousePositionDesktop()); - Vector2 wp=GetWindowPosition(); - Vector2 rp=Vector2{mp.x-wp.x,mp.y-wp.y}; - if (rp.x>=0&&rp.y>=0&&rp.x<600&&rp.y<300) { - if (changedmenu) { - UnloadImage(img); - img=LoadImageFromTexture(target.texture); - changedmenu=false; - } - Color pix=GetImageColor(img, (int)rp.x, (int)(300-rp.y)); - if (pix.a==0) { - SetWindowState(FLAG_WINDOW_MOUSE_PASSTHROUGH); - captured=false; - } else { - ClearWindowState(FLAG_WINDOW_MOUSE_PASSTHROUGH); - captured=true; - } - } - } - void exit() override { - currentscene->exit(); - } -}; - -launcher* launch; -tiny::ErrorLevel tiny::level{8}; - -int main(int argc, char *argv[]) { - tiny::startup((char*)"enginend test",(char*)"1.0"); - tiny::echo ("checking if cfg.tdf exists, if not create"); - std::ofstream tdffile("cfg.tdf"); - tdffile.close(); - - tiny::echo ("read cfg.tdf"); - tiny::TDF_FILE config;config.filepath="cfg.tdf";config.read(); - std::string version; - tiny::echo ("getting version"); - try {version=config.getstring({"version"});} - catch (tiny::TDF_ERR e) {version="NULL";} - if (version!="NULL") { - nete.currentversion=version; - config.setstring({"version"},nete.currentversion); - } - launcher e; - launch=&e; - tiny::echo ("starting net"); - nete.start(); - tiny::echo ("downloading github info"); - nete.github(); - tiny::echo ("starting launcher"); - e.boot(); - std::atomic running{true}; - - std::thread tickthread([&e, &running]() { - double tickrate=1.0/e.tickrate; - auto lasttick=std::chrono::high_resolution_clock::now(); - - while (running) { - auto now=std::chrono::high_resolution_clock::now(); - double elapsed=std::chrono::duration_cast>(now-lasttick).count(); - - if (elapsed>=tickrate) { - e.tick(); - lasttick=now; - } else { - std::this_thread::sleep_for(std::chrono::duration(tickrate-elapsed)); - } - } - }); - - double framerate=1.0/e.framerate; - auto lastframe=std::chrono::high_resolution_clock::now(); - - while (!WindowShouldClose()) { - auto now=std::chrono::high_resolution_clock::now(); - double elapsed=std::chrono::duration_cast>(now-lastframe).count(); - - if (elapsed>=framerate) { - e.draw(); - lastframe=now; - } else { - WaitTime(framerate-elapsed); - } - } - - running=false; - tickthread.join(); - - e.exit(); - config.setstring({"version"},nete.currentversion); - config.save(); - config.close(); - return 0; -} -void playbuttonfunc() { - if (nete.currentversion!="NULL") { - FILE* gameexe = fopen(("forespend/versions/"+nete.currentversion+"/bin/game").c_str(), "r"); - if (gameexe) { - fclose(gameexe); - - std::thread thread([]() { - boost::process::system("bin/game",boost::process::start_dir=("forespend/versions/"+nete.currentversion)); - }); - exit(0); - } - - } -} diff --git a/games/endlauncher/src/netio.cpp b/games/endlauncher/src/netio.cpp deleted file mode 100644 index a0175ef..0000000 --- a/games/endlauncher/src/netio.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "netio.h" -size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { - size_t written = fwrite(ptr, size, nmemb, stream); - return written; -}; \ No newline at end of file diff --git a/games/endlauncher/src/netio.h b/games/endlauncher/src/netio.h deleted file mode 100644 index 335d074..0000000 --- a/games/endlauncher/src/netio.h +++ /dev/null @@ -1,229 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include -#include -#ifndef GAMEPLATFORM -#define GAMEPLATFORM "l5.64" -#endif -extern size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream); -inline void makedirs(std::string path) { - size_t pos = 0; - while ((pos = path.find_first_of('/', pos)) != std::string::npos) { - std::string dir = path.substr(0, pos); - if (!dir.empty()) { -#ifdef _WIN32 - mkdir(dir.c_str(), 0); -#else - mkdir(dir.c_str(), 0755); -#endif - } - pos++; - } -} -struct netio { - netio()= default; - std::string url="https://github.com/kin-fuyuki/forespend_cpp/releases/download/"; - std::vector *versionhistory; - std::string changelog="could not connect to github\nplease check your internet connection"; - std::string currentversion="NULL"; - std::string newestversion=""; - - void start() { - const int MAX_RETRIES = 3; - int attempts = 0; - bool download_success = false; - - while (attempts < MAX_RETRIES && !download_success) { - CURL* curltdf = curl_easy_init(); - if (curltdf) { - FILE* history = fopen("versions.tdf", "wb"); - if (!history) break; - - curl_easy_setopt(curltdf, CURLOPT_URL, "https://raw.githubusercontent.com/kin-fuyuki/allgames/refs/heads/master/versions.tdf"); - curl_easy_setopt(curltdf, CURLOPT_WRITEFUNCTION, write_data); - curl_easy_setopt(curltdf, CURLOPT_WRITEDATA, history); - - CURLcode ret = curl_easy_perform(curltdf); - fclose(history); - curl_easy_cleanup(curltdf); - - if (ret == CURLE_OK) { - download_success = true; - } else { - attempts++; - tiny::warning("Version fetch failed (Attempt %d/%d): %s", attempts, MAX_RETRIES, curl_easy_strerror(ret)); - } - } - } - - if (!download_success) { - tiny::fatal("Could not download versions.tdf after %d attempts.", MAX_RETRIES); - return; - } - - // Processing the file - tiny::TDF_FILE fetchversions; - fetchversions.filepath = "versions.tdf"; - fetchversions.read(); - - boost::unordered_map* foreversions = fetchversions.getclass({"forespend"}); - if (!foreversions) return; - - std::vector versions; - for (auto& version : *foreversions) { - if (version.second.type == tiny::TDF_Type::TDF_DEFINES) { - versions = *(std::vector*)version.second.datapointer; - } - } - - if (versions.empty()) return; - - std::sort(versions.begin(), versions.end(), [](const std::string& a, const std::string& b) { - int ra = 0, rb = 0; - float va = 0.0f, vb = 0.0f; - char pa = ' ', pb = ' '; - char rea = ' ', reb = ' '; - sscanf(a.c_str(), "%d.%f.%c.%c", &ra, &va, &pa, &rea); - sscanf(b.c_str(), "%d.%f.%c.%c", &rb, &vb, &pb, &reb); - if (ra != rb) return ra > rb; - if (va != vb) return va > vb; - if (pa != pb) return pa > pb; - return rea < reb; - }); - - this->newestversion = versions[0]; // Sort is descending, index 0 is newest - if (this->newestversion != "") { - this->currentversion = newestversion; - } - - tiny::success("\n\nforespend versions found:"); - for (auto& version : versions) { - tiny::warning("%s", version.c_str()); - } - - // Use a member or persistent copy to avoid pointer to local variable - static std::vector persistent_versions; - persistent_versions = versions; - versionhistory = &persistent_versions; -} - void github() { - CURL* curl; - CURLcode res; - FILE* commitsjson = fopen("commitsjson", "wb"); - curl = curl_easy_init(); - if (curl) { - std::string u = "https://api.github.com/repos/kin-fuyuki/allgames/commits"; - struct curl_slist* headers = NULL; - headers = curl_slist_append(headers, "User-Agent: C++-App"); // Required by GitHub - curl_easy_setopt(curl, CURLOPT_URL, u.c_str()); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, commitsjson); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); - curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 10L); - res = curl_easy_perform(curl); - fclose(commitsjson); - changelog="changelog download error"; - if (res == CURLE_OK) { - try { - changelog="json read error"; - FILE* thecommits=fopen("commitsjson","rb"); - changelog="json parse error"; - nlohmann::json commits = nlohmann::json::parse(thecommits); - std::ostringstream oss; - std::vector monthNames = { - "", "jan", "feb", "mar", "apr", "may", "jun", - "jul", "aug", "sep", "oct", "nov", "dec" - }; - std::string lastMonth = ""; - std::string currentYear = ""; - int limit = std::min((int)commits.size(), 8); - for (int i = 0; i < limit; ++i) { - auto& item = commits[i]; - std::string message = item["commit"]["message"]; - std::string date = item["commit"]["author"]["date"]; // Format: 2025-12-21T13:08:50Z - // Extract components: YYYY-MM-DD and HH:MM:SS - std::string y = date.substr(0, 4); - std::string m = date.substr(5, 2); - std::string d = date.substr(8, 2); - std::string t = date.substr(11, 8); - // Format: MM/DD/YYYY HH:MM:SS - std::string first_line = message.substr(0, message.find('\n')); - oss << m << "/" << d << "/" << y << " " << t << "\n" << " " << first_line << "\n"; - } - changelog = oss.str(); - tiny::fatal("%s", changelog.c_str() ); - } catch (nlohmann::json::parse_error& e) { - tiny::fatal("JSON Parse Error: %s", e.what()); - } - } - - } - } - void download() { - CURLcode ret; - std::string version=versionhistory->at(0); - tiny::success("using version: %s\ndownloading from: %s",version.c_str(),(url+version+"/"+GAMEPLATFORM+"."+version+".zip").c_str()); - - CURL*curl = curl_easy_init(); - FILE* file = fopen(("fore."+version+".zip").c_str(), "wb"); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); - curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 10L); - curl_easy_setopt(curl, CURLOPT_URL, "https://github.com/kin-fuyuki/forespend_cpp/releases/download/0.03.a.g/l5.64.0.03.a.g.zip"); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, file); - ret = curl_easy_perform(curl); - curl_easy_cleanup(curl); - fclose(file); - - - makedirs("forespend/versions/"+version+"/"); - int err=0; - zip *z=zip_open("fore.0.03.a.g.zip",0,&err); - if (z) { - - zip_int64_t it=zip_get_num_entries(z, 0); - for (zip_int64_t i = 0; i < it; ++i) { - struct zip_stat st; - zip_stat_init(&st); - if (zip_stat_index(z, i, 0, &st) != 0) continue; - std::string name = st.name; - std::string full = "forespend/versions/"+version+"/" + name; - if (name.back() == '/') { -#ifdef _WIN32 - mkdir(full.c_str(), 0); -#else - mkdir(full.c_str(), 0755); -#endif - continue; - } - size_t pos = full.find_last_of('/'); - if (pos != std::string::npos) { - std::string dir = full.substr(0, pos); -#ifdef _WIN32 - mkdir(dir.c_str(), 0); -#else - mkdir(dir.c_str(), 0755); -#endif - } - zip_file_t *zf = zip_fopen_index(z, i, 0); - if (zf) { - std::ofstream ofs(full, std::ios::binary); - char buff[1 << 16]; - zip_int64_t read; - while ((read = zip_fread(zf, buff, sizeof(buff))) > 0) { - ofs.write(buff, read); - } - ofs.close(); - zip_fclose(zf); - } - } - zip_close(z); - } - } - -}; \ No newline at end of file diff --git a/games/forespend/CMakeLists.txt b/games/forespend/CMakeLists.txt deleted file mode 100644 index 736e34d..0000000 --- a/games/forespend/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.20) - -set(CMAKE_CXX_FLAGS "-std=c++17 -Wno-error") -file(GLOB_RECURSE FORESPEND_SOURCES CONFIGURE_DEPENDS "src/*.cpp") -add_executable(forespend ${FORESPEND_SOURCES}) - -set_target_properties(forespend PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/built/forespend/${PLATFORM_DIR}/bin" -) - -target_link_directories( - forespend PUBLIC - "${CMAKE_SOURCE_DIR}/link") -target_link_libraries(forespend PRIVATE - "${CMAKE_SOURCE_DIR}/link/libenginend.so" - "${CMAKE_SOURCE_DIR}/link/libdesktopraylib.so" -) -target_include_directories(forespend PUBLIC - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/lib/raylib/build/raylib/include - ${CMAKE_SOURCE_DIR}/engine/include -) \ No newline at end of file diff --git a/games/forespend/src/client/client.cpp b/games/forespend/src/client/client.cpp deleted file mode 100644 index c323857..0000000 --- a/games/forespend/src/client/client.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "client.h" - -#include "scenes/mainmenu.h" - -client::client() { - -} -void client::boot() { - this->framerate=60; - this->tickrate=20; -// SetConfigFlags(); - InitWindow(380,240,"forespend - 0.03h"); - initconfigmenu(); - this->currentscene=new mainmenu(); - this->currentscene->boot(); - target=LoadRenderTexture(380,240); -} -void client::draw() { - BeginDrawing(); - ClearBackground(WHITE); - this->currentscene->draw(); - EndDrawing(); -} -void client::exit() { - this->currentscene->exit(); - delete this->currentscene; -} -void client::tick() { - this->currentscene->tick(); -} - - - diff --git a/games/forespend/src/client/client.h b/games/forespend/src/client/client.h deleted file mode 100644 index 1545dae..0000000 --- a/games/forespend/src/client/client.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -#include - -class client :public enginend::program{ -public: - - RenderTexture2D target; - const char* CONF() final{return "client.tdf";} - client(); - void boot() override; - void tick() override; - void draw() override; - void exit() override; - -}; \ No newline at end of file diff --git a/games/forespend/src/client/scenes/configmenu.cpp b/games/forespend/src/client/scenes/configmenu.cpp deleted file mode 100644 index 58e2e51..0000000 --- a/games/forespend/src/client/scenes/configmenu.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "configmenu.h" - -#include -Font forefont; - -enginend::group mainpage= enginend::group( - { - new enginend::nodes::labeledbutton("graphics",nullptr,{255,127,0,255},{0,0,0,0},100,100,0,0,std::function([]() { - - }),forefont,32), - - } -); -enginend::group graphics= enginend::group( - { - - } -); -enginend::group sound= enginend::group( - { - - } -); -enginend::group controls= enginend::group( - { - - } -); -void initconfigmenu() { - forefont=LoadFont(AT("res/fonts/dos.fnt")); -} \ No newline at end of file diff --git a/games/forespend/src/client/scenes/configmenu.h b/games/forespend/src/client/scenes/configmenu.h deleted file mode 100644 index ba600a0..0000000 --- a/games/forespend/src/client/scenes/configmenu.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include -#include - -extern Font forefont; -extern enginend::group maincfgpage; -extern enginend::group graphics; -extern enginend::group sound; -extern enginend::group controls; - -void initconfigmenu(); \ No newline at end of file diff --git a/games/forespend/src/client/scenes/game.cpp b/games/forespend/src/client/scenes/game.cpp deleted file mode 100644 index 679fedf..0000000 --- a/games/forespend/src/client/scenes/game.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "game.h" \ No newline at end of file diff --git a/games/forespend/src/client/scenes/game.h b/games/forespend/src/client/scenes/game.h deleted file mode 100644 index 294415b..0000000 --- a/games/forespend/src/client/scenes/game.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include - - -class game :public virtual enginend::scene { - -}; \ No newline at end of file diff --git a/games/forespend/src/client/scenes/mainmenu.cpp b/games/forespend/src/client/scenes/mainmenu.cpp deleted file mode 100644 index 968b3da..0000000 --- a/games/forespend/src/client/scenes/mainmenu.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "mainmenu.h" diff --git a/games/forespend/src/client/scenes/mainmenu.h b/games/forespend/src/client/scenes/mainmenu.h deleted file mode 100644 index 4f00022..0000000 --- a/games/forespend/src/client/scenes/mainmenu.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once -#include -#include -#include "configmenu.h" -#include - -class mainmenu :public virtual enginend::scene{ -private: - Texture2D bg= LoadTexture(AT("res/images/tilesheet.png")); -public: - void boot() override { - - this->nodes=std::list{ - new enginend::nodes::relative::animated(AT("res/images/sky.gif"),0,0,1,1,2), - new enginend::nodes::relative::text(nullptr,{255,127,0,255},{0,0,0,0},0.25,0.05,0.8,0.1,forefont,32,"FORESPEND"), - }; - enginend::scene::boot(); - } - void tick() override { - for (enginend::nodes::node* n : this->nodes) { - n->tick(); - - } - } - void draw() override { - for (enginend::nodes::node* n : this->nodes) { - n->draw(); - } - } - void exit() override { - enginend::scene::exit(); - } -}; diff --git a/games/forespend/src/main.cpp b/games/forespend/src/main.cpp deleted file mode 100644 index 7d55051..0000000 --- a/games/forespend/src/main.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include - -#include "server/server.h" -#include "client/client.h" -PLATFORM platform=LINUX; -std::string androidpackage="kn.kinfuyuki.forespend"; -inline const char* COMMONCONFIG(){return "common.tdf";} -tiny::ErrorLevel tiny::level{4}; -int main(int argc, char** argv) { - enginend::program* game; - tiny::startup("forespend","0.03g-rewrite"); - bool isserver = false; - if (argc>1) { - for (int i=1;iboot(); - std::atomic running{true}; - std::thread tickthread([game, &running]() { - double tickrate=1.0/game->tickrate; - auto lasttick=std::chrono::high_resolution_clock::now(); - - while (running) { - auto now=std::chrono::high_resolution_clock::now(); - double elapsed=std::chrono::duration_cast>(now-lasttick).count(); - - if (elapsed>=tickrate) { - game->tick(); - lasttick=now; - } else { - std::this_thread::sleep_for(std::chrono::duration(tickrate-elapsed)); - } - } - }); - - double framerate=1.0/game->framerate; - auto lastframe=std::chrono::high_resolution_clock::now(); - while (!WindowShouldClose()) { - auto now=std::chrono::high_resolution_clock::now(); - double elapsed=std::chrono::duration_cast>(now-lastframe).count(); - - if (elapsed>=framerate) { - game->draw(); - lastframe=now; - } else { - WaitTime(framerate-elapsed); - } - } - game->exit(); - return 0; -} \ No newline at end of file diff --git a/games/forespend/src/server/server.cpp b/games/forespend/src/server/server.cpp deleted file mode 100644 index 5960fb2..0000000 --- a/games/forespend/src/server/server.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "server.h" - -server::server() {} - -void server::boot() {} -void server::draw() {} -void server::exit() {} -void server::tick() {} \ No newline at end of file diff --git a/games/forespend/src/server/server.h b/games/forespend/src/server/server.h deleted file mode 100644 index 71e1c64..0000000 --- a/games/forespend/src/server/server.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include - -class server : public enginend::program{ -public: - server(); - const char* CONF() final{return "client.tdf";} - - void boot() override; - void tick() override; - void draw() override; - void exit() override; -}; \ No newline at end of file diff --git a/include/enginend/aud.h b/include/enginend/aud.h deleted file mode 100644 index e69de29..0000000 diff --git a/include/enginend/engine.h b/include/enginend/engine.h deleted file mode 100644 index f2f7746..0000000 --- a/include/enginend/engine.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include "net.h" -#include "gr.h" -#include "aud.h" -#include "program.h" -#include "scenes/scene.h" -enum PLATFORM { - WINDOWS,LINUX,MACOS, - ANDROID,IOS -}; -extern PLATFORM platform; -extern std::string androidpackage; -#include "resmgr.h" \ No newline at end of file diff --git a/include/enginend/gr.h b/include/enginend/gr.h deleted file mode 100644 index 8c898e6..0000000 --- a/include/enginend/gr.h +++ /dev/null @@ -1,2 +0,0 @@ - -#include "graph/window.h" \ No newline at end of file diff --git a/include/enginend/graph/window.h b/include/enginend/graph/window.h deleted file mode 100644 index ff2092c..0000000 --- a/include/enginend/graph/window.h +++ /dev/null @@ -1 +0,0 @@ -#include \ No newline at end of file diff --git a/include/enginend/net.h b/include/enginend/net.h deleted file mode 100644 index e69de29..0000000 diff --git a/include/enginend/program.h b/include/enginend/program.h deleted file mode 100644 index 1d7d517..0000000 --- a/include/enginend/program.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once -#define CFG this->CONF() -#include -#include - -#include "scenes/scene.h" - -namespace enginend{ - extern const long long CPUCLOCK; -inline const char* COMMONCONFIG(); -class program { - unsigned long long currenttick = __rdtsc(); - unsigned long long currentframe = __rdtsc(); -public: - scene *currentscene; - int tickrate; - int framerate; - void changescene(scene*scn); - program():client(false){} - program(bool isclient):client(isclient){} - virtual const char* CONF()=0; - const bool client; - virtual void boot()=0; - virtual void tick()=0; - virtual void draw()=0; - virtual void exit()=0; - bool shouldtick() { - unsigned long long now = __rdtsc(); - unsigned long long interval = CPUCLOCK / tickrate; - if (now - currenttick >= interval) { - currenttick = now; - return true; - } - return false; - } - - bool shoulddraw() { - unsigned long long now = __rdtsc(); - unsigned long long interval = CPUCLOCK / framerate; - if (now - currentframe >= interval) { - currentframe = now; - return true; - } - return false; - } -};} diff --git a/include/enginend/resmgr.h b/include/enginend/resmgr.h deleted file mode 100644 index 206166a..0000000 --- a/include/enginend/resmgr.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include -#include "engine.h" -inline const char *AT(std::string path) { - if (platform==LINUX || platform==WINDOWS || platform==MACOS) { - return path.c_str(); - }else { - if (platform==ANDROID) { - return ("/data/data/"+androidpackage+"/files/"+path).c_str(); - } - } -} diff --git a/include/enginend/scenes/node2d.h b/include/enginend/scenes/node2d.h deleted file mode 100644 index cd22d32..0000000 --- a/include/enginend/scenes/node2d.h +++ /dev/null @@ -1,338 +0,0 @@ -#pragma once -#include - -#include "nodes.h" - -namespace enginend { - namespace nodes { - struct node2d :public node { - Vector2 pos; - node2d(){} - node2d(float x,float y):pos(Vector2{x,y}){} - }; - struct rect :virtual public node2d{ - Vector2 size; - rect(){} - rect(float x,float y,float w,float h):size(Vector2{w,h}){ - this->pos=Vector2{x,y}; - } - }; - struct textured :virtual public rect{ - Texture2D* texture; - textured(){} - textured(Texture2D* texture,float x,float y,float w,float h):texture(texture){ - this->pos=Vector2{x,y};this->size=Vector2{w,h}; - } - void boot()override{} - void tick()override{} - void draw()override{if(texture!=nullptr)DrawTexture(*texture,pos.x,pos.y,rl::WHITE);} - void exit()override{delete texture;} - }; - struct animated : virtual public textured { - Image animimage; - int frames; - int currentframe; - int framedelay; - int framecounter; - unsigned int nextframeoffset; - int prevframe; - - animated() : frames(0), currentframe(0), framedelay(6), framecounter(0), nextframeoffset(0) { - animimage.data = nullptr; - } - - animated(const char* gifpath, Vector2 position, Vector2 size, int delay = 6) - : textured(nullptr, position.x, position.y, size.x, size.y), - framedelay(delay), currentframe(0), framecounter(0), frames(0), nextframeoffset(0) - { - animimage = LoadImageAnim(gifpath, &frames); - if (frames > 0) { - texture = new Texture2D(LoadTextureFromImage(animimage)); - } - } - - void tick() override { - textured::tick(); - if (frames <= 1) return; - - framecounter++; - if (framecounter >= framedelay) { - framecounter = 0; - currentframe++; - if (currentframe >= frames) currentframe = 0; - nextframeoffset = animimage.width * animimage.height * 4 * currentframe; - } - } - void draw() override { - - if (prevframe!=currentframe){ - prevframe=currentframe; - UpdateTexture(*this->texture,((unsigned char*)animimage.data)+nextframeoffset); - } - textured::draw(); - } - void exit() override { - if (animimage.data) UnloadImage(animimage); - if (texture) { - UnloadTexture(*texture); - delete texture; - texture = nullptr; - } - } - }; - struct colored :virtual public rect{ - Color c; - colored(){} - colored(Color color,float x,float y,float w,float h):c(color){ - this->pos=Vector2{x,y};this->size=Vector2{w,h}; - } - void boot()override{} - void tick()override{} - void draw()override{DrawRectangle(pos.x,pos.y,size.x,size.y,c);} - void exit()override{} - }; - struct tinted :virtual public colored,virtual public textured{ - tinted(){} - tinted(Texture2D* texture,Color color,float x,float y,float w,float h): - node2d(x,y), - rect(x,y,w,h), - colored(color,x,y,w,h), - textured(texture,x,y,w,h) - {} - void boot()override{this->colored::boot();this->textured::boot();} - void tick()override{this->colored::tick();this->textured::tick();} - void draw()override{if(texture!=nullptr)DrawTexture(*texture,pos.x,pos.y,c);} - void exit()override{this->colored::exit();this->textured::exit();} - }; - struct text :public tinted { - protected: - std::string result; - public: - Font font; - float fs; - Color txc; - std::string content; - text(){fs=20;} - text(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize,std::string txt): - font(f),fs(fsize),content(txt) - { - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->texture=texture;this->c=color;this->txc=txcol; - - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - void boot()override{this->tinted::boot();} - void tick()override { - this->tinted::tick(); - if(result!=content){ - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - } - void draw()override { - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,1); - Vector2 charsize=MeasureTextEx(font," ",fs,1); - float p=charsize.x>charsize.y?charsize.x/minsize.x:charsize.y/minsize.y; - p=p*2; - int minh=(minsize.y>size.y)?minsize.y:size.y; - int minw=(minsize.x>size.x)?minsize.x:size.x; - DrawRectangle(pos.x-charsize.x,pos.y-charsize.y,minw+p,minh+p,c); - DrawTextEx(font,content.c_str(),pos,fs,1,txc); - } - void exit()override{this->tinted::exit();} - }; - struct button :virtual public tinted{ - std::function func; - bool pressed; - bool hover; - button():pressed(false){} - button(Texture2D* texture,Color color,float x,float y,float w,float h,std::function f):func(f),pressed(false){ - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->texture=texture;this->c=color; - } - void boot()override{this->tinted::boot();} - void tick()override{ - this->tinted::tick(); - Vector2 mouse=GetMousePosition(); - if(CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y})){hover=true; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - pressed=true; - if(func)func(); - }else{ - pressed=false; - } - }else{ - hover=false; - } - } - void draw()override { - if(this->texture!=nullptr)DrawTexture(*texture,pos.x,pos.y,c); - else DrawRectangle(pos.x,pos.y,size.x,size.y,c); - } - void exit()override{this->tinted::exit();} - }; - struct labeledbutton :virtual public button { - std::string label; - Font font; - int fs; - Color txc; - labeledbutton(std::string name,Texture2D* texture,Color color,Color text, - float x,float y,float w,float h,std::function f, - Font fnt,int size):font(fnt),fs(size),txc(text){ - this->pos=Vector2{x,y};this->size=Vector2{w,h};this->texture=texture;this->c=color; - this->func=f;this->pressed=false; - this->label=name; - } - void boot()override{this->button::boot();} - void tick()override{this->button::tick();} - void draw()override{ - this->button::draw(); - Vector2 tsize=MeasureTextEx(font,label.c_str(),fs,1); - Vector2 tpos={ - pos.x+(size.x-tsize.x)/2, - pos.y+(size.y-tsize.y)/2 - }; - DrawTextEx(font,label.c_str(),tpos,fs,1,txc); - } - void exit()override{this->button::exit();} - }; - struct slider :virtual public tinted{ - float val; - float minv; - float maxv; - slider():val(0),minv(0),maxv(1){} - slider(Texture2D* texture,Color color,float x,float y,float w,float h,float min,float max,float v):val(v),minv(min),maxv(max){ - this->pos=Vector2{x,y};this->size=Vector2{x,y};this->texture=texture;this->c=color; - } - void boot()override{this->tinted::boot();} - void tick()override{ - this->tinted::tick(); - Vector2 mouse=GetMousePosition(); - if(CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y})&&IsMouseButtonDown(MOUSE_LEFT_BUTTON)){ - float t=(mouse.x-pos.x)/size.x; - val=minv+t*(maxv-minv); - if(valmaxv)val=maxv; - } - } - void draw()override{ - DrawRectangle(pos.x,pos.y,size.x,size.y,rl::DARKGRAY); - float t=(val-minv)/(maxv-minv); - DrawRectangle(pos.x,pos.y,size.x*t,size.y,c); - } - void exit()override{this->tinted::exit();} - }; - struct textfield :public text{ - textfield(){} - textfield(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize,std::string txt): - text(texture,txcol,color,x,y,w,h,f,fsize,txt){} - void boot()override{this->text::boot();} - void tick()override{this->text::tick();} - void draw()override{ - Vector2 p=pos; - Vector2 charsize=MeasureTextEx(font," ",fs,0); - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,charsize.x/2); - float po=charsize.x>charsize.y?charsize.x/charsize.y:charsize.y/charsize.x;po=po*5; - int minh=(minsize.y>size.y)?minsize.y:size.y; - int minw=(minsize.x>size.x)?minsize.x:size.x; - DrawRectangle(pos.x-(po/2),pos.y-(po/2),minw+(po*1.1),minh+(po*1.1),c); - DrawTextEx(font,content.c_str(),p,fs,charsize.x/2,this->txc); - } - void exit()override{this->text::exit();} - }; - struct textinput :public text{ - bool active; - int cpos; - textinput():active(false),cpos(0){} - textinput(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize):active(false),cpos(0){ - this->pos=Vector2{x,y};this->size=Vector2{x,y};this->texture=texture;this->c=color;this->font=f;this->content=""; - this->txc=txcol;this->fs=fsize; - } - void boot()override{this->text::boot();} - void tick()override{ - this->text::tick(); - Vector2 mouse=GetMousePosition(); - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y}); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - } - } - void draw()override{ - this->text::draw(); - if(active)DrawRectangle(pos.x+MeasureText(content.c_str(),fs),pos.y,2,fs,{0,0,0,127}); - } - void exit()override{this->text::exit();} - }; - struct textinputfield :public textfield{ - bool active; - int cpos; - textinputfield():active(false),cpos(0){} - textinputfield(Texture2D* texture,Color txcol,Color color,float x,float y,float w,float h,Font f,float fsize):active(false),cpos(0), - textfield(texture,txcol,color,x,y,w,h,f,fsize,""){} - void boot()override{this->textfield::boot();} - void tick()override{ - this->textfield::tick(); - Vector2 mouse=GetMousePosition(); - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,{pos.x,pos.y,size.x,size.y}); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - if(IsKeyPressed(KEY_ENTER)){ - content+='\n'; - cpos++; - } - } - } - void draw()override{ - this->textfield::draw(); - if(active){ - Vector2 p=pos; - float lh=fs+2; - std::string line=""; - for(char ch:content){ - if(ch=='\n'){ - p.y+=lh; - line=""; - }else{ - line+=ch; - } - } - DrawRectangle(p.x+MeasureText(line.c_str(),fs),p.y,2,fs,rl::BLACK); - } - } - void exit()override{this->textfield::exit();} - }; - } -} \ No newline at end of file diff --git a/include/enginend/scenes/node2drelative.h b/include/enginend/scenes/node2drelative.h deleted file mode 100644 index 76c034c..0000000 --- a/include/enginend/scenes/node2drelative.h +++ /dev/null @@ -1,417 +0,0 @@ -#pragma once -#include - -#include "nodes.h" - -namespace enginend{ - namespace nodes{ - namespace relative { - struct node2d :public node { - double x; - double y; - double w; - double h; - node2d(){x=0;y=0;w=0;h=0;} - node2d(double x,double y,double w=0,double h=0):x(x),y(y),w(w),h(h){} - }; - struct rect :virtual public node2d{ - rect(){} - rect(double x,double y,double w,double h):node2d(x,y,w,h){} - }; - struct textured :virtual public rect{ - Texture2D* texture; - textured(){texture=nullptr;} - textured(Texture2D* texture,double x,double y,double w,double h):texture(texture),rect(x,y,w,h){} - void boot() override{} - void tick() override{} - void draw()override{ - if(texture==nullptr)return; - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - tiny::echo("og: %f %f %f %f", x,y,w,h); - tiny::echo("transformed: %f %f %f %f", ax, ay, aw, ah); - DrawTexturePro(*texture,{0,0,(float)texture->width,(float)texture->height},{ax,ay,aw,ah},{0,0},0,WHITE); - } - void exit()override { - if(texture){ - UnloadTexture(*texture); - delete texture; - texture=nullptr; - } - } - }; - struct animated :virtual public textured{ - Image animimage; - int frames; - int currentframe; - int framedelay; - int framecounter; - int prevframe; - unsigned int nextframeoffset; - animated():frames(0),currentframe(1),framedelay(6),framecounter(0),nextframeoffset(0){ - animimage.data=nullptr; - prevframe=currentframe; - } - animated(const char* gifpath,double x,double y,double w,double h,int delay=6): - textured(nullptr,x,y,w,h),framedelay(delay),currentframe(1),framecounter(0),frames(0),nextframeoffset(0) - { - prevframe=currentframe; - this->x=x; this->y=y; this->w=w; this->h=h; - animimage=LoadImageAnim(gifpath,&frames); - if(frames>0){ - texture=new Texture2D(LoadTextureFromImage(animimage)); - } - } - void tick()override{ - if(frames<=1)return; - framecounter++; - if(framecounter>=framedelay){ - framecounter=0; - currentframe++; - if(currentframe>=frames)currentframe=0; - nextframeoffset=animimage.width*animimage.height*4*currentframe; - tiny::echo("updating node\nframes: %i\n current frame: %i",frames,currentframe); - tiny::echo("%i",nextframeoffset); - } - } - void draw()override { - if (prevframe!=currentframe){ - prevframe=currentframe; - UpdateTexture(*this->texture,((unsigned char*)animimage.data)+nextframeoffset); - } - textured::draw(); - } - void exit()override{ - if(animimage.data)UnloadImage(animimage); - textured::exit(); - } - }; - struct colored :virtual public rect{ - Color c; - colored(){} - colored(Color color,double x,double y,double w,double h):c(color),rect(x,y,w,h){} - void boot()override{} - void tick()override{} - void draw()override{ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - DrawRectangle(ax,ay,aw,ah,c); - } - void exit()override{} - }; - struct tinted :virtual public colored,virtual public textured{ - tinted(){} - tinted(Texture2D* texture,Color color,double x,double y,double w,double h): - node2d(x,y,w,h), - rect(x,y,w,h), - colored(color,x,y,w,h), - textured(texture,x,y,w,h) - {} - void boot()override{} - void tick()override{} - void draw()override{ - if(texture==nullptr)return; - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - DrawTexturePro(*texture,{0,0,(float)texture->width,(float)texture->height},{ax,ay,aw,ah},{0,0},0,c); - } - void exit()override{ - textured::exit(); - } - }; - struct text :public tinted { - protected: - std::string result; - public: - Font font; - float fs; - Color txc; - std::string content; - text(){fs=20;} - text(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize,std::string txt): - tinted(texture,color,x,y,w,h), - font(f),fs(fsize),content(txt),txc(txcol) - { - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - void boot()override{} - void tick()override { - if(result!=content){ - result=content; - size_t initp=0; - while((initp=result.find("\n",initp))!=std::string::npos){ - result.replace(initp,1,"\\n"); - initp+=2; - } - } - } - void draw()override { - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,1); - Vector2 charsize=MeasureTextEx(font," ",fs,1); - float p=charsize.x>charsize.y?charsize.x/minsize.x:charsize.y/minsize.y; - p=p*2; - int minh=(minsize.y>ah)?minsize.y:ah; - int minw=(minsize.x>aw)?minsize.x:aw; - DrawRectangle(ax-charsize.x,ay-charsize.y,minw+p,minh+p,c); - DrawTextEx(font,content.c_str(),{ax,ay},fs,1,txc); - } - void exit()override{ - tinted::exit(); - } - }; - struct button :virtual public tinted{ - void(*func)(); - bool pressed; - bool hover; - button():func(nullptr),pressed(false),hover(false){} - button(Texture2D* texture,Color color,double x,double y,double w,double h,void(*f)()):func(f),pressed(false),hover(false),tinted(texture,color,x,y,w,h){} - void boot()override{} - void tick()override{ - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(CheckCollisionPointRec(mouse,r)){hover=true; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - pressed=true; - if(func)func(); - }else{ - pressed=false; - } - }else{ - hover=false; - pressed=false; - } - } - void draw()override { - tinted::draw(); - } - void exit()override{ - tinted::exit(); - } - }; - struct labeledbutton :virtual public button { - std::string label; - Font font; - int fs; - Color txc; - labeledbutton(std::string name,Texture2D* texture,Color color,Color text, - double x,double y,double w,double h,void(*f)(), - Font fnt,int size):font(fnt),fs(size),txc(text),label(name), - button(texture,color,x,y,w,h,f) - {} - void boot()override{} - void tick()override{ - button::tick(); - } - void draw()override{ - button::draw(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - Vector2 tsize=MeasureTextEx(font,label.c_str(),fs,1); - Vector2 tpos={ - ax+(aw-tsize.x)/2, - ay+(ah-tsize.y)/2 - }; - DrawTextEx(font,label.c_str(),tpos,fs,1,txc); - } - void exit()override{ - button::exit(); - } - }; - struct slider :virtual public tinted{ - float val; - float minv; - float maxv; - slider():val(0),minv(0),maxv(1){} - slider(Texture2D* texture,Color color,double x,double y,double w,double h,float min,float max,float v):val(v),minv(min),maxv(max),tinted(texture,color,x,y,w,h){} - void boot()override{} - void tick()override{ - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(CheckCollisionPointRec(mouse,r)&&IsMouseButtonDown(MOUSE_LEFT_BUTTON)){ - float t=(mouse.x-(x*sw))/(w*sw); - val=minv+t*(maxv-minv); - if(valmaxv)val=maxv; - } - } - void draw()override{ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - DrawRectangle(ax,ay,aw,ah,DARKGRAY); - float t=(val-minv)/(maxv-minv); - DrawRectangle(ax,ay,aw*t,ah,c); - } - void exit()override{ - tinted::exit(); - } - }; - struct textfield :public text{ - textfield(){} - textfield(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize,std::string txt): - text(texture,txcol,color,x,y,w,h,f,fsize,txt){} - void boot()override{} - void tick()override{ - text::tick(); - } - void draw()override{ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float aw=w*sw; - float ah=h*sh; - Vector2 charsize=MeasureTextEx(font," ",fs,0); - Vector2 minsize=MeasureTextEx(font,content.c_str(),fs,charsize.x/2); - float po=charsize.x>charsize.y?charsize.x/charsize.y:charsize.y/charsize.x;po=po*5; - int minh=(minsize.y>ah)?minsize.y:ah; - int minw=(minsize.x>aw)?minsize.x:aw; - DrawRectangle(ax-(po/2),ay-(po/2),minw+(po*1.1),minh+(po*1.1),c); - DrawTextEx(font,content.c_str(),{ax,ay},fs,charsize.x/2,txc); - } - void exit()override{ - text::exit(); - } - }; - struct textinput :public text{ - bool active; - int cpos; - textinput():active(false),cpos(0){} - textinput(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize):active(false),cpos(0), - text(texture,txcol,color,x,y,w,h,f,fsize,""){} - void boot()override{} - void tick()override{ - text::tick(); - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,r); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - } - } - void draw()override{ - text::draw(); - if(active){ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - DrawRectangle(ax+MeasureTextEx(font,content.c_str(),fs,1).x,ay,2,fs,{0,0,0,127}); - } - } - void exit()override{ - text::exit(); - } - }; - struct textinputfield :public textfield{ - bool active; - int cpos; - textinputfield():active(false),cpos(0){} - textinputfield(Texture2D* texture,Color txcol,Color color,double x,double y,double w,double h,Font f,float fsize):active(false),cpos(0), - textfield(texture,txcol,color,x,y,w,h,f,fsize,""){} - void boot()override{} - void tick()override{ - textfield::tick(); - Vector2 mouse=GetMousePosition(); - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - Rectangle r={float(x*sw),float(y*sh),float(w*sw),float(h*sh)}; - if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ - active=CheckCollisionPointRec(mouse,r); - } - if(active){ - int key=GetCharPressed(); - while(key>0){ - if(key>=32&&key<=125){ - content+=static_cast(key); - cpos++; - } - key=GetCharPressed(); - } - if(IsKeyPressed(KEY_BACKSPACE)&&content.length()>0){ - content.pop_back(); - cpos--; - } - if(IsKeyPressed(KEY_ENTER)){ - content+='\n'; - cpos++; - } - } - } - void draw()override{ - textfield::draw(); - if(active){ - float sw=GetScreenWidth(); - float sh=GetScreenHeight(); - float ax=x*sw; - float ay=y*sh; - float lh=fs+2; - Vector2 p={ax,ay}; - std::string line=""; - for(char ch:content){ - if(ch=='\n'){ - p.y+=lh; - line=""; - }else{ - line+=ch; - } - } - DrawRectangle(p.x+MeasureTextEx(font,line.c_str(),fs,1).x,p.y,2,fs,BLACK); - } - } - void exit()override{ - textfield::exit(); - } - }; - } - } -} \ No newline at end of file diff --git a/include/enginend/scenes/nodes.h b/include/enginend/scenes/nodes.h deleted file mode 100644 index a14600e..0000000 --- a/include/enginend/scenes/nodes.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#include - -#include "../gr.h" -#include "../aud.h" -#include "../net.h" -#include - - namespace enginend { -namespace nodes { - struct node{ - public: - virtual void boot()=0; - virtual void tick()=0; - virtual void draw()=0; - virtual void exit()=0; - }; - } - struct group : public virtual enginend::nodes::node { - std::vector children; - void boot(){for (node* n: children){n->boot();}} - void tick(){for (node* n: children){n->tick();}} - void draw(){for (node* n: children){n->draw();}} - void exit(){for (node* n: children){n->exit();}} - }; -} \ No newline at end of file diff --git a/include/enginend/scenes/scene.h b/include/enginend/scenes/scene.h deleted file mode 100644 index 5647e2d..0000000 --- a/include/enginend/scenes/scene.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include "nodes.h" -#include - - -namespace enginend { - struct scene{ - std::list nodes; - virtual void boot() { - int i=0; - tiny::echo((char*)"initializing scene"); - for (enginend::nodes::node* n : nodes) { - tiny::echo((char*)"initializing object of ID: %i",i++); - n->boot(); - } - } - virtual void draw() { - - ClearBackground(rl::BLANK); - BeginDrawing(); - for (enginend::nodes::node* n : nodes) { - n->draw(); - } - EndDrawing(); - } - virtual void tick() { - for (enginend::nodes::node* n : nodes) { - n->tick(); - } - } - virtual void exit() { - for (enginend::nodes::node* n : nodes) { - n->exit(); - } - } - }; -} \ No newline at end of file diff --git a/include/incmgr.h b/include/incmgr.h deleted file mode 100644 index 41f083f..0000000 --- a/include/incmgr.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include \ No newline at end of file diff --git a/include/json.h b/include/json.h deleted file mode 100644 index 27986ed..0000000 --- a/include/json.h +++ /dev/null @@ -1,25712 +0,0 @@ -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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 != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 - #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 12 // NOLINT(modernize-macro-to-enum) -#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) - -#ifndef JSON_DIAGNOSTICS - #define JSON_DIAGNOSTICS 0 -#endif - -#ifndef JSON_DIAGNOSTIC_POSITIONS - #define JSON_DIAGNOSTIC_POSITIONS 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_DIAGNOSTIC_POSITIONS - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp -#else - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS -#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, c) json_abi ## a ## b ## c -#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ - NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) - -#define NLOHMANN_JSON_ABI_TAGS \ - NLOHMANN_JSON_ABI_TAGS_CONCAT( \ - NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ - NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ - NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) - -// 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // array -#include // size_t -#include // uint8_t -#include // string - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // declval, pair -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 Niels Lohmann -// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson -// SPDX-License-Identifier: MIT - -/* Hedley - https://nemequ.github.io/hedley - * Created by Evan Nemerson - * SPDX-License-Identifier: CC0-1.0 - */ - -#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_26) && !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) - #if (defined(__cplusplus) && __cplusplus > 202302L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202302L) - #define JSON_HAS_CPP_26 - #define JSON_HAS_CPP_23 - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) - #define JSON_HAS_CPP_23 - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 201103L) || (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 a 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 accessing 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) \ - { \ - /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ - 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) \ - { \ - /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ - 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.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE -@since version 3.9.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT -@since version 3.11.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& 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__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE -@since version 3.11.3 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& 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 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT -@since version 3.11.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& 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__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE -@since version 3.11.3 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -// inspired from https://stackoverflow.com/a/26745591 -// allows calling 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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 the 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 the 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 -inline 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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 -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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // numeric_limits -#include // char_traits -#include // tuple -#include // false_type, is_constructible, is_integral, is_same, true_type -#include // declval -#if defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603L - #include // byte -#endif -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2025 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 the 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(std::char_traits::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(std::char_traits::eof()); - } -}; - -#if defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603L -template<> -struct char_traits : std::char_traits -{ - using char_type = std::byte; - using int_type = uint64_t; - - static int_type to_int_type(char_type c) noexcept - { - return static_cast(std::to_integer(c)); - } - - static char_type to_char_type(int_type i) noexcept - { - return std::byte(static_cast(i)); - } - - static constexpr int_type eof() noexcept - { - return static_cast(std::char_traits::eof()); - } -}; -#endif - -/////////////////// -// 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 use 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