From 003f36a0c69e370c30203e4ece9d247bf6055eed Mon Sep 17 00:00:00 2001 From: dadu Date: Tue, 21 Nov 2023 17:33:44 +0100 Subject: [PATCH 01/59] cleanup before starting parallel impl --- flippy/Triangulation.hpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index bca668a..e505b6d 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -372,9 +372,9 @@ class Triangulation static Triangulation experimental_load_sphere_from_stl(std::filesystem::path const& stl_file_path, Real verlet_radius_inp){ std::vector> triangles = implementation::stlSerializer::read_STLSolid_into_triangle_vec(stl_file_path); - std::vector> nodes; + std::vector> nodes; std::vector> unique_nodes; - fp::Triangulation triangulation; + Triangulation triangulation; nodes.resize(triangles.size()/2 + 2); for (Index i=0; implementation::stlTriangle &triangle : triangles) { for (unsigned int tr_idx = 0; tr_idx < 3; ++tr_idx) { @@ -385,7 +385,7 @@ class Triangulation triangle[tr_idx].id = i; ++i; unique_nodes.push_back(node); - fp::Node n{}; + Node n{}; n.pos = node.pos; n.id = node.id; nodes[n.id] = n; @@ -405,10 +405,6 @@ class Triangulation } } - for(auto &node: nodes){ - std::cout << "node_id: " << node.id << "\n"; - } - Triangulation tr; tr.verlet_radius = verlet_radius_inp; tr.R_initial = 1; From 93167fe5fefc858cea56773047cdd5728edbe1df Mon Sep 17 00:00:00 2001 From: dadu Date: Tue, 21 Nov 2023 17:35:11 +0100 Subject: [PATCH 02/59] cleanup before starting parallel impl --- flippy/Triangulation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index e505b6d..a38eec0 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -1005,7 +1005,7 @@ class Triangulation Nodes nodes_; std::vector bulk_nodes_ids; Geometry global_geometry_; - Geometry pre_update_geometry, post_update_geometry; + // Geometry pre_update_geometry, post_update_geometry; mutable vec3 l0_, l1_; Real verlet_radius{}; Real verlet_radius_squared{}; From 25d871dd80aa6ca6e4f99d2db970b48f95a9030b Mon Sep 17 00:00:00 2001 From: dadu Date: Mon, 4 Dec 2023 15:01:58 +0100 Subject: [PATCH 03/59] ignore actions-runner --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5b57228..ee780cc 100755 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store .directory +actions-runner/* actions-runner CMakeLists.txt assets/flippy.psd From 0805ac200f000368ee27d64ba405da5bea86747e Mon Sep 17 00:00:00 2001 From: dadu Date: Mon, 4 Dec 2023 15:06:54 +0100 Subject: [PATCH 04/59] added algorithm include in Triangulator.hpp & pure_node_move in Triangulation.hpp --- .gitignore | 1 + docs/_monte_carlo_updater_8hpp.html | 118 +- docs/_monte_carlo_updater_8hpp__incl.map | 118 +- docs/_monte_carlo_updater_8hpp__incl.md5 | 2 +- docs/_monte_carlo_updater_8hpp__incl.png | Bin 75004 -> 75348 bytes docs/_monte_carlo_updater_8hpp_source.html | 6 +- docs/_triangulation_8hpp.html | 90 +- docs/_triangulation_8hpp__incl.map | 90 +- docs/_triangulation_8hpp__incl.md5 | 2 +- docs/_triangulation_8hpp__incl.png | Bin 56475 -> 63373 bytes docs/_triangulation_8hpp_source.html | 1469 +++++++++-------- docs/_triangulator_8hpp.html | 39 +- docs/_triangulator_8hpp__incl.map | 38 +- docs/_triangulator_8hpp__incl.md5 | 2 +- docs/_triangulator_8hpp__incl.png | Bin 25669 -> 28115 bytes docs/_triangulator_8hpp_source.html | 899 +++++----- docs/classfp_1_1_monte_carlo_updater.html | 18 +- ...3e40c3b93bf2bf6f2b08291357503be_cgraph.map | 18 +- ...3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 | 2 +- ...3e40c3b93bf2bf6f2b08291357503be_cgraph.png | Bin 39022 -> 36040 bytes docs/classfp_1_1_triangulation.html | 50 +- ...7b2a1e57f742d1d401eeb09b057beb_icgraph.map | 11 - ...7b2a1e57f742d1d401eeb09b057beb_icgraph.md5 | 1 - ...7b2a1e57f742d1d401eeb09b057beb_icgraph.png | Bin 18850 -> 0 bytes ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.map | 12 +- ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 | 2 +- ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.png | Bin 15984 -> 8050 bytes ...ef436fe4758c409b21a135b329edc17_cgraph.map | 12 +- ...ef436fe4758c409b21a135b329edc17_cgraph.md5 | 2 +- ...ef436fe4758c409b21a135b329edc17_cgraph.png | Bin 14728 -> 7025 bytes ...8102adbe7dab80cda3209844a939e30_cgraph.map | 8 +- ...8102adbe7dab80cda3209844a939e30_cgraph.md5 | 2 +- ...8102adbe7dab80cda3209844a939e30_cgraph.png | Bin 11096 -> 5753 bytes docs/flippy_8hpp.html | 120 +- docs/flippy_8hpp__incl.map | 120 +- docs/flippy_8hpp__incl.md5 | 2 +- docs/flippy_8hpp__incl.png | Bin 77270 -> 86971 bytes flippy/Triangulation.hpp | 12 +- flippy/Triangulator.hpp | 1 + single_header_flippy/flippy.hpp | 21 +- 40 files changed, 1637 insertions(+), 1651 deletions(-) delete mode 100644 docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.map delete mode 100644 docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.md5 delete mode 100644 docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.png diff --git a/.gitignore b/.gitignore index ee780cc..ab5dcfe 100755 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store .directory actions-runner/* +actions-runner/_work actions-runner CMakeLists.txt assets/flippy.psd diff --git a/docs/_monte_carlo_updater_8hpp.html b/docs/_monte_carlo_updater_8hpp.html index dbc249c..7599473 100644 --- a/docs/_monte_carlo_updater_8hpp.html +++ b/docs/_monte_carlo_updater_8hpp.html @@ -117,64 +117,66 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/_monte_carlo_updater_8hpp__incl.map b/docs/_monte_carlo_updater_8hpp__incl.map index a32f0a2..27875c8 100644 --- a/docs/_monte_carlo_updater_8hpp__incl.map +++ b/docs/_monte_carlo_updater_8hpp__incl.map @@ -1,60 +1,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_monte_carlo_updater_8hpp__incl.md5 b/docs/_monte_carlo_updater_8hpp__incl.md5 index edb035e..57490f8 100644 --- a/docs/_monte_carlo_updater_8hpp__incl.md5 +++ b/docs/_monte_carlo_updater_8hpp__incl.md5 @@ -1 +1 @@ -539da92318d481112520afccae947dc8 \ No newline at end of file +0b2e234a6494b1b9a9166e72fef470a0 \ No newline at end of file diff --git a/docs/_monte_carlo_updater_8hpp__incl.png b/docs/_monte_carlo_updater_8hpp__incl.png index 0812b6c60b58357be0c21adf6c7d6ba67c027cbd..f335f79d41a317942b7bdb8dccac006907f31429 100644 GIT binary patch literal 75348 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 JtIo3S{RY;|;TQk_ literal 75004 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

~b>w5HS;Dfcw zM-{Sy>m^CVDL!O);%uqcCj{CcOZGjlA!Niq-w_Rs$tZ{Yg*9I%*Q2~mopbrGYVP#E zX=wR>pU-XI1E%?YJh|C)Lj=Q0P!3G_vV&cuF89EV#v&=t&?I8>((mkT3+H2g% zg%QQ1 zto;a}SU!5*Hx+8PqW?@w^zbPdrC(V`lM%<~j8m`ZZwnn{u!fALja?OBN2)4c(>B7j&tM1!PceY^#*T#BF0V={G1{21O^uuKxsndHOMLA9JFIe|*e$f01 zw7-tE6%H6?k(K(!KN-_C7DFnzm?e}o+?%P-?*&5orFE>(ab^-NNM&XRg$y6j8!-2& zD&<2P)$%^`?R^gGgu$tAs)_4J{)FH3+hjA*PZFcfMO5qpT9)LAm|6bMI0N2NvHr zW1erFtNHE}nC)=HyQ0pFL)n<4y;{f5L1fG(HGUkg09%D(*bCiEGCE@2(y zdzQw#7XO?swxn3-+d9S#Yip1V$*f2clhsYui4;oAQ__jyeX&m6+3b@pJhbKC)6(~9A0kynN>?P-EU4! z3ZCr}lGPiPLVu24TlhK6yLX1)M>0}eh$TEDmuM6R2u9-p$8<)XI^0`mNYRKpCzo}= z{p{kSTJ<#OZb1I$4&^5H0)22Z7)2^m$@xC;&-K(5_LjCotDg6M!fT4pl-m|Je5Ml^GzC)iQD{$88j(X4oCNQX2rzqsiPau2!cDpi@+af%jBtLZfIkQI593y z{w8}XLrUU?_Ixm{?ULEX{`PXn9U>0Q=rawx@c6Ydl(QoWY>_ zVfuJ3=_X*}h_!jC{%~>OTkzA2)-p~*1A^s?S7(kIfufMCM1z38S3YdRWbaRY%u+4a z&D-zu`z0=wA^6tZT040WXoOIxvOqJvT^}#cbo#p~w+tnHSm8nk* zY<^bT(r}Ln2hiVL9esh*6Lee`6!`QW z`u_duq`d#GOE)!ZJFcKj9AXI&rOF(NG2U zMo!loT|rOg(C(A)7Lx*cD~DwU>;a_ma7uddM9aVTj*p4k@5WkdFw^uleo2%}0-jPS zA9{lA{h!~nZPC@G;UOA-d4O{4SELd+H%`WXM!If03^PJA$?_D0$}R9A{)8Ov6t2d@|PvKEe2Za5hV5HOO#6G)r3A0?E|TF#6tNTk)`+L+}l8#F?)j`>LuT?6Es999!!u z#hc&GCkB}#cj_GZ%S6S3dDZ{tEWoEScRfdoJ)BRz>^_t`mF7-VERk<9Wn3EAl`om) zta1$;SYE;{Q|PRa{O`vvP?tCO9ITG=+IJ7tOWMY{_dXkKaIbJ`Tn|J^}5+rRC-|NeyoADL3( z?lqmkywQ0=@e2))|Jr*p&(7=YyoKsrZhJP4zkE3)JU;O(QFr|K>)Vho6$4xJV1Zkm zF^SC8XRHL3AeB|}Fty=P#W{=Lsjh4qxszd%)5z2iW8$;SE@d@$1ONT*UM;;jQjSuk zXR^>486kbnHOZ^vbtxID5u%-~SSfz%k8Kl+kseCHAxonm<#lsLF(*zVJRuVroU|nQ zIPWID2s0)L+h8Eo`GY?y_lL3YxqEmuB=jYldEv29;ipO-lkXW?e_&$%o&@{M4kUq} zW%lNtMa;8k++sd&6%Uqui}xo~k@^A}AhdPD8GZTRiHI;Y`aTX#SrR$z?S=vXyL%Be4B=9_dB~pl4^w+yPpLZ>7+kbWw zk-O=8SGmac67o4yj7iL0VbmkQYRbO31xm%Yz*Io%+q_=n@_to%Fl=YDHu2F19#$zH~TmK#NP^u~d!=c)Cb#&!~T_GVKTdW0R8hCXE*H z7Z(?gr1E_FX=!T_mLasuQeLz+3x1~IxNez*%LM7)(@i_zkG>5xXfAs&dLk+DY3F;0 zP$Rv&8LvL6hcv1b78YKfb>nEsjqIpt#iW0ZtLAX7DJx|`&jCWuXFyRoJ~dT`ts>xH zhKbVekJ{Aqbm`93i<12pW*%laBhF@%(g|9)Cr)OS;(}_17@)>%5_#R-3qvUwqnRSf zfL9g?_-G{^TQFKH6H~EdMWgqX4dA|M5pKZ8CMER&#d1esC6E(B(;*@ z49xh*I*(D#2R-5)4lX{5VCb@7rgDbzDTLZBmH^Y+ z3(&rX{^S<|>J}jOXxaGerf_6Go_cMp%>wG~7>pOV(#WG;pa|0#2b80WCEJQb9})9a z)XRR=)rTL8T2U860WI5W;tER+k-CM|Fjg**n=YZ-z2NLunjH*)CZ?ti-mC=}Lid_^ zEXSS$HDjn;K^QyDyBKK{`G#a-V)y`J^NfWfY`KYgP*~u3^v_Sg)|N&U5Dex5^5*YP z(TbS?>5T0hIqV3=Nf>OxUzqqc1I^9}@Ux619J!q(5B6?FZft{V@J6>~*%$4QT8> zzy29|ZiFHX7Zeswmq1uxs@{N{tGC{`)&C{$gR3cK;k2B*{A6BgsfmV)+VX3s%^ok} zqWnw|Fw>E(Kdoc#Tp~maiLSEt0M9NNCdv=vX{LyJal@#%IO30-fP63Ju(&xkt$OZP z38;nA2@QE25 z8rlTH(a4m;0Z_na6-i>%`B;C`NK~KSS}^^a_1aI=>%y#RPc!engR?Bs4KXmJN!3x>|G6OKNa@W&eneC4|9Ii(TaX>AB8*s`%4%OXs zaa&a2Xzc+!G@vyt7>tSoc%^NFKK8>&Y(Ru1f~BG*9!8S~CLP~OkWf&Zj~2Kj-@f$% z?8jA-R-aIYgDd_r6l}q2l4_%bBUcZ_-a9~XKfk`-1q8z!Fy1YIv+AU?u~tHz5@(mAfrC?5a6`;JK`kx?id(uIAnqg!Etany?n|Law*VrO7ZJul#|=5 z?&?=~`peV)_$9ecS-QdnY;JUPbR=YCh}=j%w1RQBLCA8p1cF5_7@Kb26b}3j&H#ZE ztk*%nW^4c=0iNI%NJTw40cCFsaJqSZ|NgzFuY0`K4p^7>+nLi5KBK_mVhV7(fl7xG z3Koe3m}ydRf8SrHe=f(x_draBy)4%|f?!}X{=*1J&9At)%2W9O%C2 zhy3!~dZrA#Na|Z3fo6MT2D|D?od9%63anq9Iy+JjtC`MWiw@+G!!g*R)0Y=EB=R4> z#K(ns&1Csr$bpINK*SO40H!Qa$;re(Gloy~!mEkEcL6R0F6`}(&L3*5)abd=4@)9MT=$=YfWMt;nPm*t z8%(X@`**ru-iK^3od}@HFbMQNfY8S#2)$;29San7GCZK>%lw7Pnao#woo=JoqXKI% znGqN_ABN?J5?SCq?|&DmHOV1n<7f$un-1Yxc(h61w#_>&9(8;Vt#2MFE+g*Wp)&$Vo#mVBaB><4OXFco1>KikM+s{;BVBAUG31b^w%sXNyzG zN?<>LXA0A>um<4{BroHMoHxk3lb=3)f@#M9mb#?HScV+XKS|9hwbe*m^M8m29xEV) zpj(Wjbb^%yrv(iHDmlPFMiuh-_}FmX_X6;%9bINlKs)It?o*+pRH2)qHusx@5$G_? z{^s`KVQXh6@g@bj43mq1xitYNlnbzUHg|S<0e$%*$qNjc^->KJkdZLipZErLQZT(j z(nO)kOPFK>%&taTn?%ez;q*SAb$JXj)tGlSo*Z!N%kDDLtg-Ez$|5S70VCXlD4YsN zh+*ej{nH@zwuHgaXBN6ZTwk)50izLE4gfwtoVIhUAXONC6C7zXnITGS9J>R@#v31FBc6Ga05pZx>u{uC8QbiuF)d3t+Kfhl27$r=Hh@BQ!j$K|yr8K6h7 z4~Wko@0o$xVWDmmgc9I8gY`-|!w7^9PcN@3kZ){m2cs|0aEL`fx5V{B{|+NQ z|5vOM(*I_EdsfSE2Pgw<1>?MCJi7(bMI-B-!I+|RKnMeyQgi?;uFDg~y&-+~o0HXy z*M4arB2K_k17O*D z3|5y;Wa90=%|M97%)$crWf`yo)PgXq?=}nRwQnvWdvCtzULHS2LI2mcafIviecUB| z1I7TQxPJ!7vk3u@TQ6a>?z8nbu=M~FlK~^5z3C;aC4JMmDf(yPt=+GdRG4-ISi?En z31LoI+d33W7oC@xFA+Q0r3exRMs#8Y64F3fhFfj9*4pZ1548+mG0ck5>do$d! z2iCcn_o%V~rxQ4^IDr7vas@!REa2qJ`<1f`J8z?b{Y1ma_!+?dN|26VK1;xD>cfY6 z`)GiZK#np0_235_t?)42=Ph}@*6PThoHFTsa#Z;KLO2itGjvG;m?;G8Cc=9Z&8pQONIkKLI3ph zL@w@6{_^EZIGDN;%z(|nYljfvvShsRX?mt{|JXH=)0S=kn!13l3kDrC3z;nY&kB;p zA#e6l48qnin7{&17AOS32txF;vAm=K?BX+!8i_saKvMB)&jv#jo0XL%fB_a*biRK~ z;&qzppS?c-vcYVpfV$Q<%keC@M^HFbtgBdP6w>4OptEA(%u7F@x};-#5wdd+p*uiT zPDdp|8X7-|sd~*-tlC{91B8HxVN;m*<@Jz{9U%V0q%*u~{gpEWJ1=&IQw5!9-n@AO zt|1!K4=*7*Kq_an6rIavhEX|7bg(NFQw;+4UO&t~3K*&Z#ScV*U!JreEaU*attd*d zCJ8N=+)<%K=TxVuZeTuh z6RsK@-t~*B9^7&N^T}ERdL=L^j)1?1hLo5mC z08c%SYv&sPZV>Xj=LI0CukP5n-x%yn!TikO2oVGM_bb9+hM86f%a~30=OKh1Ks)LZ zD89rdBp@{i`-4pwk&{EUzVb(ls={5x-lU+xwsgwiryxlEIbN5$Ug5PpJyKwhEt^7S zO&V!~r>6FQ$fFGBs>rO`&Zf1Fi$1XzkjA-hG$q5!U3R>*w}a_ z;NM^J*S-x4SLH1i@-R)E?ZL0slex&C&NH7WQuESJ17G<1V=(OdVa8d~1`EkG#~`6` z0`LfvaH(?K=)xPPkY+k`T8oYG%9*(|f4UJB2b&r!A$ezKZV<*`sx4l5otvARRshI^ z@BNNXsCh{+pLGww3l+e$FcmWpXt)0^w)y!qZo#U_jHxm6UJ4F+Ci~0?gFS+BR1L!a zpxGfvr!Y+z9*dE6P>z{{t)u62T)X0Z_ydmDdMX5_>j&~X9tp_+=(wVxqr*qE*D)XS zMe>;Rpn=q40`r}M1x&C@@3vn48-Tg|0spnqy=R;yJ@M$9QP>H{px(q7d2=g1Zs!k5 z`&SO&v6n}`);!Scf(151DSf-8;`O9D7u30N)y12ZaGT0{p22cSFHtM9RzsFh9w1k1|G$`JTo4mBTx z_yb~dQhhcMuVbu86Wj&9Y2)CsfvHkal5GrFHcHRq{_Xry;)t9YOAcMTd<3N*u$0^d z5CfKK2a2hCGYb{efB9AN5=Q4SUTs`9?Nd)cO02__^Ye z!;GOmyYf;DySEQlhq6GrYN$o|!v`{$#0yxnUgGnhADk-e#tdA*#87c40W@X+VED1+ zDx$fL`G9YD6GXMn`FUbPL#>l_5H(?0b>}IQQrPt~sLgo%?p-e_n!=QnX9}Vd#1U~2 z7CU|_a~OQ!)B_r%A2Q8s09Py>6yRV(YZ2V(frJMe^tkaIcSdGKsf%3^txzCg1=(+G zl97@xYmHmB&Sh*Q#=lZ~*Aj#J3n8g6pR1AG4X(5Z2$2!o{sS98d-DRUlWz`dZLlz6 zx4;SdAzeVv50k)w-PcJs4!XyHbn&mf!9~`bH^G!rUi`m`$VHGG)`B=$jjYhpS@CM( z-C0FdP@fc(pN_pI?9Tu0q9fO@ApL*Gi@AS(J~`fgfUvD9DWEl?&B6)eRVPT1x+n9T zD~F&liYQ7*l&7Yw@`Ms1!kt2yRum9P-fJQ?Lf-DoIo*lXJ+QU4rGAt=9G}H=kPPC= z>1;328DBA|QyXdZNH~q)fZ!SpKYyK`hy3a&`K63bs$VbX&^WmOG9OSAl9VIw9v}o= z>|BKH*HyoXz-dz{|yhgwP_!E3XWobdnv*nDmb@qzjM&XzoUNQ#sc>A}D5(6^?6T zXH_Ngb)u6U8uPp|snJlu?Dp=70(8Z0&J@6c^!3vz;3VBh8i4x>2YV0v*;D`yVjW`u zX&&bk9=r1gJDiw#FZHdO{U$OLBN*d}OwSxIKPbEd39OL~BUN_O1GI18BDjw&1wVc~ZuItD z?$fW;s#$&*;t!jYKz_CF_(GGGyapP^PC_pNp3}lU2>vuQdfv%JW5l*2vJq9#5PrT>7rR7bilVP0onv*u)jbwA|3r)8{YMdx0(mXl-d6 zFBg9XU1Zt39|&yg>b4G;w-@9A#mWw8I;4Wki}bv@Y<3|so2>KR{2xPogcF1z&pV;Z zsPk3j(k%{zLZ38yz%GmQ71d=^UXDI<`L5-IwP-_)fPG}MrU@CWr0~?)S)MOdQ1X3E z!VWr~y_7u9^v%b2N*p!CtluNg2Qk5ZDb@4c`CdYru>Hun^{?P224)F=guXC3o7jbx zeb;I+UW07wvd6uh$@q?T=baMD;#%Sy4&J9H8ad z#&G$#gTLnr;Mn2Mpgo9Z{^f@gbR3S2gQ-z@(I>KpZ)_Yg91U2|Wz4jiuKP{o?fsYt zXj#?Er5&SITECs_roO>R8v& z*&*Mcw2RA?EK1A@N>+B7FrdjaZz24Hszl_qmV-3L-xNh^FOLNKi->2W5<# zGe^Re?_v?Dpy;~YVtd1K^8MT8U)qOHx*IOZb;r?uSE~bY6a!ftvBBvqzN@=fw>Z4l zES?5pO^Dp%8v9qwrT`iqtsZ8L6L%Ly0cJHgV$4E8DjL`u+|Km1p!cxsF6jL=W}SCm z>zWi+9wnO6Oi-Ot3R*oPb_fZCCKr*en7JN5KIb2bML6mztwU^gqF?I-lApRU0w+7O zM3UC)u3RNKO$U}>W3)H9D_E{5G1PRWc!wKCI$&M@C_jF&2Z~5+Lqh|Uu0SC*_=|{U zQ|2#~NYGP_FeX4ddY4m*W;wg78#0R_rvzP?iMI(7ZMsCS74cbzO;UCZK}U|Fb+D>E0?CzW(PmX2uj+z-sOllq4;^ z4q2Qhs&pOvUPF)&sQO_#l`bJa=SfwE0D(Dzm01MJz{Zx&L>0@QDyNRHAo)hk*H0S0 zK3Q5q3W~A7pX&1ONzn3uB%a^eLc#glGrkuxOJNi-{LzQk3){y`t`yc5Sry!*|`shLXLkZRwT0JI#ICQ7IeA>^UrTw zgcTEMOCexHyo+oz>5JxOw`Q!@eYoJ8Y#@Sr=dyzbD8=zAbFjxHT<$=zX+E z^tZ}jHjQ~hqRmk?(xdr9ZoUcrN?4I_AcU?D|K)AA>s0^Vs{$Ea(|xkGOe8 zvNczexY^dLW*?0%YCI~-N8s#g|7;i5c! z?a8YebxYev#-rIxy;M!@jf#XtU!u#a)OXwwBeA+ryYgXR>{b!~vjjZ+U#ih7mvT}D z?W||>DjvB`tDgkjzY7ZHiIv4eUNz`&zN95%srTV_KYq?!?n!0&KU{qZcBn11x2c^r;e5-H**m%I?d8g2hy7<>QKxVZ2skC5 zo4)<&APl#y?z{sPRCK6D57~p6F>p3-PRY*#*hd3(X zQFf7$u()i}d8gPmZMn-OL{CZf*szuzF7&n7(WG($1AnN_mQzIXJ25z_4RIOuA$TC- z@Q&16EgA&aOZE$H>fl?>Xf4n#YSZG)*P>|2&+uz#v%avkiyo2*m5JUIYgkYQr+c0H0u9Gx-T!RK`@0>xx^4Hm*hyEwa$|ou)Jc3 zw8S}Q_wHiGZ@SDh$JWjE&U?NGp)hi}ZikL2NBA2P9uA^yZQQuSVJp=O8r7v*OOh2P zTs*y*=XIZWTKgnE*H{M#r&?iWOJ`smG2M3bu#lW89GUb5d3w#Kt28Q=>1dBBH2UVq z;Rm!KAK{3SI5%1pMbNJHvWH6t{}^R6I^%f`j|P6|6>@uc;&SM6wLkQ$j630_Y4Fz| z9-dj@)5zsQAx>S+!Kn6kD=(aN1Sfpt&GYJB@I}y$5QktX!^vPiVTfkqjYYceG(I&L zAR>fu$2DMcX~U7DtYom}+w1D>28YAq$bP8nJaD1$l;~TH?7EK3Af(pe?VLs^{FZ^f z=(``@cjdO;+>vZ*{Ge7h_nT!F{TNlz2}BPj39d5*{9z|64CUH7WhKe}=3jEVrS|da z^}WUMax`D83G&HJ!Dy16c58M-a?hm@s6XVBqj5pLQ3f!VKk(rXL;xdV>GXpCd+zMzX0 zG5kO|Ps!L3mq0@Je-d<@X%W$N%|pi(LTvA=tyrdU=Ml0yJq4}xbl#cR@XMJ~!fVML zp{;06^*9UAj*9CqXl|ZHnJZLa@UKSO4Tn+uvEuPcV9aXgc7*@%)GG}`w^<6sK zb={8C<(wPekkhnNrhx;$(H>kuH09_wYqpwKh|O@PFUq9LoT6u!;|qzOb0!qoX%yM< z64RCwwrn(vtP&;P8c{zFLO_^$*XU2TyCu$>R+aNTU6Iu%PO)h&?%cdW>8wy z^1HMl-`2xthd$<`Lo$g`luC)BTy}Jh{V2(Y z+#6GvX#2_xNK}DVdKD>7Dt?WAmK}U|sOAjiKPoDlf($A|+}xZEM3TOa7DYJU=)XiAAk|jQxnz%ItmA)>10j)!s%`{6#5yx%`NL41(z5mG37k3?k=C>~^NV*ZTTld-nHq z1=aZeMK##Jc!pvqsYhN~DS~3)bRtD{);nWTj=;`m>XxkbRY_LiJH#hVaFZ6kV6~e0 z+CRzA{@8NHVOa3BlB%fa@lD%kRGnfYBCV4W|G9n?EfR|)_L`pHtO5DH+b0C#8rx6N zFB+dWknbbeD<)m!eX~!;8K6kT3xvycYBk?%z9Mv22(yW#Iw4vSvu7i=Jp6g}xU*FJ zGeth!tHb!?8Y!zXL*uI#(DU?Hu~*MGvz>pt6J7Si4_+G-%wwZ5YWU9IKsyd&iaux? ziw}D!rP6_A8OCP)vYHt2pHh~-_-c5MTWDuuxsy@3bo4ttJ`@jl0RSkj^vYKacj;@E z8F2Ycg=w&&y3*Sw>8xI84Shwl{!6NOt2wufJG*U!IBXN3c1FtbSA*Zlbu3~?u&ChS8MDeD7hWVD93o1lFb)Z zb=-dMZ{};LpMBb}{5d#&I6TuTN|h6P-apuXhRx?dCSRTdqAH2OJECwN%9PBLd-TwT zpRvl`d-OHBg`R{BOhk3Imuhd_BFB>MOiza!9XYp8Z%H}ved{}Zcffb7aW2s(5r=x( z6)mM(zN+yHA4VkkiZxb@vuv7bKnoSUk=1p5jQ+NDA@!Hnhj!Z5qyOco0piSNZ6R-3 z1J^X|kH18dvh>)UDWoj*g*;w=eLqXAo43;a>(dIf4Kx%~oz4y?`HhgXw&W&S$zv^q z@9arU%!Uj?T4JJ82&p<<0Yd-A4tgtN9GqsE;rP#1bp5tl7dFnxoY5Y_x5qskx*7tu z4)eDKq_~}@N_vEtmlH;}Eoh9a+-z{tl+%nX`G`fIL)o%|@C4LX%S?AF$vyLbekN^n z92jxX{Qaq~n0uE*1C9c3*tse|Ny(Zw<)~TsOPBbW9P+hCV-0(GrMTtKn83i6^_`yv zXudeN!2u+K>z+ZrFvQjU@qquhoW10XTk^F`Snv(E5^s5^g@#>-%I?qC;##|}jm{Tp zM}{G~Y6WLMjV(wNZ*;$s_k4(An9sMK`%LC1^OjLBSm{wp&7$o_{u(@(Omp9Gs3k~7no*z|7ZUxV>!W)dd^__l>r zkoU!neZYkU`MzUxgr0ES9} z3Kzij{h{4%9`AW9%VT$cZ--jPyy?ygcM6Uu0xqM`z!aO=DewB*@Rz15Y6BSM;ss~O z_z)0Y9NG@U``j?jV%J}7$*1yYA3setxXUPBEXx)kia_mkowa{e#q?D3K-Jq0k2u;U zW)TP!G_dFz_<>}k+1jcTjjBxA{?{+lZ3CucJ5lR);R=DlKPN9{GY=Al-^p!upniM4 zVTZ1NM-*h_GNxJEqtubDpSL90qL4g4w__ZJIQs20e>{+U%(`P3C) z$b6_RY^;GZRn#zB3ST0gVptqQh~T6|O>!^G^U8s?`Q?9_JNrUTlBzxZvff%k;>~8` zM|Ko@PS2qrAnsqW=am?a=Z)LCs;I$YjHZXYPwWY_dBKQex6> zk*`_u26GlkyBik|-i{M8RUsymUKB)A!242Jc|{?r#YW&RB5X4&t8Qm?pFGm z#m{}4I?YxoNp~x=1^#4TgMIS@e+?wTA*C0VvQsoCP1&8~j~SL{@)MquoH2!~^X&8- zbNCO>S!0h7DI)wrI#I{PBx6{9>7t|HLCj^Kx#E876Pe(`t8V-R58uc@Hb2?%_oG@& zimsvY=v{enI}(j*M{JJ3{1?Rfy)82f-SC=y4IWA!!K&AG;-em7zcu>ZJ{lpPxmG9e zgiZ0L9E4mW7ThWaF?rVQ8m4K-yj7>R*LciMM15Xb8_q*!v2_2#PYEP!fiF8$UPA0& zalZy-26}L2v4=$K9C(m6^sE!~WOEX^5~*clru*=IBmImTRHypNk|V|VrG-~(Mx;cs z@246j`(pLwdSr2rC^x)m`lk)SnYrZUA-&n8XSwKp7!4RsC}*O59ws|;32D433@9(L z9~I6*OnDpoKy`ne{HQ73AeUVeb{;$3D?pTGQnB4!9{BiG37+xzKDn=}POG3|H4~P} zIvVDqNG&pS4efEveMZ^T(kFuC)R28~7oMG$39$~&8(TFoZZ}7%bci@Ir?kpSNCc$L zmQ~|Y+slr`I~`ujwehE5$H5ky>U8>H|6)(;qQB=bufOWyKe86>mvuic^i@=(KDd2v zq(c(dUF-b4m=zI+1F9!(oi4gYMGtc2xCKm4R4Zv-Yy9&zH1}i9y`^Re zVIQ#{!$#;$8;j?dksE`oElx;HQUwP*>Q3&?AuV4`(NI)qN2{qq@nCOL zrxciHrhC#tcUlteg^E6W6O)u)`B>DWJx99v*vU`1Fn-j4m15rKuzm4^EtE)B%jzXd z?#e&?VmNmyK5JE02eh9IYwfRs6W{55eP-YFLhNrKsTNL{W>?@*EEFD%ifsO>qkWw(i`+S$`;kweKYoeg+pQL!k@hiMTJg1 zsWg((-Q5k+2uOp1fV6aXhjfP^NOyO4pV_|WJL{~ae*jzA`77 zKlU?ny)%|DRN$I^>hjyn^jAjzSRt0onLXe~OP7S?R-oQgUmILqq|47o(y$as+=0@! z`EX}>)mx{-l#(M?5Drz2(pujdc#pt5C8f4FxQdexlL0FP|1c8SN8|fuJlB?8v;AD| ze>FY67Ox%KOsr*H_MWND#u|U-I3`H0T^9dYxTjMsWyIB!YLgLMLXDE=^hlntWf7ffFRy|mUdJ3=ZJ-gDbGNj(;Nj?x#Y~)-0K^U#_g`-ug6X_ij z%;ntNq^*h<_k!M^AbBxnI5&><{Yzy{4W#I*xp?B~$)5PuoAV~3W$pTCjXK}FBHTHJ zHI+8iBaa7CN`qO6M9Je6GqPC?_kxe}Io}41wqW)9QUu&ZB@yeVsn=p_KB^QI= zJ7nu;${8_xO@VxY+M1dHo`YQ``FBJrMc|`j7E{rOVXu1JA4|0R#zh`pk|DMJIJ4$p zEn=&Ozb(rbR;jgE{`v>O2CZYGgZ(3u_D%MjIiYOg^yl@LQ%0Ogf7JBt*ldPet+iYW z_Ro+i_xL;5f(YZheKlBP=f} zm_H3CKwv^}QmkUFUfHEQOB}EuDmM>8XD$bZie71@xbmONduE4+Uv7%R&i(608tjg7 zh@C#|=|M`e4$0lSW~p#4$$zL4d*v|X0u8B5Tf+qMKB^7Ex8s?WBsLi44Cw|mTkU+c zhVIAo@mt0_C+@7Hncu&ZV5O78c=4>q%_L}ytAWDI(j78m$GS5LV;q2q#b#83Ut@cG zHnAdv^A!`~?MV}$(^ykKhEBYO#isvhu+wo_t!Jd!N`YT3M^i={_}G`=B$cW8<-T(v zsF%+OZzXwXL&OGm02Ho4xQ8RlZA@FizZUbE+Zht@iP>k#O`;rPJMq3}pEV%vUGm3b zGbkZuCP`V+YW>ip@%8xidTajzOyuj2-$s!??^2CH?3dfy;fF9?g!R+B`cfVbR=Er9 zIQ!QE!2AwplCQrEv*zP#c&%<%_6hlLilG$-44~sRG-8Pbf-2lDqfuT*5+NOI3cDI1 zXPI_ixOba*u)J+tFHJ<_i(?<3zR3Nm-5r#E^hSJtgY(u6E>ha=yt!nZl35bpdvDU4 zmoKPNCrCSNe}clMb)SO(`+TJ4JEUxBqxYh3i%~irXK}xAA1V;wdMCQPt-w5?TuWs5 zXz>y-KcF8?^+cL&oj$ck8pAsicV0QPT7RGeY4VwT^8U7WOUl((*GHFpzRb8+Y6F=q zhDEho&FQweO>)g~Cb`}8c&`f$s~%r3bK#*Bws+OM{woPZfiy>!J%Bfw#M@2~NxLF9 zx{LF$gni$D;m68gG^iVQF!JC_=VJ`ctOW0HkJs1vX@mIg&)&7(u6-GVc!*QY5*{BL zf2EgeJs|5~Ce4Vi2}Wl7<22Q};c4Y5qxfa5LbAFB1uKh{kau;+% zQ|>Hu_)+s<;}JH^TpH6gT1zH8cpZ=~e}g4Y9^!epYE{Q_eMG;)phr8Sgn|}ZOSU)( z!mE^Q6^$`;&NJnxX#SZsrd8^h?UpOy{wis=-R4v2u|3pvVJLiX>u9lNChP(hol$BK zFY+iu4YUT+y0oM~W!ljBt&ji`;hYLLBd6yJ;jfP0!mRhZbd>2cOaqW!d?f(xxdo9K zqmh|;V?ZM*r|M&7)f-<*50>c(rYeXV+4E5Da+Bwi)f1T18*!HlmU0!5Tv1{QVZga3 z{_zgs_=m>irbA3)q+=ukht^c7@st6U=!8~lmOs;}e|HSNTy^4^t~SbYdNb+zw27TIplRCx8Ju@hkEr1NqSMDcn80;6+xt3)#@hlpxjpPWwcQRmGK>t zTTrHR*To)9?uzYrllp2r z?{RlSEO69FwtGnVLTf*Y4t?&LarL%iryrBv`yut`JT~SlN%ndyjB*efzRVxC9M|jV zNk!FxIzxR`N|Fz;k}P z6nal0nzq14NY3lo<=(1>Vn#%2+MCk;*szc?TGuU-XB8|&#<-Re`eB*O{Zs3k7MME; zAxIG>!mj-X@E5C%dR{V+VnG{e0+QL?A!QUKwSa7>qR6l($|KA65FBBI1a6g?J@4sh zb#6?}6P=lq`91{YC8PEgs_~-2t#SGrxiCl1vMN$9YH)h1c~r{*Cf zMcssx`}_Q>+cLVio468kf(IUU*NT~R4sk0J_v9UC!j~&ODqroL;FyHpyp^r8`0Q!G zx`rP4%U=$m7=B2U(pQOI6Q-7li!Uh$lL>TRh_Y3IEMB0O& zW_fp0K#Z>xl1-+6@r__j0LDZ6#5r&h$9k%K`}RU^^POZj0Wqin@W8nn%YM`7r)9PM zVYz?rjQ&jSMCm~EmD6#)t$Re&c25oLxh7WquZhj4jw`Qlha4L6TNj?dR5nUfa!@pZ z4xMA{`xMkfjQY{Uj(4s9Dq1Y<&7em!(08Yu1vzDZ7C!T0Iy#ng9`(D+&41u5OB>-8 zU4vP{TB&ar?CH(&7GAkZw3A;%dHA{8!TyQM-~>x&-C7HfdjFMyFs`BUlOSm$=CJKl*_NVVuZ!4Q#V_J+Z)>aMt|apzjabl|+v=@E{Qf^UvKGX(E{8A6H`UyI}k zamF@>$qsP)NvSzV9c)0tMnmN&=eFY6kx7V2T^1UAcnyj&KiU7QW5d?>bh`PpTFnsu zX<&u^za{lx5C3tBB3!=C;J38D;U!3FFt-Gs6C}n_=Y}nq{P~{ABvxohB zzrLPhcvu8{oc}WHYvHdvOx9+f|7(w7aAcY3DC*mx)?I439x{3w;Gx39>{dT~QEcn*?!Aj|R8v1?=a$XCZS@VI1$Q ztYj`(>&zC!R=pvI>inE^+c1Fs9fTSOjB5@Yy(F^usZihZ#3&-Ubkj<--ef;dG#6>r zlpELZ_R_1Tj!#d00Ue2YR!~tSNQL7KttFH*tC>ukM|~{K<+o(f*GK5Z_Z(8^YgN1k z-8r)LlHkp{7GeF2LB|isK7{M9>R_jc9+=|^zJ@tgi)zAs_!u|lqP~Fq0=0DttM1jx zB85au-iIs<`Z#Q+fMc{e?$0*=)tpjIB~;cX+GW~fe^c#+WCglt7l4+zHObq)pBOW` z5^P^9+nMCCLp)6 z;!$vP)0PADU6uqA0yoIu#DBx%z@M*O`tUk&gw1){D#=ZPml6j}J^F-@>Im%;~!ARu*L4RTC63&oK z>bROKb0uZDVhlOjx66^v0jyz&5v0BqKNo!KSuQt|K}{}m;hm`nN2NR0ss~Z$*0+pIiSg2I$UdxP^hdw*EN4nrRn+^8Rugp z$FKt&CcndWr;``$@+KaP<>$59_N(?o5}h&Zz3yO z#~A*EZrbz?I6J#m>p_}-?W-^A0kd1CKZDtmY4Ab&%BrG8;nznw5)GB=VDqn`Hh zJfSd`#lDP}NBar&VlAtqo@j87Q>`1=suw91IuwXS@XqMHaAg@nYw*uy@It`kY9~(Q{%U7o?lyL3pD{-@VNd z|0#AZbmfg`uS-j6vLAA~1E_s#EGajO)hCn>v@^An<>q!DfzG3OR-F!(Zl=!*Dm!*6 z6O{`Z9aV0|8e<~FLFa4PcCWT;*d~AdT&-rEQxjJ1wJvcu7<(hF>E!~B8^&~|9iqO? z5?j1?A=K5$s&%@dZ2h?i>ryL;IQ3vO^>H@cgNIORD832p*!`~8gh3d^DZWZH^WWo4 zfb#0@ht18#hgqn207P5t1L##STT;4Dy!ejogM)SWM2b3i*5k_;P zKI_KCgzSJ_I5|1+>5)(<#*vKuw`=2cB)VBDq5$>B2}MJ;?dIPd5+JH=V6BbrvI&#J z5oW#kd8LCLWo^DI_*{E+dCp@jy`*XuS z2M^U`ro*cJQbJ@HAeg|6*VWMaJ0OZ`HWPAN#-@C+S@Fj)lwc5U#{U5;Y#$}ip89u; z>dfM-9vg^;>ZDYQg|MA~rpIF>S%<>s5tZdao4;G4q@-* zd}i=Xy#~l_nw0&?1_I@HxC%e?mZB@)DzOG93`*GY6h)pAa>%B_A4F4%CH@>iKfUZx zKA3JSqKi|h->H5>4(~ggw9&FgB@{+@tYFQLLf^4$lk0hjYFgB%h#xTCongP;SW2#f z?OI3)4H-@dO>(U0<{~3oXgH9S*{a{`=xYgbo2My4--7mnW{GZaHT*HvLAzx}?1wU> z?#~A8hp)q9$8wF|dHiIMX8`}Rk8|+DEnV-n@#d99>;5eMe}$40_TE#c8}BX^YmidR z=FKZ6P55KJ@#W#GP$;f?p0?werGMh3yU;!x% zAuf(n{_yCIav&|qCX7g4Y`qEP#tI2T1FNncIPTU$yN_v+#U?uAigxv8XLG@XGuzu# zi?ju=jeUI@7n34fo2M1IlP!U_@aw(dVr{-NKI9<+X}h!lpGGRtw}vgE1*+4$w-2a} zSYP4v5;US9sR}`nu_Jx>JBCxq-dY4i8_P&{-R5w;<^Ja`)GMFa$ejw84`%*NZg{^c z1C(_e#v;So%T2xgbdZI~k3zWrfZ-<$^&i;qz7Y-FYKB8+y3+GW{7&fRx`xhYR=R7hSH5l)oy+Qdm0fXF3NTCi%r>FRJZ1uQQSR+p_ZeO&l@Ufh6EM|N zplxXViahdGKhbHGbiXrxNx{iWw2oToWIecf_auFzvjSsqoUYXh%GtD<-C~hM?S<_Y z-4vjC_(z5FOFjzaaq-nQqucU2hh&{;-;roEYvOl9 zt^L8ol3UYFZ>RD>e5p@i23I}QvDihP34`nV=%G60#jMf(h8Mgf9=JChwAsFvjXqzu z$Ik{A%*YOc3Pe+(OSl}xeS!s(j++orgPEbARp?xDyIVA7dco0yrq%??v@$y3r?nc5 zi$9KIo#Y_Ln7yyNu^r>H8m`QjJLj-Adx76Af`@R=Kg)P^Uvz44{h%v>w@I?lSw>*x zIqkVaY33mT_0=)<{O0|>f0H{6zIQRp^WGXIsfgn}Uo0Zb;6Bo9O+EIJ6DqKp4jn@<%Wsml6x!oS_4Ak~Fh9CsL=?oKyNh4QePJr~J?Jq71v zqyzL8`wH%itkG23!&;Lszh)P~=g8ep^uPt;Vo4g1qG;R|Tp1$I`Zqk89cPa(J)9CJtr`4hxaqQUD6Q3`+$pN}=mLm(? zZ^x)Og7|soq!tk9pi_G~KL&{`VAG6ardsF-cQ;@e`ct1)bnucc%&0_D96_gPQ^k%k z<3_-{^L*zJt_pwLF@iB_Au@;JC-FuSSO*t58Rp`*&t|hWGAi0ahibl{cyT`-KPYd} zt|;{MM%r9g=GS`bA|1T4K=A#m_`68-=cr&m!aor!BHH6+s@0U*4 z80(kC<45i^dUs1BG()Ggdm5xQ>a-RH)xC;4{8e*Ff=!piTix23%yIc^^YdH~hHSWy zoE-`g;w9%=t72%4#pm@C+h-qZXEIj%A6CMn8^nL`RgD%fT#R%YYJW~c@)xcCx=3M` zV*w7zhzO_JLVhff}R=*t6c)F+maA$V(5D*m?>@2d9T*eC%6Gxa+w96ADU_K=|3 zqgVQDK!>zxBiSN?)=X0t|S9zQ6v>to(`k$|p#LWMkY?T)-MC zO9;PC>qJ5bH5pBa;dOTN3AYAl$N13*iL+(2y$Kq624x^~C)Ej1aXv0qW}YiL{oqte zL`PDCTm~lkZfz#?s?FiWfoMPs2w#8*J_PIl$8)=zXcs}f24+$aq3p2U|CN4e-ZAJ&;!>>Ku$xk zVu*-IoZUC%|J&5&wooPrdwFJjq6q1z;Ha%urQkVxKbm-%@9WpPf)&G3Y*xx9kj={$ zMzO=hZ3W$V=cswa^X?!K+PN%OLQ}y9Rf698(57e%JJcW^zq`OL)=NR*RPf!HL_OfsdJ369N1IuZ(5hma~<{$44>F zI=%>DE~&`4G`01!>K_IjV}g-}3DBCp_4beWFG_CPEr4=^T57j;o`b%DTgj<+OVX&W zNKJgA7G)}c#bEws0sSGBW>w^dXhtmySvUNKRq^k{ata-}z8*zgij&G{ zK2}VS2x+ZBco^-bavCJXQf2710jezL=ma={AuPih7X zqG*z5+f^_GXQ}*JUt9;R1ov;0wu}w$R&>q@?9TQF9rQ>9JDG&DUrU`^)+wA-#X;(% zH%dN@g5T$@I7B%!^0=ZdEZ{9P7Q0;38YzHB8nDi#+O7;+?% z$EHjOloNsBkjY~F^T?HqwBBx6v`=8T8799-{Qe7R@+;N@nRjN%`}xF#@gK%9b%bY4 z<>RgxS+}C}^bL?G1D9zHe`i%ZQiW`8rj4knh9J}S!b+}$(Y19tf(pdHIzpplG>3v9W zk{u(Saxa>%;ZM_H0JFs6fe}@^C&Xy~CS!jPci$VL~K zRmK3tLS;B6*`RJS0!0+{wH0p!ceVN*=g%R{%Yq|2--n*vO15WOWs8!*tmB6!seWF# zk0!l2>Eva~Ec#}{(A@nRN*fN!Le4D@I^Vj6GiFSe2F9araObeBb&N0XFs7LKC!SPs zr~R7Q7lniGn4#9*M&^Azo%!r^uM4*Jbj+sT2@HnlV#0SFGalLMd#Af7v#`B}DJjyF zEvIv=G9u9F;ciW28zBTG?fQNXiC#jn*C){ItggfwwIUf9c&BpRM1-Tz)27CJJ#|=M zL^CoN!3#zmn$BqWqzx0T2~NhyFk-8Iyh9R2YbS32%GEKB|yAhp{NSwVrc zXQUD-miR`v@7B7k-z5bw9ak8A@R{*VUM{+q=PWa4j~1bDq;sRv+hyL$QDN22R7xAu z#JP6Guk^~CPG+#uR+%+@m=U^TPUKvlbltyEak$z4NHXpBYE_ma3nv3X4<@0375!H& z0j!wz1#d4}v1+&uA3>5z;c^@S{Nc0M#6B>BRgNyhqN7eKqUd)V+IWZ}X5!PjLi;KE~|WC@Pm$sfhN!PV0}**Rb|*kB~I% zL^4qN;@~Ux7{lwr%uY4)C;nj;kg+E5q!l*L#Ea<=7FRS^H?|%#df^)%e|K1`$M#+h zK-5{c>LzM0$6k(BovE^!s%B9Ep=H&ZvR+=y%5_P-msl!1;KByxCb}mm*wjUm1Ynza z8y}lDdR5emqrF&;_G55BK2hgrT@Uv`Ywc~*&6MsyaDHpZzEPFa`Mv%m_B|z>__~%+ zZ^NC_y-ln20KBivow7$p7sVpeCq$IVOGEAN`*SF1HG#F&0plutV%NL<=Qwkv6Ps*5 zmZ^~Kn^{-ICk}F3@G@YVdbm`ejFCn1P{Y9u!M+B3W2KUX^rfkNFbD&U6IR^Yt^3rx z?(bfOtTUxLcnGFA%3&(oFXQy7kOlndz^;?l>BLuRBsH%jE2`?zg46%iYi+f${FOFF&|gID{?x z^!XB9vJfu9`@H7|Xek?~NUDx<_OfU>(@&X;)#H!}HKh=Bveyz6uBrilEPEY&YM&4v z=xXJNckxfTKE-wWW>WnoQ^T$H%yi4`eHEt@#S>4D{N2qDJ*`5-O;Kj<3W!byS7OcOcITE$h@(6CwOOg*L=VBQq z$ijy)1=AE%j=BL2b<^m!e7)8KtkJteH0c&PLnAZdy55;%w1#5qR;Tmp<79A5B%NyC zO1U1V;`8AUNd$#1Tw&xYoqiLdWiWwji7=`cwB+G57{@`}j{TpBuIhEBxWAvwzdc60 z`sQdTdOKz@L`n}{XE?kk{%%*SC1j{F*zH&v+j8>TR#j~PoU}0WohhjmqSIa~3uu#Z zdQh2=)_~%CB5ogIZ#44{xk^Lv8$(7G!s-1&rG`y+4+*k zef@;!re9WGp?#+2kiH|+?;;&rCmY)1yw2y{u$g~_=qG$Fa56ncD8H1z8ut#45o?R5 z_(C5;#-GEp|NU%aH<`Gu4w;PwDxx3GJYtS;JF%|QZujbWFn8IE`?Jogb!#M^#a|}r zL$u_3Syjb9)+au%%fo#bx4%g15%?zEC-Tpmt-sJ|4REYkPCxrIQtRG%tQD$oIf)&M zoW;@v9U|i?`1n*1Y= z2KGI^C)D+VS=t6~O?A9aBvD$~&>o;NC|N{TbcjI)$5I-Wy1gSqVqg6=lX*do2Dvqp zGjv>k*8DfjVvebB6a^{`tuYPhhVech1&34RUaQ`{J&t8~_+>i%LFx+JG~ zA&RvpgmLe)la5dB$**KId?(PNeaCp;XK=ivWlzJMWavQ>v20YcewM?OK0GOr#g|D< z(+cAaJxX+ukwTh{>p`Ptr{Dik@E%$3$gLfC6EN;Jd}jddy^8iX!M8@|gO?`WG<=?NwH^7+* z@n~UicblK*mndz~z05pN=s7*DDUO*L>>braN)3Ewb#JvE+Da;U(a7@GF=%ju)HY!z zwiYQL>)qSDlFx^1ngdSyutC!WZx{KnU!nG2dp2(LAfK5w7^8%!B$}b>L_H%qoS?t> z^#^w}RLb*fBe%L&SYWNHIRo?l84j#>_({FgF%I8b$#opuTfO*@WD)g>!Lp=$y51gk zvQ_*`x#5-lalafT)i+hj8+q(Ogtg;3cP;3JBIxVhcOI&@WAZEGQcZPTyU9JC-X)2v z@wCB2G@XXuV+QHakWIeso=y2sdA#sdTTQk|ajneEX}pjKrn52ZPNli!{9!BiO7X`? z|Kvmq27abX=2a&gQf^%$u3V|_hSbP}C5$GLn&y5yOC7tLeCz>|yUnKA@WhrLqMsUK zy|MB1)S*Ps^Y-aiJgLN#J5FkKg>$55x=vRlC08`EdC|5n9!Szd6FjOv#AdmQey%Y& z%u=;v>X8>0cCwA+^2~KkKyk^T>UCVZSt_gH2x5Iyd1XsEq526;-!SLlJQ3#FDzZ+D_DbjXJxwd6qB|4dh~MoKNoEyE>*Su#MeXJiv*b$7pur< zmyp?DO0N~akU`K|OF1-7XFPBA8LT4PK0#Z_aiaXK-cc!O_`xmQdjTusPezS^4{U_Y z-$d4@_;}L04*Tt3{CuP>0mr4s@tOlwFBe{O{`MJ;~BQNkTqdz(-~~r3$zA{;3ljhk8atI4sz!0u%hvDm}U)=$4VQ zJXhM$l)ICnDt6=46a6=mMv=_3VMl4}fW?jdw~=xxOB9cMZON?Rp6St9KPIRQCDo(o zoO&zM#})hcjmQ>XZ~_gA&)nR?Wy?m5_4lVT6V6_@K2*I36`u(@``*){-ses*Y+hwAYJ-ME66hOy+W#>B_q; zmtFpLG4G7g2>XYy>AxKuv+E|}FYkZ6R!FfXC75x*9)$A_j$B+L;V+e&yc}9`iJHu8t4|k2SJ~A8O`-kzafXb@OQ=(PB87YN?l}OHyvym!Y+#IIBu_)%@cT`ecLh zB@36rD4c{wr_>5eFe|;AW<-a_iRyyZ*K)l(@jXJ8KRG4vz31)rs*Pm~Bc0%F+57Lm z@I*>gyfVk5uk@*IRJ)Gt39K6Xldd1!d>=ZIn-5EJve}&b4sFoe)j|K~tzC}8)~+=Y zo!P6Qeuq9BWF>+B`P4(4iHsYM7OUCbhA67Q&lmbNcQly=G zhe9rib-owB>A%qMW|?uLeo!!|Bsklm8NkSw5tiIlza_ysDX1ceD5i3>sd8vCOHU^x z8A_yQLzoD^FMtyQ;33u`K7pE5B2}LWv+jxv?W>l;EScz{sGpx_fMTPHw;-ihQ8e}o z<3w*Bi*1>{1r>d<1UW#hH9xdQC}+sco=o#|wwIQTSQ-(yfAX5bJpN_y=>wI~LRi=9 z(qvmZo~>ljN?W#fgOaL+x|&RhJ(>e=%F6oWWn}iLs3@PG4$TgeLF=4#>`IVsEz~yq zvlf$HlWyx{fu5Fbp=nsO--hp+c6vaOTnA>xK(xZ**`@chauDAd^ZkQx?w`AERA{(M zdio+5BTA*k?`3*H-ocOUJf<9VNL&If5e^!)SxkSX+a)(AYRz8_ZJk}}0c5gaf~jli zJW+vgv-ah2D~n_QBT}fRuRQaeQ2GATri|A2qs#k*{5o&zJCQ^Cd0yzYk>#N#Bo-Ey zO`c5-CP0>zEu07`q~@pnU0JpMmw8?U;n2H>$e7@h)iNWy9`pXt?>KwbXlc^uqPsIF z1`5A^>)CW4awfAVBoeXNtWF-I>fD*N6vbg$+}|$sZJLSees;cEqoR&|*UVKo_cPHm z7@I>zzk25H4t>w~NW-m{PaR~3 z9*iZ58xMjr*ddR!51gdJ!ktiKV8-o(b?#hv>tfR4vW6Fm4HoNnSFNL zeqdX&^K%fDI?BA%EGsFpN$5$la<*0rAGQiL{vsm!JqFcyp1eN$^6MXXD!^>U5}OXsLM|a4i&aueSpF$I#tCpQhLl3i6BsraJj~|8TXd|f3pDFUfk!8`b8>N zMfHyza-$hd*Im!Sj0wGYPETK3#f;s)zj={@dg@9>g3?`h!sTG*%Ce2uV#>mvVYj*& zJ;=sG()2K;2qU*FU;l*vO8Yx1hw_GSz`=b%2&yVsS&{u;N_pyc_sJQMbNP zzjzOfNcSqcuU0B#Nb&WSmw)wWcvO1(N&bxxm2oWC7E@iKPw{!s(82gS^sZ2jfviv? zwZZRI8fFP81N$2szR^U!&y47~W>Di5J61U=Y%*V^NHLgy4)s?%y!MF9WL^?q{1&u$ zRNkgZ;&dE+!p_RwiP5L-fmc)_q<$6hbzD@@6X^rSdud7~Pb3xwv6h}=6M^&YSC*`T znEeP6i6i|=)T+sp3mSVX=zg#++6k^HMS5y|9Exl&W>UuDr^M&qW*U%{Vjc^SUswU@ z!7_@r+o=P`vqlbuHa2T`C1X?>cvM3T8|M8~yR_tZnsZ{l(b#dLIkL0(0kWm8@*u`z zMFaB`O5OvUIr6y=-n-CY*BdgQ^Zh*(gdEcYG2YJuZknsHh)aKV5XWLIUrnG|i0`L7 zmRcO%A7f#kgXCXyy9-!)t+gjAEH!hIW{Su84i$1bkuUumYw-x^=%T!EXhbLZH3chkZs#Aj$C0KJ(V?XS zxgF1E3VCf1h;roZ5W^28g8X6*E;f_VPY=B;`u@1zU;SZSyw`&F)!286nY_Q?6ZZ&>0|zCKt?|CNh_EDIOJuXd?{($`M)zRWXLakGEDL;{bILwG`>?5P`n$pyc@2HJC2Gwt`*k$l*>nV zNypmgsnjBLs(jFCCsC!?Y#*xALWt13otPyvxQc!Ce>0p+j?y{Z*_&gl-*2qFzdw5E zVh2st2D6v{>Jo6yH5z@Zd3En@YIAl5@Pv%ijT z?{b`0EkMsyxE7Ua`7Zvh$@FG>|I0kireMCdeqFsO$4`5EJ^=gPag3g=55d7&$=SO6 z=J#UFT59ggpy0aO@zMyO>Fuq0NQT$AY%5DuF2-s|cUsvfh*IL%+`eSe1j7ThuRcgv zr5_Cek%(z!3v7l47hf!ksMr??A*aXTYeaa}A>BXV3^b&!7Zo=@K&impv1&uR+j1fzqHF-a9_xF)w1th&sBcbu zB#fU-5dL2K?zeN(#q^5b6hAg8Og;m%!q7w;IsJ<7mFXB@86vQ>P1YMs)Uzy@FzD0O zt>Ldw)Rt28-@F8@v!6*_dHTiu6xk(>U3uV-ZfZHA*nH=r$5r|2(-7iFLDP{+eVxTt zuJK1wY~lF;s9(|LZI2m*{T2Rw7WNSnm3>d#@S(WN?Ml#_LsSKGkx*vSO-@156$hS7 zp?cLCF@0StFYnIpo3Ac*>zKVy&CBt($7h%JkM(t42E15*CFVzIQ;H=_p zi;$7@4+qO>HtbO-$c8p#uI`yMML5=tEneY#EY+dbOquz5$;};k#~A=cTd5fO{$0Em z4z4rHtGRxo+XO9CqUtZ(J!<-1V6U z2c&Q#oNp9uOJT7QReA=?*i5$w0jvn&7yUv%U$3n^AfWLucE`txj9k}I1wUqa(^bf? zDhFRN^-VK%u$|VvU_=NX8dNX`4}(ZQ-i7xnKq)JAbJfrwgW#yxR(ArZ zP@z%F%3ELnn{6~b7+?Ixe6(!moZmK#wwr8AtUM4`d^c}QGZ?pL%cOEAk6TxTSMR%> zWkjv$79p~s*UpZaX35E1BzDAO-N<_xhR9k5?J+)2X%9y)0&(u-vk zz+^NO`#~TngMA`5t59oJGBz`wu{$%|@p^RQ?++82f$1AF84jSQEC}*ZdHtVlb!6Ud z{T*@b!w!8WoUD2c+J?r{F`xJsDha<}i*(Y#tp6QSp!b^WS}KuN!s^chA1tdhTM*;* zVrPk4%fVxq%g~nE&)(VY6czW1&!1r+h}7_KU!uUwhK3&yE;3LeZ~{UwtEZf@8MBZt zrgh!9W=>?oFDQ-_x!ZA2s%}e^z}$(@|2|4^p~h^f56r)9~}(hq4{`J>OFR z_GK3MyzxxxS##`i{U|6X9zYnQ@{raUGeT-8kugO5IuUs|KH25jpWdl~XmI{_A7 zHjz~q;DGnEV}N!S2OzGu=-IkUvDGT4`#HTH5PjR62E&J5pym_jH|76zH&=h3c${zm_cwoyAW7?ckk1imyNdb4*ntbLY16+(1Ai~)vN8dYoztePdS>F=A>m>@L{&dbnqyl=t3hg;d9&%VY&yGwBTo!&KkE`= zuP4mbhy1f`dhk>LqIR-u|Clc#=q!M&FRk4@;SHiH$HUtSfbGtcO%efYdZs6}37@t+ zFE94pF@0iW+EVe)mY+PU7?o8&vHR4BDO4|F6{OlhQ~}66R-oJV@0*Wrn2e`rW;plQ zu^q@K_*ZA(YCNJbv7R4ey zH08O9C?VGX*#v+;?VB~vkONEd2?!E=R5cq(?g7mETL8I*^4Kq}C**UX7k;{-24TSi zP$@%}|Yl~4c zKoI-C4@7uvIZgwiJ?lT65wz&B0iNnPiMngL&y^;Spcw`L;va8JQG$bmy`OHkQ~jQ9 z9}eyPjKP0$u|FLHkvYlAqG}t;ng!BnK)vT4+nxi!yOV(YQ|WeX-f^~7)9pr_f(8(e z0>U+!K&?;5Y2cNlKoETLlMwg`@ihDcc^8GBWm(?3symr@Hb9&^o{#XTKY)$9J6CJn zW3B}hALoHi2@!q>01(?Tz>qC#SVO^}5IS(z ztSMr6F7YG-CN8@yBDwC@>KBq5Kv~vsL<5K7E2U`v&=Bg7Ia+X`GT4d2&y8#D;E@Bd zoc@s!c&k=3XnaCvz1WWkAG8 zVg$~Rz~RgV&qgw*Ho2@?iizTTlx+e^)sRZ@=dva?Wsq~M^t%|^^YG`O2Uhf^>(h%P=IjcNA#E;6EKK<6r`Tj}# zhNp99f7?1`FM-1Om7<{`CD8B6$;ko2LRLDg1dwGY|8+$SXw48&1h1pU5J9gi2jDjx zfxGwvP}pZ@XBN|CWI(+`$8FZs_d2@>;NDMqN$gMlDl0hte!H!xq0tWkS%b9&AJBaU z;P3&47iMKOgklSTa*cta&c@~@M31c6?QkyJ=ou)+@SYEISWXt<)!8a5uIzg@0D}Wm zO&psSA)8b-g*yryjbo^TrC%u|b`1d#Zw5?Gh0CrIKAYY!(63o44g)_$LU)5BVzK?-PNJ?dXu=gIM=_O{afEgwLIIx6~LBH!1-47UIqdv ze!LzhF9~#AKK8UF>UlB0Zvgyn zIO#Cq*h5Y@i0s-d-A>&#_t^;|He@ZW!)n6bKXn@}qAjbqAC9j|$6dax^ zpL;i<`vVRjCF6Iai(hIr2r;&>2xz>F`el~$$hfpCPK}JcI(J|p-g@7#1FQ1>hp_FU z9MHd6SXc<>ydR*;fGif^J?~s6F9MyW`UNLcpba3rKUKP(8A84mfJklt$lH>-klntW z>MZ|bRBDmy@`1wJzKh3ZrhTm^;uc7X^a3rTQNS<10f>KydJsefjZuq!$|X(Q2$CNN z!ICR^u)AiuVQ9a^ehEHioIGC`z|McJso`w9ek}U*o_!bVAu%ve+WH$6mxAO^9ooTC zqQF;9di6a1MZ0-5H5UblN+%gHw=&jGN247%AN~45c4XZV*Wtzl)?xa4y#N9gcqowq#aK&5Qhr zu%dCGp8}zCdy6J`w&Ae=)W?) z4E%@2dJ~WpDLy59x{+}X=*B-}Z9aH|LCV`co+|_G0em?G>n|lGwX*2GoSTyq1Tux>yd$_Z?HC?I#x4PM|XR{tABns45`0j4q+h(zGA;1)XrTk$7T z6cOTrfOphv^Y!Vey0~xwpnZsd2+x88?D_U6riCUaGR-q{8wU7(^o<~Zbobi!MG^&q zAOZ-oKy7So#m2@eeM^+g2I@G z;Q8Skz%QI2X4#t+_Ro*=XQ%olPbR$;~BE&Sy1oBvn5LYzUCvkpk*EjX-G;1c64|ztaG`{yFrr*=5&B z47Yr5t!Mz5E>-dL8R!^67!RCtTzlce_)#NUqjRvSM zehSe!t?SLD-F(;tLOJL{QXyp~PGI|#8L%-yeP1$dLK%miM#|hXes+$hZo{K_Ew5C` zp2kJc*S`F@joSNLm(b~n(3sjclgXfGh3E1)*NG%3?Vd@;@l&^p>0iaOy*IK)V-CX< zEjQDWKv5Zg1xK5Gr4a8d>X7xm-%&LP``B4o}TL5YdRY3Mn#C`q#4(QR~ zesu?OAy4b(HAnv(gFI27!klpTG0$#|@rb?wl$(&&C8)uaBaeZUpzB1fw)@FrniQKy zU{m?cW`XQsJMb<@(*+bCo8a@SrA>!=pd5lqB_NErA8;`ZkYymu?r@a~2?!g4iVp`D zR}qD~24wn1$33OJN)yHVROMD!pa^pi;P@XqfW#hHv)?uVH8#NeU!F0R-sWg;XJ^Lm zCwM=mp;;Pg;sE6PRvdVraaj>VYBL~vKXJ#+0e)r(QUz}M0|+)5<>e6#_S=;P{ZTJ| zLyB;(Kurp%uCzYfe@b&%Lu!xr09wR!YD9{8xqB5E8D3rf=#bPz`}9SgyA!_WV3u^o zm9b`R3$QszYlMEuPsILDjvbU+p-2qs3R0+A)Nb?edf;CJ<~A+ICN>1*K7n!|sT>kg z$ENjYF{sWaKlc_sVq6z7yV7wAs!wJ5{C@T1oT{8N?>51ZpW9$FhEX`ECZI~>y-e|X6gd+P9TPhD$+ku@>zlI`5npMD!z7xPW$~R zBqjtDe^Q;7`hj`T-3tJn6-X)wh#-9_gz6BWKKNs=tZf7meFM6KE}-v(UFP@=>VYvZ zi+mSG+z$#^HCF0ru4VTw=#BYu*)T5Pdf-SGMrtiVC-t};^jA<+q&r3bpW6?FK3<-j zoZMcNd2TAVT`LM%XHYDH{u3w>-rgN~3hGHQc~0-w+pfX zeO3X$_TmaZ9=^)WJL2_k!eLrrb34Ar9D$z1-7fy=cxYMF=H-ub=O1&?1uw+Ose!Ebo z_2vo9#~WV~dlAhhr%kBF1%nqOpo|684s1X8qk$^y8Bns*QN@F*D`2$SKq(J;W9g13 zx5urE$HUDsFqWgsMOhZ8bCuycUabs5m?b1DI$ZiSt5-G}mG` zXwn-%^o2B%U>|nt>7aSR-^gHDp$KLwiCwEJ;QkwdJ_%GPHETzCDRxhRA{i)mqM@P> z1m{#pM)PL*Aq|oo?Z%b`8O;DppTC305j{X;Pew`#1=Kf&pkxjq;tB)05H>(z+@lb2hJbpcX3B81SNmRdej?+(cCqCXSDYc# z41>n8JBC()a0h#m*}toUDqf=#RNi6V?Qb=!THG$yp!)%-a2~I8KmtY!pN?8^hu7(~ zfArb41yW1Den9tY+p_>g8>Xhfcd4k7tf9A;XJ9;x=*+*mb<~P}e{^s^mf6ORC9N5o z>gq-kLD5;gFOGF*-S{i9ja^P%t!Ve2Sc(vJ(q4nT$ZhzV{?9~=^7BF0^LS(UYj+Jt z!I~UzlaK0&*-SqaJKX=EN|@#y+dBq_{fdu`jARv6Tt@sY{Tt{90V8Jv_9Iv*-XwT+ zbpAR0L_S-TbK?B`Cc=vIlbem43NheXbOJEW_z*1)GZC}{h+UC=N0sxu? z0z)FL(e&^TP_MJf0e`Da6%K~X9c%S^o|Xc+wbt8HNzj*xLehJnRVx|%vg*`?898V? zln{wMwlX-uL4u2e^Fd9`O+;{32>$FdRPaJ-hHN9;aQbt&;T_&-^Gp^JzB9 z`6^dNZ!jyylbj_8Z4MY8AS$_1@K4=+RIJfi1cpL5J^bT`G0m|Zmtsa*t zvP}lf!7sOQV9m&Ft!&daCZNzxtwr9t0aC)2q3F;4j{lULL%1HrQVuA0IP%ua%v>hRj2*)v1ZI2c3`3sRuI^*=v8q7@rS4V;1DqyyosC zQQrJjRTdI|Ytx4#;~m3scM^{lPW2o;ub+p|n4THgf+ymK96FPqC)mt?a}b@so0+9} zb%j{HprD|ox#)_rAt0}whH29J!S%0WZI=BD)NMD{oZ}@lF?4xw>56sy2C+h;7C?;^ zm}T$Lz9H&v{d!nYh0vaLBIaz?XU=cAg@%K1D9>I|?iltmLuCt4qi)zrGN;S+;|R(9 zMt=HWLi?PXn1Acy)DsDB8V=o;kMu<)CG{!8&%Roo?O|GZtV0((Nng7i1F1)ZmLZmqpFmQ~x`(W_ zgMrNh2!Wx45Y=MiuS*cBRvm->s&@c3Ptq8+PG)2@Zz+Yszl$Uq^O?NnH6NK`tmIZm z{KaZm9xcnC?Q1X^dMBx6IUx&`o|6TytD31G+ySX%|a~No-mv-oT6Y8`brV?4&6+E-mmwo4r@{ zpMSk2;j#>@MRR@$z7@5zL!sT2&p(Rz@I%NkI7ilshHwN|)N(Qe!YuebxLG_4C;%qX zFuCkzBt-_kgr!QB=jdaFEnm>+$9OA@O@$RU^~;TKF0EqE8Pja~Ou+gj67@If!I7B{ z!9?C*oTks-T+M$_)Opjcd~%|33!a-kb(Vs@+{`TvtzuQzSFnxyP3w7GsVO9QglRPO zK>9F2BunIL8+YpWwC}}&b;kfn53yaNgJ_|8x|HKC$GGMkks^}w5crZliCAMf`CR6o zhpS;dCMpF?2g(JHOx&fv#uI|y)--vv)>im(dHren+_`M7-qsr@WL3xa&HI^jwD^1J zc_6MgZG&Jwi}}=P+Ek%NFEWAqB`u2h%Q;sVw>6mJ;iIlrOIXXZHIrF%2BsVG*P10q zBbj-fvver9hB!7~QCVfUKH2O(l~W4n36e*r*GeJd@VH!Ta<2O1yf`AQ0G<{Rf(NVE zhb)ATqYp#oz|2%jkAlwJ zf@NpDt?Mw-(283;lj}5a5DTBrMUt#nZh&KVS8uv@ST0tGq7tQ^|B@xtMB%sQ^meN> zuUXc|nm28pyPW4DM;WH*mG-W2HT*YSI(2o?&+BC+p0-AddM4rqx$LjY9+c6fIOaH! zxK-kjT&lG`@K0Z_4R5+g77oWS4$jG4SQ|dOY^+S@fl*kTqd0}aF&=%lk*HGTevRb~>tN*)O3!u>{6&g&B0s$dp?aga*{?I+qWxjoHOEE= zCYyr|;+7lmKb8UOenH~f?+Y0hrA9`L0t5L2?2uXVGQ5%@uOfQc9H2AMmuWcvTW&KC z<8WSMncQH&x&xW=v$ml2d`$N-v$w!g{a4fjvflgi4z%C_X5nH=(TP8UfYLF}2HP4G z1NH?{tnL^k;x==p_mL`DKUU;y?IKpxKilI{paOj5^6$IxyMol39lMHDfK0 zruFu7e5Zt@Y5^X-Bnd+@-#ZVq$qLjimaxfcUpK!lBRCcTdR2|pus+0=bB7wIlrF{g zWiO?yp&_Zr=}wY(;Gyi08*&rhBAZYT_zdA(QTzl4KO=MrrjO9FDbhZys&Z@_#fy1z@Z)t#yl5{1INi@C{ zB%9yc)bd=62Umge00t{BSR(~tJYfaS+!C=YTFvOZQMv-uOkJ zur{guZIs?cxswzUgmd>c&5cQ{NGMvtjbK~~`Q}yjvOdQw3D;L5{*>v2XBaVqQu(>W zZv>AU_V^KzS8Th4q7oiXd1V2|C>P2L_pt?D;n+Tsoa!G5Gv~ejrWSvXR+c2FIhE~| zmbb%trld0Lb&@3i-Mq9sVT;vgI$kf)iC?bVH#+2SLa|RI$9!>aQeFW6d%slNUbv&@ z?ylJZaqo7adtxkuvMq z983rE22@<|?@0Ga)unwXbT1p&*vGkYu3u;UMGX!l;*jIkO7T~1hRRT^uXK5=lOK;fzE-Lk$im)m>;DM~#DaOtze~CD+(IKeaJPQReSNotM zq4mSfrxp!sRVl?yvIs`b9|mFZsi?NMFY+Y{gAY|uYGXQ{e)WbGLdHZZI&FAKKcSa1 z-BlQ!e5QD9a>DMC;-|~b3r@bs>PQ+@-aulf-8ksh@g{j>N>NIyg^|x8xr%d!LzTx<{%nAO_AAFVrU$K9S0g&H&QTVOVp}L(yu@szPDULW2lx40+UntLA?_OKyR?+BrmdMFtl6KB-m&o0ux(ac+hN3NeB^ z<*}dQ0Fk$hqy;3V#|$RrwH7H)O@)+K;QrQ{cORY)LI(;kIR?}Q-IT!d0#D8}NHZ?jsv(OeUsehfM{Z=gYHBJU8(!AOIH% zBNJbWx!E;@(?A7o=!%0WIDm&q{V3W?MCUb2U3Ev&#XO{<1QCY3DuB+E+j1N77O$ z2KV;3y^|t~@?05n;ih5H6t#jYT$)>rSdn7~aD^YW;J6{DAXjH5b>s~f8~BY@gAp7) zW=i7vj@mLCHQ}Uv;{^j*LvhUyoA&JE=aMe?%x9giv{J#sUPPspPW{eA>C>xxso)jX zE`bSV*(>R&a(Mq-^|5ikIv3`zw(5&O246bmQpj|-4%*f{k?2!dZdS?>D&L#Pz- zXjZhoibniRLKi!*cr!ybxbP2#LG3x0r*l8#?1&{~dR?w^$=Cl@OCtPvl0TlrQ7k0J zQigMNv*vA^MlsfR8>!SI7?&0%(QXOiuU`4NeZnvUq2#k*$RQ~K<$w_8lY&<;+S6a< zbxIJ6ykfOf9FJkNMb@|3QL>$6;;r8If0u}C^W%%_HRMNaUKeKLuG1yxt!U5Tv_jqC_!mb~hiJfbcY)X8cBUIY^a7rEMk z@+Ent!XAnFK^kygIeay2mL)`g-C<8qju#x{uLsXA383^+q;#%q7}8GQd*nfP2-*{$vIt$!7I)^G?eq4`5QnK}UzI0){Zfm@EP zQrxLG*s(UmT1ivv4Qe;`M{Ibe^x^(;6dEw!U>3da9wA$*WN^AhUPg`m^~#DAS2wuM zaf%Ss>6i|gcqX}?5t&HjF56ojs2=dei&yV_{&Dx~Ddw?(2ds4)k7)C1SebwZC?at9 zb{IR!@-KH`RoXpb9L*}Q40GU=(k_v-bMk^orZP~w@~8eK{cNffK0fg{U%oUkXT?%# zY890CP%gIN{7HO?sgm1y6W6mgRB@{4@`3}{r3c%VsXbqqy=5};0G-E^ReEa=^3Jyw zc1@J!?4PS$I*ALlbHS0Tkbn(`J=I6)x@R^tp;T?g(c`| z&H6>Gh8j-=XB&Ff>laxoZ<^^f|E#lc&(wOf(gZr7#14dxUl!YOc8bX{ z!T7DwOIqPv3dN#ZYzjus%=JD08)do^LC&!quv_W7b!S3!Mvh~TXOhoRRSF70G$wZB zfN&_>^`bE!g%n*;T^RU8IeqwQ{n+(=dw9SwLPAC~uP;JgWR_y(|W1)7zmP`5ACW=?STsWCfRIT$i_g42VecI3-J=v{Eu6&IH?rgBd{%m8{QeX6O;T>cpKjJ^hrm-FGZ?cR{LTWy;BZne z-oT5|G$xc6@+DrWiK={>UYXA1RZ>3s<%idg=HrtN_bHzy z(P9w2tBZ{6BJI67+sR`l1Iiq!2Hpb<4ftoLX#U;rm&r=DR1u)6YD0JCkIiXtjG!A7 zZFtEhY6n`Cd=01+x<#vhG=tonk0)yw9(~kBtk%s6_krjgoE&am^6RJQ1~h}%t7zLQ zIn1L8M?pMQS@eZ=Oe`?kOSU5BUGfNnTVavuUBs1OEgzG2r?B}szgh;9KQhin>6jjv zhbxAQ3oh62`5_ZxX!#9&gV^k!uh`g^_CBvw$<4UBLJ99K@CHv4@VQy(1Ia^6Ci|)% z&$0IE8O`FHF?tirfdMRqHZVi6xa-nd$}kTO6rs-;Gcd(@7AfRxFg3dHy@`2Nm`=vj zgVtRnk}PB6lXC(wY~=(fDVo2JN1uzqoGPl4m3 zbOY~m9W%gQEe@+>RxG9SU>m{=cvV(T!enr)C@#Z4FB)ugD&gELO8T2sI+++{`-)h! zeG6vAPbKQtPx^Mp>O^*yHubN$es|ttDhzeiweRP?>T%DPhWd}%6iO{Oo5~* zD^*a~O<^T^$DPw~VW+4y@`L7NnAVPa;bbTwZ`cyyvn`8ItoJ1;|22#)1+mg5vQBKL znWW0((BNENpQNozHYe~>nb@Y4__}JmVDCcquAv>bAt|W)(T$BO(wxw%K|C^|7FVlZ zFBo=+|6RL^jLGyvDypuNL{`|Q@!SE|3aq@Ns@WW=tqB^DuJUcq|+#hBCUEUEOR(pERzN3&MSPXKJErvw;Oq-wyUim zyR$ic#vBj3kT%`=eysy#L&W6D3T(WXNQ)aiK zu`$ZZI;osv?wHS?;}fU|#QAihKPtjd(yyA!EFKWkmDDG~9$`VrZk1NgD$$qV9#(Qg zK9}Fo9J$xMQAqSUNJ!{dr8)w|6hx=kk@oeZ$Egt4LmUkJW0#nMXqi- z&>>!n`*O4sDhenk zb3o;VF4{axSm1ch1FlMZBE$6ay;dugtUeN^%sRO1SqW|L)=Lky*pf=zWsYh>T}M-- zqM?jou)`hVn)#`WIsS9!?O9wBvc5}?Xktp_Vcc`d(KhKZr-I7`*u-o7*bZ|6I1ZH8 zc+*?IUJkB(_D!yg-t+~_X2?^22z*s-&fk(WR~_{)6g|8LPM+1QTQDQWy3Jb@2bJE*yt>jVTm~VFLR|9xdbsA5c3M{%x3rVKYMjoPNKmipKR9bVN4Z$bzF=)wNx+@eO~a_f>96W zG%T%E-O=1rVj1E=Ezk&A>@2fgb3vqP885?}&cuzj#RTFl|iV3dX8Y#}YZ*@1Iq z$RAyGEUoUjp%YX-g5CA2L4RZWSk!`G@^4B(H>8r>`xTehTEtia-#9OEBvECL3KPbx zZU_bu-i}ZANXo~Ceu9CZTob@XHqgYeF|4Af?=smuv7v7DoR2M0$|@Jtfg7O4 zmYj)*WN7NdZ;>PV8_&B=L(h)UTEDnGn4~qbPUg%$dePK7o=y87lXZq^8OAw_%sj2W z!2Ntul$ct4+I6~5Ih9-?8)5?zw23!5F`5kB#n?#Zx%_Hz<@r1j_cLwP-!R9IJL4aj zAD@b9uuVarUcU=C&_0QjLmly=Bo}{*8B*Td&v_8a?C3iCFV$op?PIAJ)2oZje5vfg zno6GP8U5Q;jb?xu4cx%jI2JRfC>zkRE z1Mhr7wG5+is%X`Wb~xU4K^`j@>k4#mrjZdNTg|!Fv`DlowwTp!SE*XFR722H&ma+|%~UKAJOsX3VcKV|XSj zEBkkwbrS_gW|H(_3a=D4f^B;7O`)k(1@5}yRd&0Lw<0J1v+=O$S5G8O!RX@=G{&wC z;->%kCV!YgDpX-sMdvj`=6h8`Sy`X7!W5)#*r)DAxu z49bp4jO{}ecieUG#upJAk%|&s4XF?qvN5GmzkCg{*6Ke8-5ELs-!U8f^p1d+?^z%SUQe z(<9oqz0t<_dEO^e)vmx}@)msk{c;-itD=i=3>t-lVlvv(BarYMFRom{Z13$V1WLC+ zTKu>Z)FZApj+$BYR{11!a6D4`iS81Dg`8oLVa23UEq6@GjK!k%_qtr)63nOnE{vAw zx$%?ZSnhgu`(k&F#hez)OB5G=5ZAQp^^2KJnLaNlm13;guE>yK24Jps4N>w4Hjj$7 zK4UsCpq~aNPrABVOsPtAI1}QN);N>8D4!a__e|qv4qY)s#}-1rRmFse=MJw`t^qFn}jG%zNnly%t^r? zB8eccmw#Z$DSd8R3H=M&0keT&ApL@H?&Lk9ApMOX8Jb$#Q4GR_QNN zp0`Af%ddr}lEimW5Ihu@X}9{AE8ghpRwr|f5nKIK*-Rm9>weM8Sdd56%uKwW*!Wqj}4=J-V_?sGfFmXNwXlT;s53AwQ^NiUaFTDx?s z5L$1{zw}$|yW|xE)TSMqmopE72|6Z4K)EG<-XHA-1SsKm+Z2H{6T7o?h;+r zdhL_96f$2&^0Db&l&b3~dgPXrI2k4nP1N{4UWT&c9!iXAFzd0Prr>s9+;NV@wZq%Y>{Q;Y;*OCLF{tr{bj zvNaL1YM4?+E6py)ZX z=_$^c^S9YSlB0=@6-K>JGwZMRbM}Uwv^{1DHM+%`FH}Ha`rR&s0!JdLjeJ+YE}ZBc zT3XjT+(@Pp@9A?ySU4hWD5$Nwju*!I$y`m)vF2c>@x0pV3a4YKTS>cFxSr1K^;Iq+ zXDQdHK5;D{m4y{jPj#M$p)h~LelM27Vya>by{KB+{8A0coDaq}ZB7+ZR+0C}6qYf{ zsLBX}UT9`fO?5%FD*4i?s%n^SILCfZj4kDp z?rOY^x#hI8=z`5jLTs<1X=2`M6Pg7Pa&`K}rWkn!Z|<5M<;P)}UrL%~xt5Q@A;ZMx zCbT{N&Kl=RMSe^5Eo3`Hx4CAibm_?e12G#D5~Ha~R!X9o(aSyL^De%S8u*zYF4ua@ zE^6#<{B5_Fx^|6sG#?C5t88sagwgSt90&Yub?Y&XwyWeB5*2gR>nzayLeH?Iry4>E zXeDH-+F1SaieGO&#HKtB%&pS?f)&Z8Uy^uBnmQP?yAPi(wyzV=n-k31y&`?+z(d=h zV1zO|1$baO%Mk_zh+m=ZpSjGaKl(KB>HRm47(W zNVdV$`5eG`held4tRt}1bo_+)s(T!mAMw7Jc{NBV`U7z|Y7g?-A)$ig+76t>f56zRB7> z$SZ#|uy{1@Bud4=83$kJaeQ7`&+QU2I7}}XSs4xKL10-J)kRRhG2Jz$*R*6B!chtwoU5)|-tzupH zdZ9T;YTm%c(a&&fu0z52^OB15Wiec;req9<18f$GL+uhFpBx@9pC3~x)m(dj%gO1< zNJ`D~qljWSg5N6KEA{(S2^I*yO>1Q$bKgKgi@x9Vw-X%mY~kZei3%K*`WGDi&6{;A zw`4rSOF^5~+yn!A@T!9+6Cxw#OromERiBn>O2S<~q5Di7J*RgP_+6>7tRqhSB2!g6!u`o^?0UWDK z^lMh3YTuDwb+(dI=Ptcw&kgXX+|xcp*IHDs?@6R3!wuSVqlYo1t$M)`S&?7w|9g=~ z?JCU|Ud0?bE1_d#hZ@|S#OL-d9;~#(GAwb*gEw$IFw_YI(h5t*Ac`9>*cT-$=0CNj zKs0w{;ppd|7h4s_=D7Pz)I8sH6*Jn!dj7I(cs$!ZH&H-n{xolEJ=N%QlXa5gpcC<_ z?XCgJU3vF<37Z4$QksxqJ01fOLp7IQq>DL*;^x6?)AHgv8*8(ut9&_`)T5~{5?@8gTPd4jP{z}vJ0FH?-18Y*eLj$zIy=VJUlD8IRcmAEd> zqPfM%&dUP%29>xy$`a*!!QRyW)>>iuVYyi}ITyH49}zeE zNmYUNY(%AdqhkCHt6ytuP}H^2Qeo5%lF?1#xlrPLE9#O$Z%=)<`i?c@9kDg*ub1iy zn4jH6hrY5j>#k(Rz*ns^$hN3TdQ5BibxnIc)>4fy@i;t65E;n{JevQI7jsM&&k{~G z{g%tf8pOk@`)s^H!H|yFl}67c|(LFJy!3HZL71Rezbj zqyT;@)*>xYC*FI?jsh|Gfhlam%XijLwLRyr8)`_zeL%&Bmjf(^LgsKn)d8tdf#WR?W7ZV6;eg<_`!gQ8RF0S!bnX6O5Te495)`pplI)JgnH?#1$@JeQvs<0*(a3U`?4 zop{L8^M0vveQdP-9`?^Yd^xLN=UxA6ZqsnRu*VxO*V&9pG&w!*Z}D8yt);Q)Dau9Srhf*qV3@WDmr|VINghhQj^?$ZNAr1NyW;7elpX34M1kdHwjaho zaX$`DXai`<;Sr0Oq4z?kiC^ukn1A_{(8CixC2&f#$?3qX{7!jixlMN@v(6Yl+&^)I0O()vf$+9Kv`brX?io=d_6bLtWMAzg1y#) zVKwKyXDXp&>M}a0&P_vDclixh-?x)yyonMT&r>&Emfcm`TBX$N!{$hB3Ql{b8D&kFQCT z#=CHwxRl0|=isJ8ExI{qPn!2ZpM2>{UNfK8{`nuv@{ z4O8S?-|ZsA?6y%~<#_NrVn$ZwQbq(!1dr;Bv5n0kHIoyMHA_oWy^!Lq@)~4tIaZqg zjaKst-jMVKT0Se^r|EglVs;W+{yaw?73jKWU*Oc_lFaxyGE@<namf}bSs=w^Vig2#9knmhlgcK(+I(aL(OEY6KzYN(pugh4Yj zv$&Zpgt=wwZA;VdFp#jSk3GBw$`lA@Ab+r-43r{t0H0n* z_q>FY!QsfaP zf!xJLyK%(Ao}^&SdAguuKM!CkUSx6cl8#*yso+s@zgmMgHOt zZvlBuvp>*Gjofi@NyW-hmnH&Vqql=;?|ZVqVt#&VfEe=HB_9kX&!;K1--nBma-#(o zsG8GMG&I{Wo8Vl3Ok5gohp4SBYfn#4YafWO1t*dx;8b^c?R8R#p`oGT8bEEV&Qut& zMarhumr5!rDTVI+_=Z|&KA5DHU0M0+^z3Z!S6sIrpUH>6ME zJ!IPMJhe?xxb&~s{C*sxt-@Hp&iG~A!OG19f9SsHvC+r`$m0s8oo@ad2^zX;X^~P< zDZXD;F`otS;J)zZWlq}A5~gtR@fB2Dj8Z$y_`=6Yme)@{enRKhoZr~qo^~0IjfqKl zrJ&_#si43&^{u!#1OT#mpI0&Mnc2ItpU*zvjcnm+6LkqPd~9avsj*VQw8qfRp-z-l zh#rb_)t4&85~84B4383`7+wI30T32ty*D%)V7>V7FW14mhIGdB{w%%W`d86201*0$ zfW8G7HQ>o;X#*D)G^l0MhAIsQzmJUMDwk<7Xg0=ld__0|#0@6^#0p_zJZ{&Yv+1&|UA zsh)(th}8j!LA~2qdt%)iX-n5r^N*_lQLXbc;|&Cmmr7t+4QX=` zAAZHgwmV&xUM3BQ~GNv={MdJm3m~CXEPRq$Rg@53oc2z zd@rml3gR~h-Pjs{1P>x( z=;--tV>D2bY(#K)9UO;QN)fZ5!8}cYbhMYm9<_6g$rB8Pbaq-pMWUEd!NpW$cvbK9(z#2;oaAs0T?12DQ3gNlO#>P}y z-FbrXnV;x@bJGi+4|fpZ2?Vj8*7_6*@UM8s_ZM~mQVro+^3vRbcng)zk}=vT>1<^C)pTTeo#J0(3VA zVq2Ft7i=`+L9ik#FDuy(>KBt{KLafeEi#t$vb^wnIN@^sH5cRhIb$;STP*cO z_Te!YU|tOuQ|hk3_FlexNk&EG>rd(y0KhZ)B_&ZXkB)9~C|pnT1n&Yp@Ak9-y4ns} z6Tt4{d0p&HW0Q~!1Ga(w?m%pawFUy+0v-fFiBP5Aho)4l(gBc)FfN~NA-)$tMQ{dg z>?`{%DG)!~M^gDz8|GyZb52?Ua0dO255&>}VJP;%R$VdL;$8G>mf;I<&yLw)BJ(n>}o|~(n1_%}X z@my&@(^w9mt6)iTd#vW_%G#1N1hQZZS z>a&1q2dGNZr&lT_1NH_0MsOJ5iUAB;TvoPEZ4h8aRhnH`U0q!PNOSm)Xccwa)vz_e zD+5G`2!NK6k&1`snK>f>F6#l{5rAN>HZnmb0~j$#z=t3(5(MrAq!r5^5baWDR~JOi z0t1LUnvTk9J32bRTe4RPb1<6$wywLk_m$BQ0gNBYv(6MAdqgB2Ij2k}%MbCj{Ihp| zmSqhLC;>YYwSYhxKviYx%5nsu!=?WbPq^SccVuK_>&-GC0gwi8@@G7Dl;q^(5PTKf*+ybd;0h2X z2!)V6ApLfO2I3d0IRt*a3>ZXw009xYIU^<}=7QZIV>3YQwtkjL7f6LL-Z_%^hpjhO zOCC1|Rc3upp;7^aB8YJY5Y|)xRu^89DyEZ(=}yco9f>cluQ~b`BBOM&UX!kcZep5W z=6UPkL-m*%FZgd#1z;or!Oe>f96LD}@Pi^D}C zF93p2P*D*B;CcWuHU`K{XlVrcHpKplMM@{*>Gv^!qozWq;}LP*uM$c+x~J`2!HNK| z_IWRawUwM>coL%T0f@9%LjauxH}9HsItTUFSRBpXLPOQjA8_ZD)jz!(Nh>WGzu7a1 z&MrtH`T@KG;67zz4Y`(FUV!4D==T-wA3yL#rvTwoWzdfWSPufi!?(dcmz)rQHJ4Tv z101)aS$a=*Hw?|vSA1>v3TsWxrLQ%q?={1;uSjQdrHLdYB+M3#MXfVD?yg6hoUI}7 z5TFWR?d6kJ0#K&FkdSlBX#h1h`^1(i&Zm@r>-pBiB)_cngJoZ_Isf*6+VT)olbGx#1sH$NTsJ-=Ya z(jE&BuQxBS5UHB{2Txi@J0d-1hgyul5*T9S;# zX2E^^y|S{h9%TB4tF7ez{(fDMlp!QFfU?b17w{%AgN1-tQ$A1$!k9fEi@709KloH$ zd&WJ!u1s83``PJmA@TUw29OvYnCAgNHbi&=K(Zi4u3Vn1x7J<)bUHv%_tDy>gDt~1 zH>@G4Dm`KMan&DU%`hBZA)}zk`&ow+X#`@QZYv@AO6rvXfF*(u4k`vt2)qi)EhKbw zW57tHD3F1GfN=9GJ!L=1yma+=wF?k45t}mtT)h5TcVMwf#TVe&5F&cne+*D!fJKpf z&=z_hO4tLeNVUa{W5x38)!Fuqo9V>l?p$T0JrDWj<>a0k>y`W-d4hM<)T{x+xp>A9C66Ywufl|~+4z+;*AuC1@TUatBla#|7s)G0AA z4G>=K)cH@Xng*GUMZKn;9MzO?ytfbQl1s&kBn z*COAO>Vkl?v9V#(h04WZIDiwv`Ykut4zL}J0fHx{wp%-^mJ21Lp@a?)M{h?_LQ4VJ z2LJCF{RM!gasVtBVI+K~fGgw5@BPFixEtmcg8;E!IbiNEYZ%Y*b5_jJ!BSiSss-=Q z^8{G|7#l=xB;W|)p0_VR)P_eufS}tf07FdbwnGlwVMCIbl8WjC)DqZ4M3SH;1hWo3 zfS+$oqvl$4z;3(jVTP#8Aey7Cp~MB3^-v9)j>pgy3^LXopQS&f0F*e#B@{sOwff2| z(}A^Zw~700V_*NEvgysmT~%LC3AjIplyFSafYFgpKNwLi+lI}{qjVc=L4^`{l<4p zr~R3ZtL=1Im6^b#uqm}#>tz|xZ2)4i6Gz{&W=)W4&84)6`JAAPj0Gqoa%y2+%yR() zr#C=j!$hQ}La9NPr?;UTFcE+pUJq7Dw2{UE@W@D0bJIW0%Sr%Q5~wl8KrE`_^{}*b zZJgebGBhv%pKbX&X8X~PmRx_WAsbtBZchJm30=A$0JNzI^tH-%F65L!pFsnrB@(am zp8{e!K>t%MA^q&QRlCk&_N|;8Ca6mUH(O%T(`CVI%Kc~>U{0YL!|i>u(YCq%Q;Z?ex83Do<_doj}xg|gz0NxG!#1t?g#O^gy#0AyzX!1>of(R+e@5t(W zr~y2&&H|M4jisWXJN^ag%tz3r|7zVJ)UV&k3N~9Tgq*FbN22#%aU%#U9t)L+w(8OwPdOdHVm{ zad_BX+no-@b*O(4C1A4RecF!N}-u;Z>4vXGxJgfwSBUgMeMjcu=E3sQQlY$Ykwm+9E z*b&0kcN(E91h2>~8lK@faZ{%+ZR?=bFg^T;E%tZy;Cf;HU#=HC==k@FgvkK&tA8&s zm=9pS@$dEjzaH9t7>xZRn7+2`KcRB|yJZ1y3oRqYG zjx@GGEHI>oqL}AZ=fmx%e1{VSuCprdpLMbGfW9UC0xzI+VUK3p2KMCilo4cuG?FWr~%AQ#Ab9R#2qli2w>9a2LO>b1xRxaDnRdk`E`{gyGXZCX;3CWZh>6 z2W`(j1#&?_h@sTepPYii?%jXZNq7C{=;#Qe&_r3KTXg&4*qJ~P1Qd`14vtvB295-n z{S9nl(N3eTeISg0B?kZBxt~}tm)(Y#z}>mR-xaJW|0iUs+G@rZ7Z;mNtC~Z7Eyzlf zrGH%biFxccLVhFJfLy3CUE-u^YDx=8)=DZFz*T_8Um+|qI$B|!6*45k{}|E|=wf;{ zsPf!TjK^<2yRq1i(=JC5K{R9vwvbr4WfNlH1?0F>#28)2!ivrMJ^+(e{)KM_^ zpdE#%3E3QWK0suiU;_2OIyu*nCZjlvZ=_`xN6n;?wUlaNE-yuC&8?ghbW5=ds9j|? zP13?FrCA{gQZ`J@)=HC7E7Hw1onV_=V5E!8QK+clWj0GwEJ`hUD|?RZV|}Ri^S+$- zJ^yo_=QsHEHo0Qlh8H+y#q@XF0HXH}(E$#v3L9)Z!&O%VQi#2|2b-4Ww6q9`_k+Aa zrT>u*}+D2uNgG_~xYI!~E%nAfQ?qd;Keo z<`f<&3f%{_oo{U2I^^@x(&Z-%W1K%C8S2rNaFNKvF*JMp0amu^bUMWA`8i%;`2oot zESSRLbW&#&(eu=dH$-Z4TVY1!UPI%Io>C|j)mY*=K+BbhG@_tH4P49PmEn70_Wq?4=zI=i5V3aF#%kw# z^7*&WNI)Q;!id^aFIx;wMQ?7%&>S*$2esDkcIBB?y zj`vwpD09^RQ1o0Y(;;lnAkUIDfH2<^`bS5LK{PA|ZO$jJNH!0^hpZP`9!K=TsnQ z5vCk+-E98J*g1FT=R@HY^|0G~;a+1p-Z1eVf^Obd^G?}a5Q2vAroFk`iSmihpi8O! zhHEHc(!@kMv0}k6!b6Fi2Op9??X?m^R>71YZ7*anTK7MPPs_*85C2XG%r@DXYsJN( znVB>7aMBj;sB*=Oe2?Ihf22fqHDSMHYC2Kik|=ziQmb~WIqsM4yq7*mP}nLj`)z;I zgkRp=+%=c`ij%Zx9n<2ixKy2(jsvZCyx$n4ZT?j7_z8(pul^$SyzI$=WYFJugv ALI3~& diff --git a/docs/_monte_carlo_updater_8hpp_source.html b/docs/_monte_carlo_updater_8hpp_source.html index 36c05ca..f1e2543 100644 --- a/docs/_monte_carlo_updater_8hpp_source.html +++ b/docs/_monte_carlo_updater_8hpp_source.html @@ -326,9 +326,9 @@

bool new_neighbour_distances_are_between_min_and_max_length(fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
Pre-update check to test that the update step will not result in an unphysical configuration.
Definition MonteCarloUpdater.hpp:100
unsigned long bond_length_move_rejection_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:261
Implementation of Triangulation of two-dimensional surfaces in 3D.
Definition Triangulation.hpp:297
-
void unflip_bond(Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
Un-flip a bond that was just flipped.
Definition Triangulation.hpp:615
-
BondFlipData< Index > flip_bond(Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,...
Definition Triangulation.hpp:528
-
void move_node(Index node_id, vec3< Real > const &displacement_vector)
Move an individual node of the triangulation and update all the geometric quantities of the triangula...
Definition Triangulation.hpp:493
+
void unflip_bond(Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
Un-flip a bond that was just flipped.
Definition Triangulation.hpp:610
+
BondFlipData< Index > flip_bond(Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,...
Definition Triangulation.hpp:523
+
void move_node(Index node_id, vec3< Real > const &displacement_vector)
Move an individual node of the triangulation and update all the geometric quantities of the triangula...
Definition Triangulation.hpp:489
Internal implementation of a 3D vector.
Definition vec3.hpp:43
This file contains the concepts that are costomly defined for the flippy class templates.
Definition custom_concepts.hpp:8
diff --git a/docs/_triangulation_8hpp.html b/docs/_triangulation_8hpp.html index 13a6e44..0ba40b2 100644 --- a/docs/_triangulation_8hpp.html +++ b/docs/_triangulation_8hpp.html @@ -123,58 +123,60 @@
- - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/_triangulation_8hpp__incl.map b/docs/_triangulation_8hpp__incl.map index c685ea3..f8d05ae 100644 --- a/docs/_triangulation_8hpp__incl.map +++ b/docs/_triangulation_8hpp__incl.map @@ -1,54 +1,56 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_triangulation_8hpp__incl.md5 b/docs/_triangulation_8hpp__incl.md5 index 309b233..e0ecf1a 100644 --- a/docs/_triangulation_8hpp__incl.md5 +++ b/docs/_triangulation_8hpp__incl.md5 @@ -1 +1 @@ -cbc0a07ce461402a8eaf1618d78cd7c1 \ No newline at end of file +c977adf36bb5cd76ff35378a78cfae78 \ No newline at end of file diff --git a/docs/_triangulation_8hpp__incl.png b/docs/_triangulation_8hpp__incl.png index 139d8b83fb1ea9697d8ad8ba97835446775cf23b..0cc5ad0c7f431fb38e8911a3a2ef6099d847a2b4 100644 GIT binary patch literal 63373 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 Fe*s7PwJQJs literal 56475 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 372 static Triangulation<Real, Index, SPHERICAL_TRIANGULATION> experimental_load_sphere_from_stl(std::filesystem::path const& stl_file_path, Real verlet_radius_inp){
373 std::vector<implementation::stlTriangle<Real, Index>> triangles = implementation::stlSerializer<Real, Index>::read_STLSolid_into_triangle_vec(stl_file_path);
374
-
375 std::vector<fp::Node<Real, Index>> nodes;
+
375 std::vector<Node<Real, Index>> nodes;
376 std::vector<implementation::stlNode<Real, Index>> unique_nodes;
-
377 fp::Triangulation<Real, Index> triangulation;
+
377 Triangulation<Real, Index> triangulation;
378 nodes.resize(triangles.size()/2 + 2);
379 for (Index i=0; implementation::stlTriangle<Real, Index> &triangle : triangles) {
380 for (unsigned int tr_idx = 0; tr_idx < 3; ++tr_idx) {
@@ -288,7 +288,7 @@
385 triangle[tr_idx].id = i;
386 ++i;
387 unique_nodes.push_back(node);
- +
389 n.pos = node.pos;
390 n.id = node.id;
391 nodes[n.id] = n;
@@ -308,771 +308,772 @@
405
406 }
407 }
-
408 for(auto &node: nodes){
-
409 std::cout << "node_id: " << node.id << "\n";
-
410 }
-
411
- -
413 tr.verlet_radius = verlet_radius_inp;
-
414 tr.R_initial = 1;
-
415 std::cout << "finished stl parsing\n";
-
416 tr.nodes_ = Nodes<Real, Index>(nodes);
-
417 tr.all_nodes_are_bulk();
-
418 std::cout << "node count: " << tr.nodes_.size() << "\n";
-
419 tr.orient_surface_of_a_sphere();
-
420 std::cout << "surface oriented\n";
-
421 tr.initiate_advanced_geometry();
-
422 std::cout << "advanced geometry initiated\n";
-
423 return tr;
-
424 }
+ +
409 tr.verlet_radius = verlet_radius_inp;
+
410 tr.R_initial = 1;
+
411 std::cout << "finished stl parsing\n";
+
412 tr.nodes_ = Nodes<Real, Index>(nodes);
+
413 tr.all_nodes_are_bulk();
+
414 std::cout << "node count: " << tr.nodes_.size() << "\n";
+
415 tr.orient_surface_of_a_sphere();
+
416 std::cout << "surface oriented\n";
+
417 tr.initiate_advanced_geometry();
+
418 std::cout << "advanced geometry initiated\n";
+
419 return tr;
+
420 }
-
425
-
426
-
428
-
-
432 void set_verlet_radius(Real R){
-
433 verlet_radius = R;
-
434 verlet_radius_squared = R*R;
-
435 }
+
421
+
422
+
424
+
+
428 void set_verlet_radius(Real R){
+
429 verlet_radius = R;
+
430 verlet_radius_squared = R*R;
+
431 }
-
436
-
437 //todo unittest
-
439
-
- -
444 {
-
445 for (auto& node: nodes_) {
-
446 node.verlet_list.clear();
-
447 }
-
448 for (auto node_p = nodes_.begin(); node_p!=nodes_.end(); ++node_p) {
-
449 for (auto other_node_p = nodes_.begin(); other_node_p!=node_p; ++other_node_p) {
-
450 if ((node_p->pos - other_node_p->pos).norm_square()<verlet_radius_squared)
-
451 {
-
452 node_p->verlet_list.push_back(other_node_p->id);
-
453 other_node_p->verlet_list.push_back(node_p->id);
-
454 }
-
455 }
-
456
-
457 }
-
458 }
+
432
+
433 //todo unittest
+
435
+
+ +
440 {
+
441 for (auto& node: nodes_) {
+
442 node.verlet_list.clear();
+
443 }
+
444 for (auto node_p = nodes_.begin(); node_p!=nodes_.end(); ++node_p) {
+
445 for (auto other_node_p = nodes_.begin(); other_node_p!=node_p; ++other_node_p) {
+
446 if ((node_p->pos - other_node_p->pos).norm_square()<verlet_radius_squared)
+
447 {
+
448 node_p->verlet_list.push_back(other_node_p->id);
+
449 other_node_p->verlet_list.push_back(node_p->id);
+
450 }
+
451 }
+
452
+
453 }
+
454 }
-
459
-
461
-
-
466 void translate_all_nodes(vec3<Real> const& translation_vector)
-
467 {
-
468 for (Index i = 0; i<nodes_.size(); ++i) { move_node(i, translation_vector); }
-
469 }
+
455
+
457
+
+
462 void translate_all_nodes(vec3<Real> const& translation_vector)
+
463 {
+
464 for (Index i = 0; i<nodes_.size(); ++i) { move_node(i, translation_vector); }
+
465 }
-
470
-
471 //unit tested
-
473
-
- -
480 {
-
481 vec3<Real> mass_center = vec3<Real>{0., 0., 0.};
-
482 for (auto const& node : nodes_) { mass_center += node.pos; }
-
483 mass_center = mass_center/static_cast<Real>(nodes_.size());
-
484 return mass_center;
-
485 }
+
466
+
467 //unit tested
+
469
+
+ +
476 {
+
477 vec3<Real> mass_center = vec3<Real>{0., 0., 0.};
+
478 for (auto const& node : nodes_) { mass_center += node.pos; }
+
479 mass_center = mass_center/static_cast<Real>(nodes_.size());
+
480 return mass_center;
+
481 }
-
486
-
487 //unit tested
-
489
-
-
493 void move_node(Index node_id, vec3<Real> const& displacement_vector)
-
494 {
-
495 pre_update_geometry = get_two_ring_geometry(node_id);
-
496 nodes_.displace(node_id, displacement_vector);
- -
498 post_update_geometry = get_two_ring_geometry(node_id);
-
499 update_global_geometry(pre_update_geometry, post_update_geometry);
-
500 }
+
482
+
483 //unit tested
+
485
+
+
489 void move_node(Index node_id, vec3<Real> const& displacement_vector)
+
490 {
+
491 pre_update_geometry = get_two_ring_geometry(node_id);
+
492 pure_node_move(node_id, displacement_vector);
+
493 post_update_geometry = get_two_ring_geometry(node_id);
+
494 update_global_geometry(pre_update_geometry, post_update_geometry);
+
495 }
-
501
-
502 // unit-tested
-
504
-
-
515 void emplace_before(Index center_node_id, Index anchor_id, Index new_value)
-
516 {
-
517 // The body of this function looks like it does not guard against find returning
-
518 // end() pointer, but this is taken care of in the emplace_nn_id method.
-
519 auto anchor_pos_ptr = std::find(nodes_[center_node_id].nn_ids.begin(),
-
520 nodes_[center_node_id].nn_ids.end(), anchor_id);
-
521 indexing_number auto anchor_pos = (Index) (anchor_pos_ptr - nodes_[center_node_id].nn_ids.begin());
-
522 nodes_[center_node_id].emplace_nn_id(new_value, nodes_[new_value].pos, anchor_pos);
-
523 }
+
496
+
497 // unit-tested
+
499
+
+
510 void emplace_before(Index center_node_id, Index anchor_id, Index new_value)
+
511 {
+
512 // The body of this function looks like it does not guard against find returning
+
513 // end() pointer, but this is taken care of in the emplace_nn_id method.
+
514 auto anchor_pos_ptr = std::find(nodes_[center_node_id].nn_ids.begin(),
+
515 nodes_[center_node_id].nn_ids.end(), anchor_id);
+
516 indexing_number auto anchor_pos = (Index) (anchor_pos_ptr - nodes_[center_node_id].nn_ids.begin());
+
517 nodes_[center_node_id].emplace_nn_id(new_value, nodes_[new_value].pos, anchor_pos);
+
518 }
-
524
-
-
528 BondFlipData<Index> flip_bond(Index node_id, Index nn_id,
-
529 Real min_bond_length_square,
-
530 Real max_bond_length_square){
-
552 if constexpr (triangulation_type == TriangulationType::SPHERICAL_TRIANGULATION) {
-
553 return flip_bulk_bond(node_id, nn_id, min_bond_length_square, max_bond_length_square);
-
554 } else if constexpr (triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION){
-
555
-
556 if (boundary_nodes_ids_set_.contains(node_id) or boundary_nodes_ids_set_.contains(nn_id)){
-
557 }else{
-
558 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
-
559 if(boundary_nodes_ids_set_.contains(common_nns.j_m_1) or boundary_nodes_ids_set_.contains(common_nns.j_p_1)){
-
560 }else{
-
561 return flip_bond_in_quadrilateral(node_id, nn_id, common_nns, min_bond_length_square, max_bond_length_square);
-
562 }
-
563 }
-
564 return BondFlipData<Index>();
-
565
-
566 }else{
- -
568 "Triangulation type must be either spherical or planar.");
-
569 }
-
570 }
+
519
+
+
523 BondFlipData<Index> flip_bond(Index node_id, Index nn_id,
+
524 Real min_bond_length_square,
+
525 Real max_bond_length_square){
+
547 if constexpr (triangulation_type == TriangulationType::SPHERICAL_TRIANGULATION) {
+
548 return flip_bulk_bond(node_id, nn_id, min_bond_length_square, max_bond_length_square);
+
549 } else if constexpr (triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION){
+
550
+
551 if (boundary_nodes_ids_set_.contains(node_id) or boundary_nodes_ids_set_.contains(nn_id)){
+
552 }else{
+
553 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
+
554 if(boundary_nodes_ids_set_.contains(common_nns.j_m_1) or boundary_nodes_ids_set_.contains(common_nns.j_p_1)){
+
555 }else{
+
556 return flip_bond_in_quadrilateral(node_id, nn_id, common_nns, min_bond_length_square, max_bond_length_square);
+
557 }
+
558 }
+
559 return BondFlipData<Index>();
+
560
+
561 }else{
+ +
563 "Triangulation type must be either spherical or planar.");
+
564 }
+
565 }
-
571
-
572 //unit-tested
-
574
-
-
615 void unflip_bond(Index node_id, Index nn_id, BondFlipData<Index> const& common_nns)
-
616 {
- - -
619 update_global_geometry(post_update_geometry, pre_update_geometry);
-
620 }
+
566
+
567 //unit-tested
+
569
+
+
610 void unflip_bond(Index node_id, Index nn_id, BondFlipData<Index> const& common_nns)
+
611 {
+ + +
614 update_global_geometry(post_update_geometry, pre_update_geometry);
+
615 }
-
621
-
624
-
- -
643 Index common_nn_j_m_1, Index common_nn_j_p_1)
-
644 {
- - -
647 delete_connection_between_nodes_of_old_edge(node_id, nn_id);
-
648 return {.flipped=true, .common_nn_0=common_nn_j_m_1, .common_nn_1=common_nn_j_p_1};
-
649 }
+
616
+
619
+
+ +
638 Index common_nn_j_m_1, Index common_nn_j_p_1)
+
639 {
+ + +
642 delete_connection_between_nodes_of_old_edge(node_id, nn_id);
+
643 return {.flipped=true, .common_nn_0=common_nn_j_m_1, .common_nn_1=common_nn_j_p_1};
+
644 }
-
650
-
651 // unit-tested
-
653
-
- -
663 {
-
664 update_nn_distance_vectors(node_id);
-
665
-
666 Real area_sum = 0.;
-
667 vec3<Real> face_normal_sum{0., 0., 0.}, local_curvature_vec{0., 0., 0.};
- -
669 indexing_number auto nn_number = (Index) nodes_.nn_ids(node_id).size();
-
670 Index j_p_1;
-
671
- - - -
675
-
676 for (Index j = 0; j<nn_number; ++j) {
-
677 //return j+1 element of ordered_nn_ids unless j has the last value then wrap around and return 0th element
- -
679
-
680 lij = nodes_.nn_distances(node_id)[j];
-
681 lij_p_1 = nodes_.nn_distances(node_id)[j_p_1];
-
682 ljj_p_1 = lij_p_1 - lij;
-
683
-
684 cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
-
685 cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
-
686
-
687
-
688 face_normal = lij.cross(lij_p_1); //nodes_.nn_distances(node_id)[j].cross(nodes_.nn_distances(node_id)[j_p_1]);
- -
690#ifdef DEBUG
-
691 if(face_normal_norm < 1e-10) {
-
692 throw std::runtime_error("A triangle face is degenerate and Area sum is evaluating to "+std::to_string(face_normal_norm)+". This should not happen.");
-
693 }
-
694#endif
- - - -
698
- -
700 }
-
701 nodes_.set_area(node_id, area_sum);
-
702 nodes_.set_volume(node_id, nodes_[node_id].pos.dot(face_normal_sum)/((Real) 3.)); // 18=3*6: 6 has the aforementioned justification. 3 is part of the formula for the tetrahedron volume
-
703 nodes_.set_curvature_vec(node_id, -local_curvature_vec/((Real) 2.*area_sum)); // 2 is part of the formula to calculate the local curvature I just did not divide the vector inside the loop
-
704 nodes_.set_unit_bending_energy(node_id, local_curvature_vec.dot(local_curvature_vec)/((Real) 8.*area_sum)); // 8 is 2*4, where 4 is the square of the above two and the area in the denominator is what remains after canceling. 1/ comes from the pre-factor to bending energy
-
705
-
706 };
+
645
+
646 // unit-tested
+
648
+
+ +
658 {
+
659 update_nn_distance_vectors(node_id);
+
660
+
661 Real area_sum = 0.;
+
662 vec3<Real> face_normal_sum{0., 0., 0.}, local_curvature_vec{0., 0., 0.};
+ +
664 indexing_number auto nn_number = (Index) nodes_.nn_ids(node_id).size();
+
665 Index j_p_1;
+
666
+ + + +
670
+
671 for (Index j = 0; j<nn_number; ++j) {
+
672 //return j+1 element of ordered_nn_ids unless j has the last value then wrap around and return 0th element
+ +
674
+
675 lij = nodes_.nn_distances(node_id)[j];
+
676 lij_p_1 = nodes_.nn_distances(node_id)[j_p_1];
+
677 ljj_p_1 = lij_p_1 - lij;
+
678
+
679 cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
+
680 cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
+
681
+
682
+
683 face_normal = lij.cross(lij_p_1); //nodes_.nn_distances(node_id)[j].cross(nodes_.nn_distances(node_id)[j_p_1]);
+ +
685#ifdef DEBUG
+
686 if(face_normal_norm < 1e-10) {
+
687 throw std::runtime_error("A triangle face is degenerate and Area sum is evaluating to "+std::to_string(face_normal_norm)+". This should not happen.");
+
688 }
+
689#endif
+ + + +
693
+ +
695 }
+
696 nodes_.set_area(node_id, area_sum);
+
697 nodes_.set_volume(node_id, nodes_[node_id].pos.dot(face_normal_sum)/((Real) 3.)); // 18=3*6: 6 has the aforementioned justification. 3 is part of the formula for the tetrahedron volume
+
698 nodes_.set_curvature_vec(node_id, -local_curvature_vec/((Real) 2.*area_sum)); // 2 is part of the formula to calculate the local curvature I just did not divide the vector inside the loop
+
699 nodes_.set_unit_bending_energy(node_id, local_curvature_vec.dot(local_curvature_vec)/((Real) 8.*area_sum)); // 8 is 2*4, where 4 is the square of the above two and the area in the denominator is what remains after canceling. 1/ comes from the pre-factor to bending energy
+
700
+
701 };
-
707
-
708
-
710
-
720 [[deprecated("This function is deprecated and will be removed in a future release. It uses expensive function calls and is not recommended for use.")]]
-
- -
722 vec3<Real> const& lij_p_1)
-
723 {
-
724 Real area, face_normal_norm;
- -
726 //precalculating this normal and its norm will be needed in area calc. If all triangles are oriented as
-
727 // right-handed, then this normal will point outwards
- - - -
731 return std::make_tuple(area, un_noremd_face_normal);
-
732 }
+
702
+
703
+
705
+
715 [[deprecated("This function is deprecated and will be removed in a future release. It uses expensive function calls and is not recommended for use.")]]
+
+ +
717 vec3<Real> const& lij_p_1)
+
718 {
+
719 Real area, face_normal_norm;
+ +
721 //precalculating this normal and its norm will be needed in area calc. If all triangles are oriented as
+
722 // right-handed, then this normal will point outwards
+ + + +
726 return std::make_tuple(area, un_noremd_face_normal);
+
727 }
-
733
-
735
-
-
753 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1){
-
754 if ((cot_at_j>0.) && (cot_at_j_p_1>0.)) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
-
755 if (lij.dot(lij_p_1)>0) { // cos at i is positive i.e. angle at i is not obtuse
-
756 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/Real(8.);
-
757 }
-
758 else {//obtuse at node i.
-
759 return triangle_area/Real(2.);
-
760 }
+
728
+
730
+
+
748 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1){
+
749 if ((cot_at_j>0.) && (cot_at_j_p_1>0.)) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
+
750 if (lij.dot(lij_p_1)>0) { // cos at i is positive i.e. angle at i is not obtuse
+
751 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/Real(8.);
+
752 }
+
753 else {//obtuse at node i.
+
754 return triangle_area/Real(2.);
+
755 }
+
756 }
+
757 else {//obtuse at node j or j+1.
+
758 return triangle_area/Real(4.);
+
759 }
+
760
761 }
-
762 else {//obtuse at node j or j+1.
-
763 return triangle_area/Real(4.);
-
764 }
-
765
-
766 }
-
767
-
768 //unit tested
-
770
-
779 [[deprecated("This function is deprecated and will be removed in a future release. mixed_area, which does not take precalculated cotangents, performs expensive calculations! Use the alternative mixed_area function!")]]
-
-
780 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real const& triangle_area)
-
781 {
- -
783
-
784 Real cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
-
785 Real cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
-
786 if ((cot_at_j>Real(0.)) && (cot_at_j_p_1>Real(0.))) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
-
787 if (lij.dot(lij_p_1)>Real(0.)) { // cos at i is positive i.e. angle at i is not obtuse
-
788 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/8.;
-
789 }
-
790 else {//obtuse at node i.
-
791 return triangle_area/Real(2.);
-
792 }
-
793 }
-
794 else {//obtuse at node j or j+1.
-
795 return triangle_area/Real(4.);
-
796 }
-
797
-
798 }
+
762
+
763 //unit tested
+
765
+
774 [[deprecated("This function is deprecated and will be removed in a future release. mixed_area, which does not take precalculated cotangents, performs expensive calculations! Use the alternative mixed_area function!")]]
+
+
775 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real const& triangle_area)
+
776 {
+ +
778
+
779 Real cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
+
780 Real cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
+
781 if ((cot_at_j>Real(0.)) && (cot_at_j_p_1>Real(0.))) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
+
782 if (lij.dot(lij_p_1)>Real(0.)) { // cos at i is positive i.e. angle at i is not obtuse
+
783 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/8.;
+
784 }
+
785 else {//obtuse at node i.
+
786 return triangle_area/Real(2.);
+
787 }
+
788 }
+
789 else {//obtuse at node j or j+1.
+
790 return triangle_area/Real(4.);
+
791 }
+
792
+
793 }
-
799
-
801
-
- -
810 {
- -
812 for (auto const& nn_id: nodes_[node_id].nn_ids) {
-
813 trg += nodes_[nn_id];
-
814 }
-
815 return trg;
-
816 }
+
794
+
796
+
+ +
805 {
+ +
807 for (auto const& nn_id: nodes_[node_id].nn_ids) {
+
808 trg += nodes_[nn_id];
+
809 }
+
810 return trg;
+
811 }
-
817
-
819
-
- -
826 {
- -
828 update_two_ring_geometry_on_a_boundary_free_triangulation(node_id);
-
829 }
- -
831 update_two_ring_geometry_on_a_boundary_triangulation(node_id);
-
832 }
-
833 else {
- -
835 "Triangulation type is not supported!");
-
836 }
-
837 };
+
812
+
814
+
+ +
821 {
+ +
823 update_two_ring_geometry_on_a_boundary_free_triangulation(node_id);
+
824 }
+ +
826 update_two_ring_geometry_on_a_boundary_triangulation(node_id);
+
827 }
+
828 else {
+ +
830 "Triangulation type is not supported!");
+
831 }
+
832 };
-
838
-
839 // unit-tested
-
841
-
- -
856 {
-
857 vec3<Real> displ = {0, 0, 0};
-
858 for (auto& node: nodes_.data) {
-
859 displ[0] = node.pos[0]*(x_stretch - 1);
-
860 displ[1] = node.pos[1]*(y_stretch - 1);
-
861 displ[2] = node.pos[2]*(z_stretch - 1);
-
862 move_node(node.id, displ);
-
863 }
-
864 }
+
833
+
834 // unit-tested
+
836
+
+ +
851 {
+
852 vec3<Real> displ = {0, 0, 0};
+
853 for (auto& node: nodes_.data) {
+
854 displ[0] = node.pos[0]*(x_stretch - 1);
+
855 displ[1] = node.pos[1]*(y_stretch - 1);
+
856 displ[2] = node.pos[2]*(z_stretch - 1);
+
857 move_node(node.id, displ);
+
858 }
+
859 }
-
865
-
866 //Todo unittest
-
868
-
- -
889 Index cnn_0, Index cnn_1) const
-
890 {
- -
892 diamond_geometry += nodes_[nn_id];
-
893 diamond_geometry += nodes_[cnn_0];
-
894 diamond_geometry += nodes_[cnn_1];
-
895 return diamond_geometry;
-
896 };
+
860
+
861 //Todo unittest
+
863
+
+ +
884 Index cnn_0, Index cnn_1) const
+
885 {
+ +
887 diamond_geometry += nodes_[nn_id];
+
888 diamond_geometry += nodes_[cnn_0];
+
889 diamond_geometry += nodes_[cnn_1];
+
890 return diamond_geometry;
+
891 };
-
897
-
898 //Todo unittest
-
900
-
-
919 void update_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
-
920 {
- - - - -
925 };
+
892
+
893 //Todo unittest
+
895
+
+
914 void update_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
+
915 {
+ + + + +
920 };
-
926
-
927 // Const Viewer Functions
+
921
+
922 // Const Viewer Functions
+
924
+
927 [[nodiscard]] Index size() const { return nodes_.size(); }
929
-
932 [[nodiscard]] Index size() const { return nodes_.size(); }
-
934
-
941 const Node<Real, Index>& operator[](Index idx) const { return nodes_.data.at(idx); }
+
936 const Node<Real, Index>& operator[](Index idx) const { return nodes_.data.at(idx); }
+
938
+
941 const Nodes<Real, Index>& nodes() const { return nodes_; }
943
-
946 const Nodes<Real, Index>& nodes() const { return nodes_; }
-
948
-
954 [[nodiscard]] Json make_egg_data() const { return nodes_.make_data(); }
-
956
-
959 [[nodiscard]] const Geometry<Real, Index>& global_geometry() const { return global_geometry_; }
-
960
-
961 //Todo unittest
-
963
-
- -
968 {
- -
970 global_geometry_ = empty;
-
971 for (auto node_id: bulk_nodes_ids) {
- -
973 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
-
974 }
-
975 for (auto node_id: boundary_nodes_ids_set_) {
- -
977 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
-
978 }
-
979 }
+
949 [[nodiscard]] Json make_egg_data() const { return nodes_.make_data(); }
+
951
+
954 [[nodiscard]] const Geometry<Real, Index>& global_geometry() const { return global_geometry_; }
+
955
+
956 //Todo unittest
+
958
+
+ +
963 {
+ +
965 global_geometry_ = empty;
+
966 for (auto node_id: bulk_nodes_ids) {
+ +
968 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
+
969 }
+
970 for (auto node_id: boundary_nodes_ids_set_) {
+ +
972 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
+
973 }
+
974 }
-
980
-
982
-
-
986 std::set<Index> boundary_nodes_ids_set() const {
-
987 static_assert(triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION, "This function is only implemented for PLANAR_TRIANGULATION.");
-
988 return boundary_nodes_ids_set_;
-
989 }
+
975
+
977
+
+
981 std::set<Index> boundary_nodes_ids_set() const {
+
982 static_assert(triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION, "This function is only implemented for PLANAR_TRIANGULATION.");
+
983 return boundary_nodes_ids_set_;
+
984 }
-
990
-
991 //Todo unittest
-
993
-
- -
1000 update_nn_distance_vectors(node_id);
-
1001 }
+
985
+
986 //Todo unittest
+
988
+
+ +
995 update_nn_distance_vectors(node_id);
+
996 }
-
1002
-
1003#ifdef TESTING_FLIPPY_TRIANGULATION_ndh6jclc0qnp274b
-
1004public:
-
1005#else
-
1006private:
-
1007#endif
-
1008 Real R_initial;
-
1009 Nodes<Real, Index> nodes_;
-
1010 std::vector<Index> bulk_nodes_ids;
-
1011 Geometry<Real, Index> global_geometry_;
-
1012 Geometry<Real, Index> pre_update_geometry, post_update_geometry;
-
1013 mutable vec3<Real> l0_, l1_;
-
1014 Real verlet_radius{};
-
1015 Real verlet_radius_squared{};
-
1016 std::set<Index> boundary_nodes_ids_set_;
-
1017
-
1018 //unit tested
-
1019 void initiate_advanced_geometry(){
-
1020 initiate_distance_vectors();
- -
1022 set_verlet_radius(verlet_radius);
- -
1024 }
-
1025
-
1026 void update_two_ring_geometry_on_a_boundary_free_triangulation(Index node_id){
- -
1028 for (auto nn_id: nodes_.nn_ids(node_id)) {
- -
1030 }
-
1031 }
-
1032 void update_two_ring_geometry_on_a_boundary_triangulation(Index node_id){
-
1033 if(boundary_nodes_ids_set_.contains(node_id)){
- -
1035 }else{
- -
1037 }
-
1038
-
1039 for (auto nn_id: nodes_.nn_ids(node_id)) {
-
1040 if(boundary_nodes_ids_set_.contains(nn_id)){
- -
1042 }else{
- -
1044 }
-
1045 }
-
1046 }
-
1047
-
1048 //unit tested
-
1049 void scale_all_nodes_to_R_init()
-
1050 {
-
1051 static_assert(triangulation_type==SPHERICAL_TRIANGULATION, "This function is only well defined for a spherical triangulation");
-
1052 vec3<Real> diff;
-
1053 vec3<Real> mass_center = calculate_mass_center();
-
1054 for (Index i = 0; i<nodes_.size(); ++i) {
-
1055 diff = nodes_[i].pos - mass_center;
-
1056 diff.scale(R_initial/diff.norm());
-
1057 diff += mass_center;
-
1058 nodes_.set_pos(i, diff);
-
1059 }
-
1060
-
1061 }
-
1062
-
1064 void update_nn_distance_vectors(Index node_id)
-
1065 {
-
1073 for (Index i = 0; auto nn_id: nodes_.nn_ids(node_id)) {
-
1074 nodes_.set_nn_distance(node_id, i, nodes_.pos(nn_id) - nodes_.pos(node_id));
-
1075 ++i;
-
1076 }
-
1077 }
-
1078
-
1090 Real cot_alphas_sum(Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
-
1091 {
-
1096 l0_ = nodes_[node_id].pos - nodes_[cnn_0].pos;
-
1097 l1_ = nodes_[nn_id].pos - nodes_[cnn_0].pos;
-
1098
-
1099 Real cot_sum = cot_between_vectors(l0_, l1_);
-
1100 l0_ = nodes_[node_id].pos - nodes_[cnn_1].pos;
-
1101 l1_ = nodes_[nn_id].pos - nodes_[cnn_1].pos;
-
1102
-
1103 cot_sum += cot_between_vectors(l0_, l1_);
-
1104 return cot_sum;
-
1105 }
-
1106
-
1107 static Real cot_between_vectors(vec3<Real> const& v1, vec3<Real> const& v2)
-
1108 {
-
1109 return v1.dot(v2)/(v1.cross(v2).norm());
-
1110 };
-
1111
-
1112 //unit tested
-
1113 [[nodiscard]] std::vector<Index> order_nn_ids(Index node_id) const
-
1114 {
-
1115 std::vector<Index> const& nn_ids = nodes_[node_id].nn_ids;
-
1116 auto common_nn_ids = two_common_neighbours(node_id, nn_ids[0]);
-
1117 std::vector<Index> ordered_nn_ids{common_nn_ids[0], nn_ids[0], common_nn_ids[1]};
-
1118
-
1119 Index nn_id;
-
1120 for (Index i = 0; i<(Index) nodes_[node_id].nn_ids.size() - 3; ++i) {
-
1121 nn_id = ordered_nn_ids[ordered_nn_ids.size() - 1];
-
1122 common_nn_ids = two_common_neighbours(node_id, nn_id);
-
1123 if (is_member(ordered_nn_ids, common_nn_ids[0])) {
-
1124 ordered_nn_ids.push_back(common_nn_ids[1]);
-
1125 }
-
1126 else {
-
1127 ordered_nn_ids.push_back(common_nn_ids[0]);
-
1128 }
-
1129 }
-
1130
-
1131 return ordered_nn_ids;
-
1132 }
-
1133
-
1134 //unit tested
-
1135 void orient_surface_of_a_sphere()
-
1136 {
-
1147 static_assert(triangulation_type==SPHERICAL_TRIANGULATION, "This function is only well defined for a spherical triangulation");
-
1148 std::vector<Index> nn_ids_temp;
-
1149 vec3<Real> li0, li1;
-
1150 vec3<Real> mass_center = calculate_mass_center();
-
1151 for (Index i = 0; i<nodes_.size(); ++i) { //ToDo modernize this loop
-
1152 nn_ids_temp = order_nn_ids(i);
-
1153 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[i].pos;
-
1154 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[i].pos;
-
1155 if ((li0.cross(li1)).dot(nodes_[i].pos - mass_center)<0) {
-
1156 std::reverse(nn_ids_temp.begin(), nn_ids_temp.end());
-
1157 }
-
1158 nodes_.set_nn_ids(i, nn_ids_temp);
-
1159 }
-
1160 }
-
1161
-
1162 void orient_plane()
-
1163 {
-
1174 static_assert(triangulation_type == EXPERIMENTAL_PLANAR_TRIANGULATION, "This function is only well defined for a planar triangulation");
-
1175 std::vector<Index> nn_ids_temp;
-
1176 vec3<Real> li0, li1;
-
1177 vec3<Real> mass_center = calculate_mass_center();
-
1178 mass_center.z+=10;
-
1179 for (Index node_id = 0; node_id < nodes_.size(); ++node_id) { //ToDo modernize this loop
-
1180 if(boundary_nodes_ids_set_.contains(node_id)){
-
1181 continue;
-
1182 }
-
1183 nn_ids_temp = order_nn_ids(node_id);
-
1184 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[node_id].pos;
-
1185 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[node_id].pos;
-
1186 if ((li0.cross(li1)).dot(nodes_[node_id].pos - mass_center) < 0) {
-
1187 std::reverse(nn_ids_temp.begin(), nn_ids_temp.end());
-
1188 }
-
1189 nodes_.set_nn_ids(node_id, nn_ids_temp);
-
1190 }
-
1191
-
1192 }
+
997
+
998#ifdef TESTING_FLIPPY_TRIANGULATION_ndh6jclc0qnp274b
+
999public:
+
1000#else
+
1001private:
+
1002#endif
+
1003 Real R_initial;
+
1004 Nodes<Real, Index> nodes_;
+
1005 std::vector<Index> bulk_nodes_ids;
+
1006 Geometry<Real, Index> global_geometry_;
+
1007 Geometry<Real, Index> pre_update_geometry, post_update_geometry;
+
1008 mutable vec3<Real> l0_, l1_;
+
1009 Real verlet_radius{};
+
1010 Real verlet_radius_squared{};
+
1011 std::set<Index> boundary_nodes_ids_set_;
+
1012
+
1013 //unit tested
+
1014 void initiate_advanced_geometry(){
+
1015 initiate_distance_vectors();
+ +
1017 set_verlet_radius(verlet_radius);
+ +
1019 }
+
1020
+
1021 void update_two_ring_geometry_on_a_boundary_free_triangulation(Index node_id){
+ +
1023 for (auto nn_id: nodes_.nn_ids(node_id)) {
+ +
1025 }
+
1026 }
+
1027 void update_two_ring_geometry_on_a_boundary_triangulation(Index node_id){
+
1028 if(boundary_nodes_ids_set_.contains(node_id)){
+ +
1030 }else{
+ +
1032 }
+
1033
+
1034 for (auto nn_id: nodes_.nn_ids(node_id)) {
+
1035 if(boundary_nodes_ids_set_.contains(nn_id)){
+ +
1037 }else{
+ +
1039 }
+
1040 }
+
1041 }
+
1042
+
1043 //unit tested
+
1044 void scale_all_nodes_to_R_init()
+
1045 {
+
1046 static_assert(triangulation_type==SPHERICAL_TRIANGULATION, "This function is only well defined for a spherical triangulation");
+
1047 vec3<Real> diff;
+
1048 vec3<Real> mass_center = calculate_mass_center();
+
1049 for (Index i = 0; i<nodes_.size(); ++i) {
+
1050 diff = nodes_[i].pos - mass_center;
+
1051 diff.scale(R_initial/diff.norm());
+
1052 diff += mass_center;
+
1053 nodes_.set_pos(i, diff);
+
1054 }
+
1055
+
1056 }
+
1057
+
1059 void pure_node_move(Index node_id, vec3<Real> const& displacement_vector)
+
1060 {
+
1061 nodes_.displace(node_id, displacement_vector);
+
1062 update_two_ring_geometry(node_id);
+
1063 }
+
1064
+
1066 void update_nn_distance_vectors(Index node_id)
+
1067 {
+
1075 for (Index i = 0; auto nn_id: nodes_.nn_ids(node_id)) {
+
1076 nodes_.set_nn_distance(node_id, i, nodes_.pos(nn_id) - nodes_.pos(node_id));
+
1077 ++i;
+
1078 }
+
1079 }
+
1080
+
1092 Real cot_alphas_sum(Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
+
1093 {
+
1098 l0_ = nodes_[node_id].pos - nodes_[cnn_0].pos;
+
1099 l1_ = nodes_[nn_id].pos - nodes_[cnn_0].pos;
+
1100
+
1101 Real cot_sum = cot_between_vectors(l0_, l1_);
+
1102 l0_ = nodes_[node_id].pos - nodes_[cnn_1].pos;
+
1103 l1_ = nodes_[nn_id].pos - nodes_[cnn_1].pos;
+
1104
+
1105 cot_sum += cot_between_vectors(l0_, l1_);
+
1106 return cot_sum;
+
1107 }
+
1108
+
1109 static Real cot_between_vectors(vec3<Real> const& v1, vec3<Real> const& v2)
+
1110 {
+
1111 return v1.dot(v2)/(v1.cross(v2).norm());
+
1112 };
+
1113
+
1114 //unit tested
+
1115 [[nodiscard]] std::vector<Index> order_nn_ids(Index node_id) const
+
1116 {
+
1117 std::vector<Index> const& nn_ids = nodes_[node_id].nn_ids;
+
1118 auto common_nn_ids = two_common_neighbours(node_id, nn_ids[0]);
+
1119 std::vector<Index> ordered_nn_ids{common_nn_ids[0], nn_ids[0], common_nn_ids[1]};
+
1120
+
1121 Index nn_id;
+
1122 for (Index i = 0; i<(Index) nodes_[node_id].nn_ids.size() - 3; ++i) {
+
1123 nn_id = ordered_nn_ids[ordered_nn_ids.size() - 1];
+
1124 common_nn_ids = two_common_neighbours(node_id, nn_id);
+
1125 if (is_member(ordered_nn_ids, common_nn_ids[0])) {
+
1126 ordered_nn_ids.push_back(common_nn_ids[1]);
+
1127 }
+
1128 else {
+
1129 ordered_nn_ids.push_back(common_nn_ids[0]);
+
1130 }
+
1131 }
+
1132
+
1133 return ordered_nn_ids;
+
1134 }
+
1135
+
1136 //unit tested
+
1137 void orient_surface_of_a_sphere()
+
1138 {
+
1149 static_assert(triangulation_type==SPHERICAL_TRIANGULATION, "This function is only well defined for a spherical triangulation");
+
1150 std::vector<Index> nn_ids_temp;
+
1151 vec3<Real> li0, li1;
+
1152 vec3<Real> mass_center = calculate_mass_center();
+
1153 for (Index i = 0; i<nodes_.size(); ++i) { //ToDo modernize this loop
+
1154 nn_ids_temp = order_nn_ids(i);
+
1155 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[i].pos;
+
1156 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[i].pos;
+
1157 if ((li0.cross(li1)).dot(nodes_[i].pos - mass_center)<0) {
+
1158 std::reverse(nn_ids_temp.begin(), nn_ids_temp.end());
+
1159 }
+
1160 nodes_.set_nn_ids(i, nn_ids_temp);
+
1161 }
+
1162 }
+
1163
+
1164 void orient_plane()
+
1165 {
+
1176 static_assert(triangulation_type == EXPERIMENTAL_PLANAR_TRIANGULATION, "This function is only well defined for a planar triangulation");
+
1177 std::vector<Index> nn_ids_temp;
+
1178 vec3<Real> li0, li1;
+
1179 vec3<Real> mass_center = calculate_mass_center();
+
1180 mass_center.z+=10;
+
1181 for (Index node_id = 0; node_id < nodes_.size(); ++node_id) { //ToDo modernize this loop
+
1182 if(boundary_nodes_ids_set_.contains(node_id)){
+
1183 continue;
+
1184 }
+
1185 nn_ids_temp = order_nn_ids(node_id);
+
1186 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[node_id].pos;
+
1187 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[node_id].pos;
+
1188 if ((li0.cross(li1)).dot(nodes_[node_id].pos - mass_center) < 0) {
+
1189 std::reverse(nn_ids_temp.begin(), nn_ids_temp.end());
+
1190 }
+
1191 nodes_.set_nn_ids(node_id, nn_ids_temp);
+
1192 }
1193
-
1194 // Todo unittest
-
1195 void initiate_distance_vectors()
-
1196 {
-
1197 for (Node<Real, Index>& node: nodes_.data) {
-
1198 node.nn_distances.resize(node.nn_ids.size());
-
1199 update_nn_distance_vectors(node.id);
-
1200 }
-
1201 }
-
1202
-
1203 //unit tested
-
1204 std::vector<Index> common_neighbours(Index node_id_0, Index node_id_1) const
-
1205 {
-
1206 std::vector<Index> res;
-
1207 res.reserve(2);
-
1208 std::vector<Index> nn_ids0 = nodes_[node_id_0].nn_ids;
-
1209 std::vector<Index> nn_ids1 = nodes_[node_id_1].nn_ids;
-
1210 std::sort(nn_ids0.begin(), nn_ids0.end());
-
1211 std::sort(nn_ids1.begin(), nn_ids1.end());
-
1212 std::set_intersection(nn_ids0.begin(), nn_ids0.end(),
-
1213 nn_ids1.begin(), nn_ids1.end(),
-
1214 std::back_inserter(res));
-
1215 return res;
-
1216 }
-
1217
-
1218 //unit tested
-
1219 std::array<Index, 2> two_common_neighbours(Index node_id_0, Index node_id_1) const
-
1220 {
-
1221 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
-
1222 std::array<Index, 2> res{vln, vln};
-
1223 //todo safe remove const& in the loop
-
1224 for (auto res_p = res.begin(); auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
-
1225 if (res_p==res.end()) { break; }
-
1226 else {
-
1227 if (is_member(nodes_[node_id_1].nn_ids, n0_nn_id)) {
-
1228 *res_p = n0_nn_id;
-
1229 ++res_p;
-
1230 }
-
1231 }
-
1232 }
-
1233 return res;
-
1234 }
-
1235
-
1236 std::array<Index, 2> fast_two_common_neighbours(Index node_id_0, Index node_id_1) const
-
1237 {
-
1238
-
1239 Index j = nodes_.find_nns_loc_idx(node_id_0, node_id_1);
-
1240 indexing_number auto nn_number = (Index)nodes_.nn_ids(node_id_0).size();
-
1241 Index j_p_1 = Neighbors<Index>::plus_one(j, nn_number);
-
1242 Index j_m_1 = Neighbors<Index>::plus_one(j, nn_number);
-
1243 std::array<Index, 2> res{nodes_.nn_id(node_id_0,j_m_1),
-
1244 nodes_.nn_id(node_id_0,j_p_1)};
-
1245 return res;
-
1246 }
-
1247
-
1248 std::array<Index, 2> two_common_neighbour_positions(Index node_id_0, Index node_id_1) const
-
1249 {
-
1250 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
-
1251 std::array<Index, 2> res{vln, vln};
-
1252 short counter = 0;
-
1253 for (auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
-
1254 if (counter==2) { break; }
-
1255 else {
-
1256 auto pos = std::find(nodes_[node_id_1].nn_ids.begin(), nodes_[node_id_1].nn_ids.end(), n0_nn_id);
-
1257 if (pos!=nodes_[node_id_1].nn_ids.end()) {
-
1258 res[counter] = (Index) (pos - nodes_[node_id_1].nn_ids.begin());
-
1259 ++counter;
-
1260 }
-
1261 }
-
1262 }
-
1263 return res;
-
1264 }
-
1265
-
1266 //Todo unittest
-
1267 //unit tested
-
1268 Neighbors<Index> previous_and_next_neighbour_local_ids(Index node_id, Index nn_id) const
-
1269 {
-
1280 auto const& nn_ids_view = nodes_[node_id].nn_ids;
-
1281 auto const local_nn_id = (Index) (std::find(nn_ids_view.begin(), nn_ids_view.end(), nn_id)
-
1282 - nn_ids_view.begin());
-
1283 auto const nn_number = (Index) nn_ids_view.size();
-
1284 return {.j_m_1= Neighbors<Index>::minus_one(local_nn_id, nn_number),
-
1285 .j_p_1 = Neighbors<Index>::plus_one(local_nn_id, nn_number)};
-
1286 }
-
1287
-
1288 //unit tested
-
1289 Neighbors<Index> previous_and_next_neighbour_global_ids(Index node_id, Index nn_id) const
-
1290 {
-
1301 auto const& nn_ids_view = nodes_[node_id].nn_ids;
-
1302 Neighbors<Index> neighbors = previous_and_next_neighbour_local_ids(node_id, nn_id);
-
1303 return {.j_m_1=nn_ids_view[neighbors.j_m_1], .j_p_1=nn_ids_view[neighbors.j_p_1]};
-
1304 }
-
1305
-
1306 void update_global_geometry(Geometry<Real, Index> const& lg_old, Geometry<Real, Index> const& lg_new)
-
1307 {
-
1308 global_geometry_ += lg_new - lg_old;
-
1309 }
-
1310
-
1311 // Todo unittest
-
1312 void delete_connection_between_nodes_of_old_edge(Index old_node_id0, Index old_node_id1)
-
1313 {
-
1314 nodes_[old_node_id0].pop_nn(old_node_id1);
-
1315 nodes_[old_node_id1].pop_nn(old_node_id0);
-
1316 }
-
1317
-
1318 static Nodes<Real, Index> triangulate_sphere_nodes(Index n_iter){
-
1319 std::unordered_map<std::string,fp::implementation::SimpleNodeData<Real, Index>> simpleNodeData =
-
1320 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_corner_nodes();
-
1321 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_face_nodes(simpleNodeData, n_iter);
-
1322
-
1323 fp::indexing_number auto nNewNodesOnEdge = static_cast<Index>(n_iter - 1);
-
1324 fp::indexing_number auto nBulk = static_cast<Index>(nNewNodesOnEdge*(nNewNodesOnEdge+1)/2);
-
1325 fp::indexing_number auto nNodes = static_cast<Index>(fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_NODEs
-
1326 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_EDGEs*n_iter
-
1327 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_FACEs*nBulk);
-
1328 std::vector<Node<Real, Index>> nodeData(nNodes);
-
1329 for(Index id; auto & nodeEl :simpleNodeData){
-
1330 id = nodeEl.second.id;
-
1331 nodeData[id].id = nodeEl.second.id;
-
1332 nodeData[id].pos = nodeEl.second.pos;
-
1333 for(auto const& hash: nodeEl.second.nn_hashes){
-
1334 nodeData[id].nn_ids.push_back(simpleNodeData[hash].id);
-
1335 }
-
1336 }
-
1337 return Nodes<Real, Index>(nodeData);
-
1338 }
-
1339
-
1340 void triangulate_planar_nodes(Index n_length, Index n_width, Real length, Real width){
-
1341 Index N_nodes = n_length*n_width;
-
1342 fp::implementation::PlanarTriangulation<Real, Index> triang(n_length, n_width);
-
1343// Nodes<Real, Index> bulk_nodes;
-
1344 Node<Real, Index> node{};
-
1345 node.curvature_vec=fp::vec3<Real>{0.,0.,0.};
-
1346 for(Index node_id=0; node_id<N_nodes; ++node_id){
-
1347 node.id = node_id;
-
1348 node.pos = fp::vec3<Real>{
-
1349 triang.id_to_j(node_id)*length/n_length,
-
1350 triang.id_to_i(node_id)*width/n_width,
-
1351 0.
-
1352 };
-
1353
-
1354 node.nn_ids = triang.nn_ids[node_id];
-
1355 nodes_.data.push_back(node);
-
1356 if(triang.is_bulk[node_id]){bulk_nodes_ids.push_back(node_id);}
-
1357 else{boundary_nodes_ids_set_.insert(node_id);}
-
1358 }
-
1359 }
-
1360 void all_nodes_are_bulk(){
-
1361 for(auto const& node: nodes_){
-
1362 bulk_nodes_ids.push_back(node.id);
-
1363 }
-
1364 }
-
1365
-
1366
-
1367 //unit tested
-
1368 BondFlipData<Index> flip_bulk_bond(Index node_id, Index nn_id,
-
1369 Real min_bond_length_square,
-
1370 Real max_bond_length_square) {
-
1371 BondFlipData<Index> bfd{};
-
1372 if (nodes_.nn_ids(node_id).size() > BOND_DONATION_CUTOFF) {
-
1373 if (nodes_.nn_ids(nn_id).size() > BOND_DONATION_CUTOFF) {
-
1374 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
-
1375 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
-
1376 if ((bond_length_square < max_bond_length_square) && (bond_length_square > min_bond_length_square)) {
-
1377 if (common_neighbours(node_id, nn_id).size() == 2) {
-
1378 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
-
1379 common_nns.j_p_1);
-
1380 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1381 if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) {
-
1382 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1383 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
-
1384 common_nns.j_p_1);
-
1385 update_global_geometry(pre_update_geometry, post_update_geometry);
-
1386 } else {
-
1387 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
-
1388 bfd.flipped = false;
-
1389 }
-
1390 }
-
1391 }
-
1392 }
-
1393 }
-
1394 return bfd;
-
1395 }
-
1396
-
1398 BondFlipData <Index>
-
1399 flip_bond_in_quadrilateral(Index node_id, Index nn_id, const Neighbors <Index> &common_nns,
-
1400 Real min_bond_length_square, Real max_bond_length_square) {
-
1401 BondFlipData<Index> bfd{};
-
1402 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
-
1403 if ((bond_length_square<max_bond_length_square) && (bond_length_square>min_bond_length_square)) {
-
1404 if (common_neighbours(node_id, nn_id).size() == 2) {
-
1405 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1406 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1407 if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) {
-
1408 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1409 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
-
1410 common_nns.j_p_1);
-
1411 update_global_geometry(pre_update_geometry, post_update_geometry);
-
1412 }
-
1413 else {
-
1414 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
-
1415 bfd.flipped = false;
-
1416 }
-
1417 }
-
1418 }
-
1419 return bfd;
-
1420 }
-
1421
-
1422};
-
+
1194 }
+
1195
+
1196 // Todo unittest
+
1197 void initiate_distance_vectors()
+
1198 {
+
1199 for (Node<Real, Index>& node: nodes_.data) {
+
1200 node.nn_distances.resize(node.nn_ids.size());
+
1201 update_nn_distance_vectors(node.id);
+
1202 }
+
1203 }
+
1204
+
1205 //unit tested
+
1206 std::vector<Index> common_neighbours(Index node_id_0, Index node_id_1) const
+
1207 {
+
1208 std::vector<Index> res;
+
1209 res.reserve(2);
+
1210 std::vector<Index> nn_ids0 = nodes_[node_id_0].nn_ids;
+
1211 std::vector<Index> nn_ids1 = nodes_[node_id_1].nn_ids;
+
1212 std::sort(nn_ids0.begin(), nn_ids0.end());
+
1213 std::sort(nn_ids1.begin(), nn_ids1.end());
+
1214 std::set_intersection(nn_ids0.begin(), nn_ids0.end(),
+
1215 nn_ids1.begin(), nn_ids1.end(),
+
1216 std::back_inserter(res));
+
1217 return res;
+
1218 }
+
1219
+
1220 //unit tested
+
1221 std::array<Index, 2> two_common_neighbours(Index node_id_0, Index node_id_1) const
+
1222 {
+
1223 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
+
1224 std::array<Index, 2> res{vln, vln};
+
1225 //todo safe remove const& in the loop
+
1226 for (auto res_p = res.begin(); auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
+
1227 if (res_p==res.end()) { break; }
+
1228 else {
+
1229 if (is_member(nodes_[node_id_1].nn_ids, n0_nn_id)) {
+
1230 *res_p = n0_nn_id;
+
1231 ++res_p;
+
1232 }
+
1233 }
+
1234 }
+
1235 return res;
+
1236 }
+
1237
+
1238 std::array<Index, 2> fast_two_common_neighbours(Index node_id_0, Index node_id_1) const
+
1239 {
+
1240
+
1241 Index j = nodes_.find_nns_loc_idx(node_id_0, node_id_1);
+
1242 indexing_number auto nn_number = (Index)nodes_.nn_ids(node_id_0).size();
+
1243 Index j_p_1 = Neighbors<Index>::plus_one(j, nn_number);
+
1244 Index j_m_1 = Neighbors<Index>::plus_one(j, nn_number);
+
1245 std::array<Index, 2> res{nodes_.nn_id(node_id_0,j_m_1),
+
1246 nodes_.nn_id(node_id_0,j_p_1)};
+
1247 return res;
+
1248 }
+
1249
+
1250 std::array<Index, 2> two_common_neighbour_positions(Index node_id_0, Index node_id_1) const
+
1251 {
+
1252 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
+
1253 std::array<Index, 2> res{vln, vln};
+
1254 short counter = 0;
+
1255 for (auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
+
1256 if (counter==2) { break; }
+
1257 else {
+
1258 auto pos = std::find(nodes_[node_id_1].nn_ids.begin(), nodes_[node_id_1].nn_ids.end(), n0_nn_id);
+
1259 if (pos!=nodes_[node_id_1].nn_ids.end()) {
+
1260 res[counter] = (Index) (pos - nodes_[node_id_1].nn_ids.begin());
+
1261 ++counter;
+
1262 }
+
1263 }
+
1264 }
+
1265 return res;
+
1266 }
+
1267
+
1268 //Todo unittest
+
1269 //unit tested
+
1270 Neighbors<Index> previous_and_next_neighbour_local_ids(Index node_id, Index nn_id) const
+
1271 {
+
1282 auto const& nn_ids_view = nodes_[node_id].nn_ids;
+
1283 auto const local_nn_id = (Index) (std::find(nn_ids_view.begin(), nn_ids_view.end(), nn_id)
+
1284 - nn_ids_view.begin());
+
1285 auto const nn_number = (Index) nn_ids_view.size();
+
1286 return {.j_m_1= Neighbors<Index>::minus_one(local_nn_id, nn_number),
+
1287 .j_p_1 = Neighbors<Index>::plus_one(local_nn_id, nn_number)};
+
1288 }
+
1289
+
1290 //unit tested
+
1291 Neighbors<Index> previous_and_next_neighbour_global_ids(Index node_id, Index nn_id) const
+
1292 {
+
1303 auto const& nn_ids_view = nodes_[node_id].nn_ids;
+
1304 Neighbors<Index> neighbors = previous_and_next_neighbour_local_ids(node_id, nn_id);
+
1305 return {.j_m_1=nn_ids_view[neighbors.j_m_1], .j_p_1=nn_ids_view[neighbors.j_p_1]};
+
1306 }
+
1307
+
1308 void update_global_geometry(Geometry<Real, Index> const& lg_old, Geometry<Real, Index> const& lg_new)
+
1309 {
+
1310 global_geometry_ += lg_new - lg_old;
+
1311 }
+
1312
+
1313 // Todo unittest
+
1314 void delete_connection_between_nodes_of_old_edge(Index old_node_id0, Index old_node_id1)
+
1315 {
+
1316 nodes_[old_node_id0].pop_nn(old_node_id1);
+
1317 nodes_[old_node_id1].pop_nn(old_node_id0);
+
1318 }
+
1319
+
1320 static Nodes<Real, Index> triangulate_sphere_nodes(Index n_iter){
+
1321 std::unordered_map<std::string,fp::implementation::SimpleNodeData<Real, Index>> simpleNodeData =
+
1322 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_corner_nodes();
+
1323 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_face_nodes(simpleNodeData, n_iter);
+
1324
+
1325 fp::indexing_number auto nNewNodesOnEdge = static_cast<Index>(n_iter - 1);
+
1326 fp::indexing_number auto nBulk = static_cast<Index>(nNewNodesOnEdge*(nNewNodesOnEdge+1)/2);
+
1327 fp::indexing_number auto nNodes = static_cast<Index>(fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_NODEs
+
1328 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_EDGEs*n_iter
+
1329 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_FACEs*nBulk);
+
1330 std::vector<Node<Real, Index>> nodeData(nNodes);
+
1331 for(Index id; auto & nodeEl :simpleNodeData){
+
1332 id = nodeEl.second.id;
+
1333 nodeData[id].id = nodeEl.second.id;
+
1334 nodeData[id].pos = nodeEl.second.pos;
+
1335 for(auto const& hash: nodeEl.second.nn_hashes){
+
1336 nodeData[id].nn_ids.push_back(simpleNodeData[hash].id);
+
1337 }
+
1338 }
+
1339 return Nodes<Real, Index>(nodeData);
+
1340 }
+
1341
+
1342 void triangulate_planar_nodes(Index n_length, Index n_width, Real length, Real width){
+
1343 Index N_nodes = n_length*n_width;
+
1344 fp::implementation::PlanarTriangulation<Real, Index> triang(n_length, n_width);
+
1345// Nodes<Real, Index> bulk_nodes;
+
1346 Node<Real, Index> node{};
+
1347 node.curvature_vec=fp::vec3<Real>{0.,0.,0.};
+
1348 for(Index node_id=0; node_id<N_nodes; ++node_id){
+
1349 node.id = node_id;
+
1350 node.pos = fp::vec3<Real>{
+
1351 triang.id_to_j(node_id)*length/n_length,
+
1352 triang.id_to_i(node_id)*width/n_width,
+
1353 0.
+
1354 };
+
1355
+
1356 node.nn_ids = triang.nn_ids[node_id];
+
1357 nodes_.data.push_back(node);
+
1358 if(triang.is_bulk[node_id]){bulk_nodes_ids.push_back(node_id);}
+
1359 else{boundary_nodes_ids_set_.insert(node_id);}
+
1360 }
+
1361 }
+
1362 void all_nodes_are_bulk(){
+
1363 for(auto const& node: nodes_){
+
1364 bulk_nodes_ids.push_back(node.id);
+
1365 }
+
1366 }
+
1367
+
1368
+
1369 //unit tested
+
1370 BondFlipData<Index> flip_bulk_bond(Index node_id, Index nn_id,
+
1371 Real min_bond_length_square,
+
1372 Real max_bond_length_square) {
+
1373 BondFlipData<Index> bfd{};
+
1374 if (nodes_.nn_ids(node_id).size() > BOND_DONATION_CUTOFF) {
+
1375 if (nodes_.nn_ids(nn_id).size() > BOND_DONATION_CUTOFF) {
+
1376 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
+
1377 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
+
1378 if ((bond_length_square < max_bond_length_square) && (bond_length_square > min_bond_length_square)) {
+
1379 if (common_neighbours(node_id, nn_id).size() == 2) {
+
1380 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
+
1381 common_nns.j_p_1);
+
1382 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1383 if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) {
+
1384 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1385 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
+
1386 common_nns.j_p_1);
+
1387 update_global_geometry(pre_update_geometry, post_update_geometry);
+
1388 } else {
+
1389 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
+
1390 bfd.flipped = false;
+
1391 }
+
1392 }
+
1393 }
+
1394 }
+
1395 }
+
1396 return bfd;
+
1397 }
+
1398
+
1400 BondFlipData <Index>
+
1401 flip_bond_in_quadrilateral(Index node_id, Index nn_id, const Neighbors <Index> &common_nns,
+
1402 Real min_bond_length_square, Real max_bond_length_square) {
+
1403 BondFlipData<Index> bfd{};
+
1404 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
+
1405 if ((bond_length_square<max_bond_length_square) && (bond_length_square>min_bond_length_square)) {
+
1406 if (common_neighbours(node_id, nn_id).size() == 2) {
+
1407 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1408 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1409 if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) {
+
1410 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1411 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
+
1412 common_nns.j_p_1);
+
1413 update_global_geometry(pre_update_geometry, post_update_geometry);
+
1414 }
+
1415 else {
+
1416 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
+
1417 bfd.flipped = false;
+
1418 }
+
1419 }
+
1420 }
+
1421 return bfd;
+
1422 }
1423
-
1424}
-
1425#endif //FLIPPY_TRIANGULATION_HPP
-
1426
+
1424};
+
+
1425
+
1426}
+
1427#endif //FLIPPY_TRIANGULATION_HPP
+
1428
This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o...
This file contains internal implementation details and is not part of the stable public api....
Implementation of Triangulation of two-dimensional surfaces in 3D.
Definition Triangulation.hpp:297
-
BondFlipData< Index > flip_bond_unchecked(Index node_id, Index nn_id, Index common_nn_j_m_1, Index common_nn_j_p_1)
Definition Triangulation.hpp:642
-
void emplace_before(Index center_node_id, Index anchor_id, Index new_value)
Adds a new node to the next neighbor list of a given node and calculates their mutual distance.
Definition Triangulation.hpp:515
-
void make_global_geometry()
Initiates the global geometry of the triangulation.
Definition Triangulation.hpp:967
-
void update_two_ring_geometry(Index node_id)
Updates the geometric quantities of the center node and its next neighbor nodes.
Definition Triangulation.hpp:825
-
Geometry< Real, Index > get_two_ring_geometry(Index node_id) const
Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes.
Definition Triangulation.hpp:809
-
static Real mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1)
The node-associated area inside a triangle.
Definition Triangulation.hpp:753
+
BondFlipData< Index > flip_bond_unchecked(Index node_id, Index nn_id, Index common_nn_j_m_1, Index common_nn_j_p_1)
Definition Triangulation.hpp:637
+
void emplace_before(Index center_node_id, Index anchor_id, Index new_value)
Adds a new node to the next neighbor list of a given node and calculates their mutual distance.
Definition Triangulation.hpp:510
+
void make_global_geometry()
Initiates the global geometry of the triangulation.
Definition Triangulation.hpp:962
+
void update_two_ring_geometry(Index node_id)
Updates the geometric quantities of the center node and its next neighbor nodes.
Definition Triangulation.hpp:820
+
Geometry< Real, Index > get_two_ring_geometry(Index node_id) const
Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes.
Definition Triangulation.hpp:804
+
static Real mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1)
The node-associated area inside a triangle.
Definition Triangulation.hpp:748
Triangulation(Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)
Constructor that can initiate a planar triangulation from scratch.
Definition Triangulation.hpp:353
-
const Node< Real, Index > & operator[](Index idx) const
Returns a constant reference to the node with the given id.
Definition Triangulation.hpp:941
-
void set_verlet_radius(Real R)
Set the radius of the Verlet list to a new value.
Definition Triangulation.hpp:432
-
void unflip_bond(Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
Un-flip a bond that was just flipped.
Definition Triangulation.hpp:615
-
void update_bulk_node_geometry(Index node_id)
Update the geometric quantities associated with the given node.
Definition Triangulation.hpp:662
+
const Node< Real, Index > & operator[](Index idx) const
Returns a constant reference to the node with the given id.
Definition Triangulation.hpp:936
+
void set_verlet_radius(Real R)
Set the radius of the Verlet list to a new value.
Definition Triangulation.hpp:428
+
void unflip_bond(Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
Un-flip a bond that was just flipped.
Definition Triangulation.hpp:610
+
void update_bulk_node_geometry(Index node_id)
Update the geometric quantities associated with the given node.
Definition Triangulation.hpp:657
static Triangulation< Real, Index, SPHERICAL_TRIANGULATION > experimental_load_sphere_from_stl(std::filesystem::path const &stl_file_path, Real verlet_radius_inp)
Special constructor that can initialize a triangulation with spherical topology from a binary stl stl...
Definition Triangulation.hpp:372
-
Index size() const
Returns the number of nodes in the triangulation.
Definition Triangulation.hpp:932
-
BondFlipData< Index > flip_bond(Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,...
Definition Triangulation.hpp:528
-
void scale_node_coordinates(Real x_stretch, Real y_stretch=1, Real z_stretch=1)
Method for stretching or squeezing the initial triangulation shape.
Definition Triangulation.hpp:855
-
std::set< Index > boundary_nodes_ids_set() const
Returns the ids of all nodes that are not on the boundary.
Definition Triangulation.hpp:986
-
void update_boundary_node_geometry(Index node_id)
Updates the local geometry of a boundary node (for triangulation types that have a boundary).
Definition Triangulation.hpp:999
+
Index size() const
Returns the number of nodes in the triangulation.
Definition Triangulation.hpp:927
+
BondFlipData< Index > flip_bond(Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,...
Definition Triangulation.hpp:523
+
void scale_node_coordinates(Real x_stretch, Real y_stretch=1, Real z_stretch=1)
Method for stretching or squeezing the initial triangulation shape.
Definition Triangulation.hpp:850
+
std::set< Index > boundary_nodes_ids_set() const
Returns the ids of all nodes that are not on the boundary.
Definition Triangulation.hpp:981
+
void update_boundary_node_geometry(Index node_id)
Updates the local geometry of a boundary node (for triangulation types that have a boundary).
Definition Triangulation.hpp:994
Triangulation(Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)
Constructor that can initiate a spherical triangulation from scratch.
Definition Triangulation.hpp:331
-
static std::tuple< Real, vec3< Real > > partial_voronoi_area_and_face_normal_of_node_in_a_triangle(vec3< Real > const &lij, vec3< Real > const &lij_p_1)
This function is deprecated!
Definition Triangulation.hpp:721
-
void update_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
Calculates and updates the geometric quantities of the diamond configuration of nodes associated with...
Definition Triangulation.hpp:919
-
void make_verlet_list()
Create a Verlet list.
Definition Triangulation.hpp:443
-
static Real mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real const &triangle_area)
This function is deprecated!
Definition Triangulation.hpp:780
-
const Geometry< Real, Index > & global_geometry() const
Information about the global geometric quantities of the triangulation, like global area,...
Definition Triangulation.hpp:959
-
void translate_all_nodes(vec3< Real > const &translation_vector)
Adds the same 3D vector to the positions of each node of the triangulation.
Definition Triangulation.hpp:466
+
static std::tuple< Real, vec3< Real > > partial_voronoi_area_and_face_normal_of_node_in_a_triangle(vec3< Real > const &lij, vec3< Real > const &lij_p_1)
This function is deprecated!
Definition Triangulation.hpp:716
+
void update_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
Calculates and updates the geometric quantities of the diamond configuration of nodes associated with...
Definition Triangulation.hpp:914
+
void make_verlet_list()
Create a Verlet list.
Definition Triangulation.hpp:439
+
static Real mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real const &triangle_area)
This function is deprecated!
Definition Triangulation.hpp:775
+
const Geometry< Real, Index > & global_geometry() const
Information about the global geometric quantities of the triangulation, like global area,...
Definition Triangulation.hpp:954
+
void translate_all_nodes(vec3< Real > const &translation_vector)
Adds the same 3D vector to the positions of each node of the triangulation.
Definition Triangulation.hpp:462
Triangulation(Json const &nodes_input, Real verlet_radius_inp)
Constructor that can re-initiate a triangulation from the stored data.
Definition Triangulation.hpp:311
-
Json make_egg_data() const
Creates a JSON object with the data of the triangulation.
Definition Triangulation.hpp:954
-
Geometry< Real, Index > calculate_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
Aggregates the geometric quantities of the diamond configuration of nodes associated with a bond flip...
Definition Triangulation.hpp:888
-
void move_node(Index node_id, vec3< Real > const &displacement_vector)
Move an individual node of the triangulation and update all the geometric quantities of the triangula...
Definition Triangulation.hpp:493
-
const Nodes< Real, Index > & nodes() const
Returns a constant reference to the underlying Nodes container.
Definition Triangulation.hpp:946
-
vec3< Real > calculate_mass_center() const
Calculate the area-weighted average of node positions.
Definition Triangulation.hpp:479
+
Json make_egg_data() const
Creates a JSON object with the data of the triangulation.
Definition Triangulation.hpp:949
+
Geometry< Real, Index > calculate_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
Aggregates the geometric quantities of the diamond configuration of nodes associated with a bond flip...
Definition Triangulation.hpp:883
+
void move_node(Index node_id, vec3< Real > const &displacement_vector)
Move an individual node of the triangulation and update all the geometric quantities of the triangula...
Definition Triangulation.hpp:489
+
const Nodes< Real, Index > & nodes() const
Returns a constant reference to the underlying Nodes container.
Definition Triangulation.hpp:941
+
vec3< Real > calculate_mass_center() const
Calculate the area-weighted average of node positions.
Definition Triangulation.hpp:475
Definition stlSerializer.hpp:123
Definition stlSerializer.hpp:66
Internal implementation of a 3D vector.
Definition vec3.hpp:43
diff --git a/docs/_triangulator_8hpp.html b/docs/_triangulator_8hpp.html index faa608f..d516222 100644 --- a/docs/_triangulator_8hpp.html +++ b/docs/_triangulator_8hpp.html @@ -113,6 +113,7 @@ #include <vector>
#include <unordered_set>
#include <unordered_map>
+#include <algorithm>
#include "custom_concepts.hpp"
#include "vec3.hpp"
@@ -120,28 +121,30 @@
- + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
diff --git a/docs/_triangulator_8hpp__incl.map b/docs/_triangulator_8hpp__incl.map index 9998a7f..dc3bfd7 100644 --- a/docs/_triangulator_8hpp__incl.map +++ b/docs/_triangulator_8hpp__incl.map @@ -1,24 +1,26 @@ - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/docs/_triangulator_8hpp__incl.md5 b/docs/_triangulator_8hpp__incl.md5 index 6bb3b53..ce2413b 100644 --- a/docs/_triangulator_8hpp__incl.md5 +++ b/docs/_triangulator_8hpp__incl.md5 @@ -1 +1 @@ -7f4c8e31facc18d4f0b45c88abd4eecb \ No newline at end of file +3148ede8803e99df05e772f0cda5d89f \ No newline at end of file diff --git a/docs/_triangulator_8hpp__incl.png b/docs/_triangulator_8hpp__incl.png index 28eb4c20ffb9e58465dbc816fdb29cf426732e6e..49b00bf0eb2c528123d34a6d1230918864802d48 100644 GIT binary patch literal 28115 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 S%Wz8@*;#dcwPF>k;Qs(u{7zK> literal 25669 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�}n?N1rhGd3E)espGZX)xqt1^Vo7lCAR7>u?;pH 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 b&$3+@4+~$#7*58&3qny>)mDjDGP(92_^nSb diff --git a/docs/_triangulator_8hpp_source.html b/docs/_triangulator_8hpp_source.html index 5f2ef08..87cf763 100644 --- a/docs/_triangulator_8hpp_source.html +++ b/docs/_triangulator_8hpp_source.html @@ -113,458 +113,459 @@
10#include <vector>
11#include <unordered_set>
12#include <unordered_map>
-
13#include "custom_concepts.hpp"
-
14#include "vec3.hpp"
-
15
+
13#include <algorithm>
+
14#include "custom_concepts.hpp"
+
15#include "vec3.hpp"
16
-
22#ifndef M_PI
-
23#define M_PI 3.14159265358979323846 /* pi */
-
24#endif
-
32namespace fp::implementation{
-
33
-
35template<floating_point_number Real, indexing_number Index>
-
36struct SimpleNodeData{
-
37 std::string hash{};
-
38 Index id{};
-
39 vec3<Real> pos{};
-
40 std::unordered_set<std::string> nn_hashes{};
-
41};
-
42
-
44template<floating_point_number Real, indexing_number Index>
-
45class IcosahedronSubTriangulation
-
46{
-
47public:
-
48 static std::string hash_node(Index c)
-
49 {
-
53 return std::to_string(c);
-
54 }
-
55
-
56 static std::string hash_node(Index c0, Index c1, Index n)
-
57 {
-
62 Index a = std::min(c0, c1);
-
63 Index b = std::max(c0, c1);
-
64 return std::to_string(a) + "_" + std::to_string(b) + "_" + std::to_string(n);
-
65 }
-
66
-
67 static std::string hash_node(Index c0, Index c1, Index c2, Index i, Index j)
-
68 {
-
72 std::vector<Index> cv{c0, c1, c2};
-
73 std::sort(cv.begin(), cv.end());
-
74
-
75 return std::to_string(cv[0]) + "_" + std::to_string(cv[1]) + "_" + std::to_string(cv[2])
-
76 + "_" + std::to_string(i) + "_" + std::to_string(j);
-
77 }
-
78
-
79 static vec3<Real> r_S1(Real R, Real t, Real f) {
-
80 vec3<Real> r{R * std::sin(t) * std::cos(f), R * std::sin(t) * std::sin(f), R * std::cos(t)};
-
81 return r;
-
82 }
-
83
-
84 static constexpr int N_ICOSA_FACEs = 20;
-
85 static constexpr int N_ICOSA_EDGEs = 30;
-
86 static constexpr int N_ICOSA_NODEs = 12;
-
87
-
88 static constexpr std::array<int, N_ICOSA_FACEs> FACE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
-
89 static constexpr std::array<int, N_ICOSA_NODEs> NODE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
-
90 static constexpr std::array<std::array<int, 3>, N_ICOSA_FACEs> FACE_CORNER_NODES_ = {
-
91 std::array<int, 3>{NODE_IDs[0], NODE_IDs[5], NODE_IDs[1]},
-
92 std::array<int, 3>{NODE_IDs[0], NODE_IDs[1], NODE_IDs[2]},
-
93 std::array<int, 3>{NODE_IDs[0], NODE_IDs[2], NODE_IDs[3]},
-
94 std::array<int, 3>{NODE_IDs[0], NODE_IDs[3], NODE_IDs[4]},
-
95 std::array<int, 3>{NODE_IDs[0], NODE_IDs[4], NODE_IDs[5]},
-
96 std::array<int, 3>{NODE_IDs[10], NODE_IDs[5], NODE_IDs[4]},
-
97 std::array<int, 3>{NODE_IDs[10], NODE_IDs[6], NODE_IDs[5]},
-
98 std::array<int, 3>{NODE_IDs[6], NODE_IDs[1], NODE_IDs[5]},
-
99 std::array<int, 3>{NODE_IDs[6], NODE_IDs[7], NODE_IDs[1]},
-
100 std::array<int, 3>{NODE_IDs[7], NODE_IDs[2], NODE_IDs[1]},
-
101 std::array<int, 3>{NODE_IDs[7], NODE_IDs[8], NODE_IDs[2]},
-
102 std::array<int, 3>{NODE_IDs[8], NODE_IDs[3], NODE_IDs[2]},
-
103 std::array<int, 3>{NODE_IDs[8], NODE_IDs[9], NODE_IDs[3]},
-
104 std::array<int, 3>{NODE_IDs[9], NODE_IDs[4], NODE_IDs[3]},
-
105 std::array<int, 3>{NODE_IDs[9], NODE_IDs[10], NODE_IDs[4]},
-
106 std::array<int, 3>{NODE_IDs[11], NODE_IDs[10], NODE_IDs[9]},
-
107 std::array<int, 3>{NODE_IDs[11], NODE_IDs[6], NODE_IDs[10]},
-
108 std::array<int, 3>{NODE_IDs[11], NODE_IDs[7], NODE_IDs[6]},
-
109 std::array<int, 3>{NODE_IDs[11], NODE_IDs[8], NODE_IDs[7]},
-
110 std::array<int, 3>{NODE_IDs[11], NODE_IDs[9], NODE_IDs[8]}
-
111 };
-
112
-
113 static constexpr const std::array<std::array<int, 3>, N_ICOSA_FACEs> FACE_CORNER_NODES = {
-
114 std::array<int, 3>{0, 5, 1},
-
115 std::array<int, 3>{0, 1, 2},
-
116 std::array<int, 3>{0, 2, 3},
-
117 std::array<int, 3>{0, 3, 4},
-
118 std::array<int, 3>{0, 4, 5},
-
119 std::array<int, 3>{10, 5, 4},
-
120 std::array<int, 3>{10, 6, 5},
-
121 std::array<int, 3>{6, 1, 5},
-
122 std::array<int, 3>{6, 7, 1},
-
123 std::array<int, 3>{7, 2, 1},
-
124 std::array<int, 3>{7, 8, 2},
-
125 std::array<int, 3>{8, 3, 2},
-
126 std::array<int, 3>{8, 9, 3},
-
127 std::array<int, 3>{9, 4, 3},
-
128 std::array<int, 3>{9, 10, 4},
-
129 std::array<int, 3>{11, 10, 9},
-
130 std::array<int, 3>{11, 6, 10},
-
131 std::array<int, 3>{11, 7, 6},
-
132 std::array<int, 3>{11, 8, 7},
-
133 std::array<int, 3>{11, 9, 8}
-
134 };
-
135
-
136 static std::unordered_map<std::string, SimpleNodeData<Real, Index>> make_corner_nodes()
-
137 {
-
138
-
139 Real R = 1.;
-
140 std::unordered_map<std::string, SimpleNodeData<Real, Index>> base_nodes(N_ICOSA_NODEs);
-
141 base_nodes[hash_node(0)] = {.hash=hash_node(0), .id=0, .pos=r_S1(R, 0., 0.)};
-
142 std::string hash;
-
143 hash.reserve(2);
-
144 for (Index i = 1; i<6; ++i) {
-
145 hash = hash_node(i);
-
146 base_nodes[hash] = {
-
147 .hash=hash,
-
148 .id=i,
-
149 .pos=r_S1(R,
-
150 static_cast<Real>(M_PI/2. - std::atan(0.5)),
-
151 static_cast<Real>(2.*M_PI*(static_cast<Real>(i) - 1.)/5.))};
-
152 }
-
153
-
154 for (Index i = 6; i<N_ICOSA_NODEs - 1; ++i) {
-
155 hash = hash_node(i);
-
156 base_nodes[hash] = {
-
157 .hash=hash,
-
158 .id=i,
-
159 .pos=r_S1(R,
-
160 static_cast<Real>(M_PI/2. + std::atan(0.5)),
-
161 static_cast<Real>(2.*M_PI*(static_cast<Real>(i) - 6.5)/5.))};
-
162 }
-
163 hash = hash_node(N_ICOSA_NODEs - 1);
-
164 base_nodes[hash] = {
-
165 .hash=hash,
-
166 .id=static_cast<Index>(N_ICOSA_NODEs - 1),
-
167 .pos=r_S1(R, static_cast<Real>(M_PI), static_cast<Real>(0.))};
-
168 return base_nodes;
-
169 }
-
170
-
171 enum TriangleRegion
-
172 {
-
173 TOP_CORNER, BOTTOM_LEFT_CORNER, BOTTOM_RIGHT_CORNER, LEFT_EDGE, BOTTOM_EDGE, DIAGONAL_EDGE, BULK
-
174 };
-
175
-
176 static TriangleRegion get_region(Index i, Index j, Index sizeMinOne)
-
177 {
-
178 if (i==0) { return TOP_CORNER; }
-
179 else if (j==0 && i==sizeMinOne) { return BOTTOM_LEFT_CORNER; }
-
180 else if (j==sizeMinOne && i==sizeMinOne) { return BOTTOM_RIGHT_CORNER; }
-
181 else if (j==0) { return LEFT_EDGE; }
-
182 else if (i==sizeMinOne) { return BOTTOM_EDGE; }
-
183 else if (i==j) { return DIAGONAL_EDGE; }
-
184 else { return BULK; }
-
185 }
-
186
-
187 static std::string hash_any(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx)
-
188 {
-
189 switch (get_region(i, j, maxIdx)) {
-
190 case TOP_CORNER:return hash_node(c0);
-
191 case BOTTOM_LEFT_CORNER:return hash_node(c1);
-
192 case BOTTOM_RIGHT_CORNER:return hash_node(c2);
-
193 case LEFT_EDGE:return hash_node(c0, c1, i);
-
194 case BOTTOM_EDGE:return hash_node(c1, c2, j);
-
195 case DIAGONAL_EDGE:return hash_node(c0, c2, j);
-
196 case BULK:return hash_node(c0, c1, c2, i, j);
-
197 default:
-
198 std::cerr<<"something went wrong! provided indices i: "
-
199 <<i<<" and j: "
-
200 <<j<<" together with the maxIdx: "<<maxIdx
-
201 <<" produced a wrong region.\n";
-
202 exit(12);
-
203 }
-
204 }
-
205
-
206 static std::vector<std::string> neighbour_hash_vec(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx)
-
207 {
-
208 std::vector<std::string> neighbour_hash;
-
209 neighbour_hash.reserve(6);
-
210 switch (get_region(i, j, maxIdx)) {
-
211
-
212 case TOP_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 0, maxIdx));
-
213 neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 1, maxIdx));
-
214 return neighbour_hash;
-
215
-
216 case BOTTOM_LEFT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
-
217 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
-
218 return neighbour_hash;
-
219
-
220 case BOTTOM_RIGHT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
-
221 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
-
222 return neighbour_hash;
-
223
-
224 case LEFT_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
-
225 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx));
-
226 neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
-
227 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx));
-
228 return neighbour_hash;
-
229
-
230 case BOTTOM_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
-
231 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
-
232 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
-
233 neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
-
234 return neighbour_hash;
-
235
-
236 case DIAGONAL_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
-
237 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
-
238 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx));
-
239 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx));
-
240 return neighbour_hash;
-
241
-
242 case BULK:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
-
243 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
-
244 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
-
245 neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
-
246 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx));
-
247 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx));
-
248 return neighbour_hash;
-
249 default:
-
250 std::cerr<<"something went wrong! provided indices i: "
-
251 <<i<<" and j: "
-
252 <<j<<" together with the maxIdx: "<<maxIdx
-
253 <<" produced a wrong region.\n";
-
254 exit(12);
-
255 }
-
256
-
257 }
-
258
-
259 static Real even_angular_distance_length(Real l, Index k, Index n, Real R = 1.)
-
260 {
-
265 if (k==0) {
-
266 return 0;
-
267 }
-
268 else {
-
269 Real fr = static_cast<Real>(k)/static_cast<Real>(n);
-
270 Real denominator = static_cast<Real>(l + std::sqrt(4.*R*R - l*l)/std::tan(fr*2.*asin(l/(2.*R))));
-
271 return static_cast<Real>(2.)*R*R/denominator;
-
272 }
-
273 }
-
274
-
275 static vec3<Real> get_pos(vec3<Real> const& p0, vec3<Real> const& p1, vec3<Real> const& p2, Index i, Index j, Index maxIdx)
-
276 {
-
288 vec3<Real> e1 = p1 - p0;
-
289 vec3<Real> e2 = p2 - p0;
-
290 auto e = e1.norm();
-
291 Real wi = even_angular_distance_length(e, i, maxIdx);
-
292
-
293 e1.normalize();
-
294 e2.normalize();
-
295
-
296 vec3<Real> li{};
-
297 Real li_norm{0};
-
298 vec3<Real> interm_1 = p0 + wi*e1;
-
299 interm_1.normalize();
-
300 if (i!=0) {
-
301 vec3<Real> interm_2 = p0 + wi*e2;
-
302 interm_2.normalize();
-
303
-
304 li = interm_2 - interm_1;
-
305 li_norm = li.norm();
-
306 li.normalize();
-
307 }
-
308 Real wj = even_angular_distance_length(li_norm, j, i);
-
309 return interm_1 + wj*li;
-
310 }
-
311
-
312 static std::tuple<Index, Index, Index> get_sorted_face_nodes(std::array<int, 3> face)
-
313 {
-
314 std::sort(face.begin(), face.end());
-
315 return {static_cast<Index>(face[0]),
-
316 static_cast<Index>(face[1]),
-
317 static_cast<Index>(face[2])};
-
318 }
-
319 static void make_face_nodes(std::unordered_map<std::string, SimpleNodeData<Real, Index>>& node_cache, Index nIter)
-
320 {
-
321 vec3<Real> p0, p1, p2, pos;
-
322 Index nEdge = nIter + 2;// total Number of nodes on an edge
-
323 Index maxIdx = nIter + 1;// max value i or j can have
-
324
-
325 std::string hash;
-
326 hash.reserve(10);
-
327
-
328 std::string c0_h, c1_h, c2_h;
-
329 for (auto face: FACE_CORNER_NODES) {
-
330 auto[c0, c1, c2] = get_sorted_face_nodes(face);
-
331 c0_h = hash_node(c0);
-
332 c1_h = hash_node(c1);
-
333 c2_h = hash_node(c2);
-
334 p0 = node_cache[c0_h].pos;
-
335 p1 = node_cache[c1_h].pos;
-
336 p2 = node_cache[c2_h].pos;
-
337 for (Index i = 0; i<nEdge; ++i) {
-
338 for (Index j = 0; j<=i; ++j) {
-
339 pos = get_pos(p0, p1, p2, i, j, maxIdx);
-
340 hash = hash_any(c0, c1, c2, i, j, maxIdx);
-
341 node_cache[hash] = {.hash=hash, .pos=pos};
-
342 }
-
343 }
-
344 }
-
345
-
346 for (auto face: FACE_CORNER_NODES) {
-
347// std::sort(face.begin(),face.end());
-
348// auto [c0, c1, c2] = face;
-
349 auto[c0, c1, c2] = get_sorted_face_nodes(face);
-
350 for (Index i = 0; i<nEdge; ++i) {
-
351 for (Index j = 0; j<=i; ++j) {
-
352 hash = hash_any(c0, c1, c2, i, j, maxIdx);
-
353 std::vector<std::string> neighbour_hashes = neighbour_hash_vec(c0, c1, c2, i, j, maxIdx);
-
354 for (auto const& neighbour_hash: neighbour_hashes) {
-
355 node_cache[hash].nn_hashes.insert(neighbour_hash);
-
356 node_cache[neighbour_hash].nn_hashes.insert(hash);
-
357 }
-
358 }
-
359 }
-
360 for (Index idx = 0; auto& nodeEl: node_cache) {
-
361 nodeEl.second.id = idx;
-
362 ++idx;
-
363 }
-
364
-
365 }
-
366
-
367 }
-
368};
-
369
-
371template<floating_point_number Real, indexing_number Index>
-
372class PlanarTriangulation{
-
373 Index n_length;
-
374public:
-
375 std::vector<std::vector<Index>> nn_ids;
-
376 std::vector<bool> is_bulk;
-
377 [[nodiscard]] Index ij_to_id(Index i, Index j){return i*n_length+j;}
-
378 [[nodiscard]] Index id_to_i(Index id){return id/n_length;}
-
379 [[nodiscard]] Index id_to_j(Index id){return id%n_length;}
-
380
-
381 // TL T TR
-
382 // L R
-
383 // BL B BR
-
384
-
385 [[nodiscard]] Index TL(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)-1);}
-
386 [[nodiscard]] Index T (Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id) );}
-
387 [[nodiscard]] Index TR(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)+1);}
-
388 [[nodiscard]] Index L(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)-1);}
-
389 [[nodiscard]] Index R(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)+1);}
-
390 [[nodiscard]] Index BL(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)-1);}
-
391 [[nodiscard]] Index B (Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id) );}
-
392 [[nodiscard]] Index BR(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)+1);}
-
393
-
394 [[nodiscard]] std::vector<Index> bulk_odd_j_neighbor_ids(Index id){
-
395 return { B(id), R(id), TR(id), T(id), TL(id), L(id) };
-
396 }
-
397
-
398 [[nodiscard]] std::vector<Index> bulk_even_j_neighbor_ids(Index id){
-
399 return { T(id), L(id), BL(id), B(id), BR(id), R(id) };
-
400 }
-
401
-
402 [[nodiscard]] std::vector<Index> top_boundary_odd_j_neighbor_ids(Index id){
-
403 return { L(id), B(id), R(id) };
-
404 }
-
405
-
406 [[nodiscard]] std::vector<Index> top_boundary_even_j_neighbor_ids(Index id){
-
407 return { L(id), BL(id), B(id), BR(id), R(id) };
-
408 }
-
409
-
410 [[nodiscard]] std::vector<Index> bottom_boundary_odd_j_neighbor_ids(Index id){
-
411 return { R(id), TR(id), T(id), TL(id), L(id) };
-
412 }
-
413
-
414 [[nodiscard]] std::vector<Index> bottom_boundary_even_j_neighbor_ids(Index id){
-
415 return { T(id), L(id), R(id) };
-
416 }
-
417
-
418 [[nodiscard]] std::vector<Index> left_boundary_neighbor_ids(Index id){
-
419 return { T(id), B(id), BR(id), R(id)};
-
420 }
-
421
-
422 [[nodiscard]] std::vector<Index> right_boundary_odd_j_neighbor_ids(Index id){
-
423 return { T(id), TL(id), L(id), B(id) };
-
424 }
-
425
-
426 [[nodiscard]] std::vector<Index> right_boundary_even_j_neighbor_ids(Index id){
-
427 return { T(id), L(id), BL(id), B(id) };
-
428 }
-
429
-
430 PlanarTriangulation(Index n_length_inp, Index n_width):n_length(n_length_inp){
-
431 Index N_nodes = n_length*n_width;
-
432
-
433 nn_ids.resize(N_nodes);
-
434 is_bulk.resize(N_nodes,false);
-
435 // populate_bulk
-
436 for(Index i=1; i<n_width-1;++i){
-
437 for(Index j=1; j<n_length-1;++j){
-
438 Index bulk_id = ij_to_id(i,j);
-
439 is_bulk[bulk_id] = true;
-
440 if(j%2==0){
-
441 nn_ids[bulk_id] = bulk_even_j_neighbor_ids(bulk_id);
-
442 }else{
-
443 nn_ids[bulk_id] = bulk_odd_j_neighbor_ids(bulk_id);
-
444 }
-
445 }
-
446 }
-
447
-
448 // populate top and bottom boundaries
-
449 for (Index j = 1; j<n_length-1; ++j) {
-
450 Index i = 0;
-
451 Index id = ij_to_id(i,j);
-
452 if (j%2==0) {
-
453 nn_ids[id] = top_boundary_even_j_neighbor_ids(id);
-
454 }else{
-
455 nn_ids[id] = top_boundary_odd_j_neighbor_ids(id);
-
456 }
-
457
-
458 i = n_width-1;
-
459 id = ij_to_id(i,j);
-
460 if (j%2==0) {
-
461 nn_ids[id] = bottom_boundary_even_j_neighbor_ids(id);
-
462 }else{
-
463 nn_ids[id] = bottom_boundary_odd_j_neighbor_ids(id);
-
464 }
-
465 }
-
466
-
467 // populate left and right boundaries
-
468 for (Index i = 1; i<n_width-1; ++i) {
-
469 Index j = 0;
-
470 Index id = ij_to_id(i,j);
-
471 nn_ids[id] = left_boundary_neighbor_ids(id);
-
472
-
473 j = n_length-1;
-
474 id = ij_to_id(i,j);
-
475 if (j%2==0) {
-
476 nn_ids[id] = right_boundary_even_j_neighbor_ids(id);
-
477 }else{
-
478 nn_ids[id] = right_boundary_odd_j_neighbor_ids(id);
-
479 }
-
480 }
-
481
-
482 // populate top left corner
-
483 nn_ids[0] = std::vector<Index>{B(0), BR(0), R(0)};
-
484 // populate bottom left corner
-
485 Index bottom_left_id = ij_to_id(n_width-1,0);
-
486 nn_ids[bottom_left_id] = std::vector<Index>{R(bottom_left_id), T(bottom_left_id)}; //Todo this bond will never flip
-
487 // populate top and bottom right corner
-
488 Index top_right_id = n_length-1;
-
489 Index bottom_right_id = N_nodes-1;
-
490 if((n_length-1)%2==0){
-
491 nn_ids[top_right_id] = {L(top_right_id), BL(top_right_id), B(top_right_id)};
-
492 nn_ids[bottom_right_id] = {T(bottom_right_id), L(bottom_right_id)};// Todo this bond will never flip
-
493 }else{
-
494 nn_ids[top_right_id] = {L(top_right_id), /*BL(top_right_id),*/ B(top_right_id)}; // Todo this bond will never flip
-
495 nn_ids[bottom_right_id] = {T(bottom_right_id), TL(bottom_right_id), L(bottom_right_id),};// Todo this bond will never flip
-
496 }
-
497
+
17
+
23#ifndef M_PI
+
24#define M_PI 3.14159265358979323846 /* pi */
+
25#endif
+
33namespace fp::implementation{
+
34
+
36template<floating_point_number Real, indexing_number Index>
+
37struct SimpleNodeData{
+
38 std::string hash{};
+
39 Index id{};
+
40 vec3<Real> pos{};
+
41 std::unordered_set<std::string> nn_hashes{};
+
42};
+
43
+
45template<floating_point_number Real, indexing_number Index>
+
46class IcosahedronSubTriangulation
+
47{
+
48public:
+
49 static std::string hash_node(Index c)
+
50 {
+
54 return std::to_string(c);
+
55 }
+
56
+
57 static std::string hash_node(Index c0, Index c1, Index n)
+
58 {
+
63 Index a = std::min(c0, c1);
+
64 Index b = std::max(c0, c1);
+
65 return std::to_string(a) + "_" + std::to_string(b) + "_" + std::to_string(n);
+
66 }
+
67
+
68 static std::string hash_node(Index c0, Index c1, Index c2, Index i, Index j)
+
69 {
+
73 std::vector<Index> cv{c0, c1, c2};
+
74 std::sort(cv.begin(), cv.end());
+
75
+
76 return std::to_string(cv[0]) + "_" + std::to_string(cv[1]) + "_" + std::to_string(cv[2])
+
77 + "_" + std::to_string(i) + "_" + std::to_string(j);
+
78 }
+
79
+
80 static vec3<Real> r_S1(Real R, Real t, Real f) {
+
81 vec3<Real> r{R * std::sin(t) * std::cos(f), R * std::sin(t) * std::sin(f), R * std::cos(t)};
+
82 return r;
+
83 }
+
84
+
85 static constexpr int N_ICOSA_FACEs = 20;
+
86 static constexpr int N_ICOSA_EDGEs = 30;
+
87 static constexpr int N_ICOSA_NODEs = 12;
+
88
+
89 static constexpr std::array<int, N_ICOSA_FACEs> FACE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
+
90 static constexpr std::array<int, N_ICOSA_NODEs> NODE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+
91 static constexpr std::array<std::array<int, 3>, N_ICOSA_FACEs> FACE_CORNER_NODES_ = {
+
92 std::array<int, 3>{NODE_IDs[0], NODE_IDs[5], NODE_IDs[1]},
+
93 std::array<int, 3>{NODE_IDs[0], NODE_IDs[1], NODE_IDs[2]},
+
94 std::array<int, 3>{NODE_IDs[0], NODE_IDs[2], NODE_IDs[3]},
+
95 std::array<int, 3>{NODE_IDs[0], NODE_IDs[3], NODE_IDs[4]},
+
96 std::array<int, 3>{NODE_IDs[0], NODE_IDs[4], NODE_IDs[5]},
+
97 std::array<int, 3>{NODE_IDs[10], NODE_IDs[5], NODE_IDs[4]},
+
98 std::array<int, 3>{NODE_IDs[10], NODE_IDs[6], NODE_IDs[5]},
+
99 std::array<int, 3>{NODE_IDs[6], NODE_IDs[1], NODE_IDs[5]},
+
100 std::array<int, 3>{NODE_IDs[6], NODE_IDs[7], NODE_IDs[1]},
+
101 std::array<int, 3>{NODE_IDs[7], NODE_IDs[2], NODE_IDs[1]},
+
102 std::array<int, 3>{NODE_IDs[7], NODE_IDs[8], NODE_IDs[2]},
+
103 std::array<int, 3>{NODE_IDs[8], NODE_IDs[3], NODE_IDs[2]},
+
104 std::array<int, 3>{NODE_IDs[8], NODE_IDs[9], NODE_IDs[3]},
+
105 std::array<int, 3>{NODE_IDs[9], NODE_IDs[4], NODE_IDs[3]},
+
106 std::array<int, 3>{NODE_IDs[9], NODE_IDs[10], NODE_IDs[4]},
+
107 std::array<int, 3>{NODE_IDs[11], NODE_IDs[10], NODE_IDs[9]},
+
108 std::array<int, 3>{NODE_IDs[11], NODE_IDs[6], NODE_IDs[10]},
+
109 std::array<int, 3>{NODE_IDs[11], NODE_IDs[7], NODE_IDs[6]},
+
110 std::array<int, 3>{NODE_IDs[11], NODE_IDs[8], NODE_IDs[7]},
+
111 std::array<int, 3>{NODE_IDs[11], NODE_IDs[9], NODE_IDs[8]}
+
112 };
+
113
+
114 static constexpr const std::array<std::array<int, 3>, N_ICOSA_FACEs> FACE_CORNER_NODES = {
+
115 std::array<int, 3>{0, 5, 1},
+
116 std::array<int, 3>{0, 1, 2},
+
117 std::array<int, 3>{0, 2, 3},
+
118 std::array<int, 3>{0, 3, 4},
+
119 std::array<int, 3>{0, 4, 5},
+
120 std::array<int, 3>{10, 5, 4},
+
121 std::array<int, 3>{10, 6, 5},
+
122 std::array<int, 3>{6, 1, 5},
+
123 std::array<int, 3>{6, 7, 1},
+
124 std::array<int, 3>{7, 2, 1},
+
125 std::array<int, 3>{7, 8, 2},
+
126 std::array<int, 3>{8, 3, 2},
+
127 std::array<int, 3>{8, 9, 3},
+
128 std::array<int, 3>{9, 4, 3},
+
129 std::array<int, 3>{9, 10, 4},
+
130 std::array<int, 3>{11, 10, 9},
+
131 std::array<int, 3>{11, 6, 10},
+
132 std::array<int, 3>{11, 7, 6},
+
133 std::array<int, 3>{11, 8, 7},
+
134 std::array<int, 3>{11, 9, 8}
+
135 };
+
136
+
137 static std::unordered_map<std::string, SimpleNodeData<Real, Index>> make_corner_nodes()
+
138 {
+
139
+
140 Real R = 1.;
+
141 std::unordered_map<std::string, SimpleNodeData<Real, Index>> base_nodes(N_ICOSA_NODEs);
+
142 base_nodes[hash_node(0)] = {.hash=hash_node(0), .id=0, .pos=r_S1(R, 0., 0.)};
+
143 std::string hash;
+
144 hash.reserve(2);
+
145 for (Index i = 1; i<6; ++i) {
+
146 hash = hash_node(i);
+
147 base_nodes[hash] = {
+
148 .hash=hash,
+
149 .id=i,
+
150 .pos=r_S1(R,
+
151 static_cast<Real>(M_PI/2. - std::atan(0.5)),
+
152 static_cast<Real>(2.*M_PI*(static_cast<Real>(i) - 1.)/5.))};
+
153 }
+
154
+
155 for (Index i = 6; i<N_ICOSA_NODEs - 1; ++i) {
+
156 hash = hash_node(i);
+
157 base_nodes[hash] = {
+
158 .hash=hash,
+
159 .id=i,
+
160 .pos=r_S1(R,
+
161 static_cast<Real>(M_PI/2. + std::atan(0.5)),
+
162 static_cast<Real>(2.*M_PI*(static_cast<Real>(i) - 6.5)/5.))};
+
163 }
+
164 hash = hash_node(N_ICOSA_NODEs - 1);
+
165 base_nodes[hash] = {
+
166 .hash=hash,
+
167 .id=static_cast<Index>(N_ICOSA_NODEs - 1),
+
168 .pos=r_S1(R, static_cast<Real>(M_PI), static_cast<Real>(0.))};
+
169 return base_nodes;
+
170 }
+
171
+
172 enum TriangleRegion
+
173 {
+
174 TOP_CORNER, BOTTOM_LEFT_CORNER, BOTTOM_RIGHT_CORNER, LEFT_EDGE, BOTTOM_EDGE, DIAGONAL_EDGE, BULK
+
175 };
+
176
+
177 static TriangleRegion get_region(Index i, Index j, Index sizeMinOne)
+
178 {
+
179 if (i==0) { return TOP_CORNER; }
+
180 else if (j==0 && i==sizeMinOne) { return BOTTOM_LEFT_CORNER; }
+
181 else if (j==sizeMinOne && i==sizeMinOne) { return BOTTOM_RIGHT_CORNER; }
+
182 else if (j==0) { return LEFT_EDGE; }
+
183 else if (i==sizeMinOne) { return BOTTOM_EDGE; }
+
184 else if (i==j) { return DIAGONAL_EDGE; }
+
185 else { return BULK; }
+
186 }
+
187
+
188 static std::string hash_any(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx)
+
189 {
+
190 switch (get_region(i, j, maxIdx)) {
+
191 case TOP_CORNER:return hash_node(c0);
+
192 case BOTTOM_LEFT_CORNER:return hash_node(c1);
+
193 case BOTTOM_RIGHT_CORNER:return hash_node(c2);
+
194 case LEFT_EDGE:return hash_node(c0, c1, i);
+
195 case BOTTOM_EDGE:return hash_node(c1, c2, j);
+
196 case DIAGONAL_EDGE:return hash_node(c0, c2, j);
+
197 case BULK:return hash_node(c0, c1, c2, i, j);
+
198 default:
+
199 std::cerr<<"something went wrong! provided indices i: "
+
200 <<i<<" and j: "
+
201 <<j<<" together with the maxIdx: "<<maxIdx
+
202 <<" produced a wrong region.\n";
+
203 exit(12);
+
204 }
+
205 }
+
206
+
207 static std::vector<std::string> neighbour_hash_vec(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx)
+
208 {
+
209 std::vector<std::string> neighbour_hash;
+
210 neighbour_hash.reserve(6);
+
211 switch (get_region(i, j, maxIdx)) {
+
212
+
213 case TOP_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 0, maxIdx));
+
214 neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 1, maxIdx));
+
215 return neighbour_hash;
+
216
+
217 case BOTTOM_LEFT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
+
218 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
+
219 return neighbour_hash;
+
220
+
221 case BOTTOM_RIGHT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
+
222 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
+
223 return neighbour_hash;
+
224
+
225 case LEFT_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
+
226 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx));
+
227 neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
+
228 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx));
+
229 return neighbour_hash;
+
230
+
231 case BOTTOM_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
+
232 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
+
233 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
+
234 neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
+
235 return neighbour_hash;
+
236
+
237 case DIAGONAL_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
+
238 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
+
239 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx));
+
240 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx));
+
241 return neighbour_hash;
+
242
+
243 case BULK:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx));
+
244 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx));
+
245 neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx));
+
246 neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx));
+
247 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx));
+
248 neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx));
+
249 return neighbour_hash;
+
250 default:
+
251 std::cerr<<"something went wrong! provided indices i: "
+
252 <<i<<" and j: "
+
253 <<j<<" together with the maxIdx: "<<maxIdx
+
254 <<" produced a wrong region.\n";
+
255 exit(12);
+
256 }
+
257
+
258 }
+
259
+
260 static Real even_angular_distance_length(Real l, Index k, Index n, Real R = 1.)
+
261 {
+
266 if (k==0) {
+
267 return 0;
+
268 }
+
269 else {
+
270 Real fr = static_cast<Real>(k)/static_cast<Real>(n);
+
271 Real denominator = static_cast<Real>(l + std::sqrt(4.*R*R - l*l)/std::tan(fr*2.*asin(l/(2.*R))));
+
272 return static_cast<Real>(2.)*R*R/denominator;
+
273 }
+
274 }
+
275
+
276 static vec3<Real> get_pos(vec3<Real> const& p0, vec3<Real> const& p1, vec3<Real> const& p2, Index i, Index j, Index maxIdx)
+
277 {
+
289 vec3<Real> e1 = p1 - p0;
+
290 vec3<Real> e2 = p2 - p0;
+
291 auto e = e1.norm();
+
292 Real wi = even_angular_distance_length(e, i, maxIdx);
+
293
+
294 e1.normalize();
+
295 e2.normalize();
+
296
+
297 vec3<Real> li{};
+
298 Real li_norm{0};
+
299 vec3<Real> interm_1 = p0 + wi*e1;
+
300 interm_1.normalize();
+
301 if (i!=0) {
+
302 vec3<Real> interm_2 = p0 + wi*e2;
+
303 interm_2.normalize();
+
304
+
305 li = interm_2 - interm_1;
+
306 li_norm = li.norm();
+
307 li.normalize();
+
308 }
+
309 Real wj = even_angular_distance_length(li_norm, j, i);
+
310 return interm_1 + wj*li;
+
311 }
+
312
+
313 static std::tuple<Index, Index, Index> get_sorted_face_nodes(std::array<int, 3> face)
+
314 {
+
315 std::sort(face.begin(), face.end());
+
316 return {static_cast<Index>(face[0]),
+
317 static_cast<Index>(face[1]),
+
318 static_cast<Index>(face[2])};
+
319 }
+
320 static void make_face_nodes(std::unordered_map<std::string, SimpleNodeData<Real, Index>>& node_cache, Index nIter)
+
321 {
+
322 vec3<Real> p0, p1, p2, pos;
+
323 Index nEdge = nIter + 2;// total Number of nodes on an edge
+
324 Index maxIdx = nIter + 1;// max value i or j can have
+
325
+
326 std::string hash;
+
327 hash.reserve(10);
+
328
+
329 std::string c0_h, c1_h, c2_h;
+
330 for (auto face: FACE_CORNER_NODES) {
+
331 auto[c0, c1, c2] = get_sorted_face_nodes(face);
+
332 c0_h = hash_node(c0);
+
333 c1_h = hash_node(c1);
+
334 c2_h = hash_node(c2);
+
335 p0 = node_cache[c0_h].pos;
+
336 p1 = node_cache[c1_h].pos;
+
337 p2 = node_cache[c2_h].pos;
+
338 for (Index i = 0; i<nEdge; ++i) {
+
339 for (Index j = 0; j<=i; ++j) {
+
340 pos = get_pos(p0, p1, p2, i, j, maxIdx);
+
341 hash = hash_any(c0, c1, c2, i, j, maxIdx);
+
342 node_cache[hash] = {.hash=hash, .pos=pos};
+
343 }
+
344 }
+
345 }
+
346
+
347 for (auto face: FACE_CORNER_NODES) {
+
348// std::sort(face.begin(),face.end());
+
349// auto [c0, c1, c2] = face;
+
350 auto[c0, c1, c2] = get_sorted_face_nodes(face);
+
351 for (Index i = 0; i<nEdge; ++i) {
+
352 for (Index j = 0; j<=i; ++j) {
+
353 hash = hash_any(c0, c1, c2, i, j, maxIdx);
+
354 std::vector<std::string> neighbour_hashes = neighbour_hash_vec(c0, c1, c2, i, j, maxIdx);
+
355 for (auto const& neighbour_hash: neighbour_hashes) {
+
356 node_cache[hash].nn_hashes.insert(neighbour_hash);
+
357 node_cache[neighbour_hash].nn_hashes.insert(hash);
+
358 }
+
359 }
+
360 }
+
361 for (Index idx = 0; auto& nodeEl: node_cache) {
+
362 nodeEl.second.id = idx;
+
363 ++idx;
+
364 }
+
365
+
366 }
+
367
+
368 }
+
369};
+
370
+
372template<floating_point_number Real, indexing_number Index>
+
373class PlanarTriangulation{
+
374 Index n_length;
+
375public:
+
376 std::vector<std::vector<Index>> nn_ids;
+
377 std::vector<bool> is_bulk;
+
378 [[nodiscard]] Index ij_to_id(Index i, Index j){return i*n_length+j;}
+
379 [[nodiscard]] Index id_to_i(Index id){return id/n_length;}
+
380 [[nodiscard]] Index id_to_j(Index id){return id%n_length;}
+
381
+
382 // TL T TR
+
383 // L R
+
384 // BL B BR
+
385
+
386 [[nodiscard]] Index TL(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)-1);}
+
387 [[nodiscard]] Index T (Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id) );}
+
388 [[nodiscard]] Index TR(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)+1);}
+
389 [[nodiscard]] Index L(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)-1);}
+
390 [[nodiscard]] Index R(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)+1);}
+
391 [[nodiscard]] Index BL(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)-1);}
+
392 [[nodiscard]] Index B (Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id) );}
+
393 [[nodiscard]] Index BR(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)+1);}
+
394
+
395 [[nodiscard]] std::vector<Index> bulk_odd_j_neighbor_ids(Index id){
+
396 return { B(id), R(id), TR(id), T(id), TL(id), L(id) };
+
397 }
+
398
+
399 [[nodiscard]] std::vector<Index> bulk_even_j_neighbor_ids(Index id){
+
400 return { T(id), L(id), BL(id), B(id), BR(id), R(id) };
+
401 }
+
402
+
403 [[nodiscard]] std::vector<Index> top_boundary_odd_j_neighbor_ids(Index id){
+
404 return { L(id), B(id), R(id) };
+
405 }
+
406
+
407 [[nodiscard]] std::vector<Index> top_boundary_even_j_neighbor_ids(Index id){
+
408 return { L(id), BL(id), B(id), BR(id), R(id) };
+
409 }
+
410
+
411 [[nodiscard]] std::vector<Index> bottom_boundary_odd_j_neighbor_ids(Index id){
+
412 return { R(id), TR(id), T(id), TL(id), L(id) };
+
413 }
+
414
+
415 [[nodiscard]] std::vector<Index> bottom_boundary_even_j_neighbor_ids(Index id){
+
416 return { T(id), L(id), R(id) };
+
417 }
+
418
+
419 [[nodiscard]] std::vector<Index> left_boundary_neighbor_ids(Index id){
+
420 return { T(id), B(id), BR(id), R(id)};
+
421 }
+
422
+
423 [[nodiscard]] std::vector<Index> right_boundary_odd_j_neighbor_ids(Index id){
+
424 return { T(id), TL(id), L(id), B(id) };
+
425 }
+
426
+
427 [[nodiscard]] std::vector<Index> right_boundary_even_j_neighbor_ids(Index id){
+
428 return { T(id), L(id), BL(id), B(id) };
+
429 }
+
430
+
431 PlanarTriangulation(Index n_length_inp, Index n_width):n_length(n_length_inp){
+
432 Index N_nodes = n_length*n_width;
+
433
+
434 nn_ids.resize(N_nodes);
+
435 is_bulk.resize(N_nodes,false);
+
436 // populate_bulk
+
437 for(Index i=1; i<n_width-1;++i){
+
438 for(Index j=1; j<n_length-1;++j){
+
439 Index bulk_id = ij_to_id(i,j);
+
440 is_bulk[bulk_id] = true;
+
441 if(j%2==0){
+
442 nn_ids[bulk_id] = bulk_even_j_neighbor_ids(bulk_id);
+
443 }else{
+
444 nn_ids[bulk_id] = bulk_odd_j_neighbor_ids(bulk_id);
+
445 }
+
446 }
+
447 }
+
448
+
449 // populate top and bottom boundaries
+
450 for (Index j = 1; j<n_length-1; ++j) {
+
451 Index i = 0;
+
452 Index id = ij_to_id(i,j);
+
453 if (j%2==0) {
+
454 nn_ids[id] = top_boundary_even_j_neighbor_ids(id);
+
455 }else{
+
456 nn_ids[id] = top_boundary_odd_j_neighbor_ids(id);
+
457 }
+
458
+
459 i = n_width-1;
+
460 id = ij_to_id(i,j);
+
461 if (j%2==0) {
+
462 nn_ids[id] = bottom_boundary_even_j_neighbor_ids(id);
+
463 }else{
+
464 nn_ids[id] = bottom_boundary_odd_j_neighbor_ids(id);
+
465 }
+
466 }
+
467
+
468 // populate left and right boundaries
+
469 for (Index i = 1; i<n_width-1; ++i) {
+
470 Index j = 0;
+
471 Index id = ij_to_id(i,j);
+
472 nn_ids[id] = left_boundary_neighbor_ids(id);
+
473
+
474 j = n_length-1;
+
475 id = ij_to_id(i,j);
+
476 if (j%2==0) {
+
477 nn_ids[id] = right_boundary_even_j_neighbor_ids(id);
+
478 }else{
+
479 nn_ids[id] = right_boundary_odd_j_neighbor_ids(id);
+
480 }
+
481 }
+
482
+
483 // populate top left corner
+
484 nn_ids[0] = std::vector<Index>{B(0), BR(0), R(0)};
+
485 // populate bottom left corner
+
486 Index bottom_left_id = ij_to_id(n_width-1,0);
+
487 nn_ids[bottom_left_id] = std::vector<Index>{R(bottom_left_id), T(bottom_left_id)}; //Todo this bond will never flip
+
488 // populate top and bottom right corner
+
489 Index top_right_id = n_length-1;
+
490 Index bottom_right_id = N_nodes-1;
+
491 if((n_length-1)%2==0){
+
492 nn_ids[top_right_id] = {L(top_right_id), BL(top_right_id), B(top_right_id)};
+
493 nn_ids[bottom_right_id] = {T(bottom_right_id), L(bottom_right_id)};// Todo this bond will never flip
+
494 }else{
+
495 nn_ids[top_right_id] = {L(top_right_id), /*BL(top_right_id),*/ B(top_right_id)}; // Todo this bond will never flip
+
496 nn_ids[bottom_right_id] = {T(bottom_right_id), TL(bottom_right_id), L(bottom_right_id),};// Todo this bond will never flip
+
497 }
498
-
499 }
-
500};
-
501}
-
502#endif //FLIPPY_TRIANGULATOR_HPP
+
499
+
500 }
+
501};
+
502}
+
503#endif //FLIPPY_TRIANGULATOR_HPP
This file contains the concepts that are costomly defined for the flippy class templates.
-
#define M_PI
The M_PI macro is not defined on for all compilers, so it is defined here (if a definition does not a...
Definition Triangulator.hpp:23
+
#define M_PI
The M_PI macro is not defined on for all compilers, so it is defined here (if a definition does not a...
Definition Triangulator.hpp:24
Definition stlSerializer.hpp:9
Header file containing the definition and implementation a 3 dimensional vector class,...
diff --git a/docs/classfp_1_1_monte_carlo_updater.html b/docs/classfp_1_1_monte_carlo_updater.html index c9bba01..7509637 100644 --- a/docs/classfp_1_1_monte_carlo_updater.html +++ b/docs/classfp_1_1_monte_carlo_updater.html @@ -538,16 +538,14 @@

- - - - - - - - - - + + + + + + + +

diff --git a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map index cb4f02a..3ad5fcb 100644 --- a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map +++ b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map @@ -4,14 +4,12 @@ - - - - - - - - - - + + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 index 081cf86..faeab34 100644 --- a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 +++ b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 @@ -1 +1 @@ -5ff0d5f9b7ca5d73970d85db78f1a419 \ No newline at end of file +251959e66a45261c8b532709c6997e8d \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.png index f7bf1008ade2881f5e5e8c5ef0b2cd15376f4cce..33662ead3750d5ba6a9110ec2562444aa22c2692 100644 GIT binary patch literal 36040 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 F{|{1vVaosj literal 39022 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
-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 k*S;x*`P9Gv1!jHuZ^pkjI-Oy
- - - - - - - + + + + +
@@ -631,11 +629,9 @@

- - - - - + + +

-
-
- - - - - - - - - - - -
@@ -1443,13 +1423,11 @@

- - - - - - - + + + + +

@@ -1514,7 +1492,7 @@

\ /

\ /
-
const Nodes< Real, Index > & nodes() const
Returns a constant reference to the underlying Nodes container.
Definition Triangulation.hpp:946
+
const Nodes< Real, Index > & nodes() const
Returns a constant reference to the underlying Nodes container.
Definition Triangulation.hpp:941
Parameters
diff --git a/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.map b/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.map deleted file mode 100644 index c69f35e..0000000 --- a/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.md5 b/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.md5 deleted file mode 100644 index 4cdd5ab..0000000 --- a/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -54dc9c8641a9d83b5ce588a421c517f8 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.png b/docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.png deleted file mode 100644 index 31ae80a85523abbac34a78ed6cff9638fe60f76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18850 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 - - - - - - - + + + + + diff --git a/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 index 7c04406..54d1679 100644 --- a/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 +++ b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 @@ -1 +1 @@ -deb47a410b1ba79dc4e10acf34907332 \ No newline at end of file +f486a95dff1decb653997717669f2223 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.png b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.png index 995e6dd3c164817858a31564bc218e9b279e1357..e06e8cdf7dba61bb671a5ddf7f1a3e83c88f0afd 100644 GIT binary patch literal 8050 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∾wyHb@bzISmGGF%-F>?T8_2e1IuSw{dOmNW?k_-P2yyp z%{vPnJf0`)0MZ82^`7}!6`v+1vUd5-*)YjhKn zDBVNusN4I(xAD~skWI9+y?%K}ZC{PEjf&pO{~>YDx-ZYLxNN4B58`%FiGPpDq?3d^ z^p+jV$+a3P((C?2!WZ6q?0XaIrMC7@e{4$SqEXGYjquhI88b6_KPkHA(Z_(V2H* z!1`tu7sbHza0Ox2*4|FR!}Gw##)dlNr4f1Dz<{#X`Mw(P3PMgx!i|j${)?kIsZaqe zWcKKD*}$=SslPvwNQ2?Fyu57esAWN5G2R@?G~n?|cYY50r7Fa;M^;{n%!ZI+vdrV% zYt+DzjpH-|U5zG_B$xm;(Nkd7+B!Ns?g#nixA%K`6s)Iea~#SmtS8&S&jALD3N{#C zK*@s{JC06HSRspfd>ba)~tT^|2dKKcjG?WxLni8QeUcE|gySG+VRV6hr z$oCZwSrp3Wn_N|0ojSbQ*3rTCapd;>UUm6+Zj|wqYvi8KXpx7{!Iy2OIIboMuELvK zYo+LtKq^U9^9<8-~^?6}*Tb4*QRNSEpAcx!8G_CdZYNNb;J zi?HNm^0V`E9=AO@xc%DQEX7j87sA3`_R^VhpC>TI}AVQ!%b1>|zMoZp<`Opt? z#5|7!2N!pFsNmuC>(^l>$AQA5v)Ka}&_wRKySmOUFSmirkI=pW@Ben7=?_+(>pHs` zF+ESjY1s{_S_6imrX>lDQ-)u?B|{l2Cldi*YtC`-5tK-MW=rSs9&`=yn@4 zsV36=2U|D42%OC%CMLSLxUhJgxqxNz8!8a&Yr~7PW0Wc9v_96`;O$**Gu;K@iP+_` z8Vd)1^kTor`zvBe&U&(16e!vQRzv^JSa8<u(Y~Bv_O{EX-(pAV{#Pe1Mq7INgVP$I8Yj> zNN>obOjSEt*xTDjbK9kc3QvxX#(*Cf32b3&0?|$1g0vcs1Z77-L7`r0`v|O0nOOD! zXpEr%d;$W3Dc2>EMAyX!(9(9!&L%)895W&Mx^-^!xCabs7XKIujOCJG7=sSu2eS>< zOCl2i0q+t^fL2Gpfq{nd7sDeXSv`(y7YL=jJh`m&SMAI>EqjuEMprvpTZ=WFWyjhE z=)f7o^*&$K)A(xeesI?@KSR}iy0zpd90braFi^6v6l=EsE-7J!@ENg+B6M|00ePhG zbqZ9a!5hp?5XtHfiHLY#QQ=%*L@=Go20x}n&-j4%`I;4Ln{FV z5!qerRH0QKj*N_tCoU-|`3;^>S67!~VMeA*94DqmBnfHnpejUl9*!m4_KJynk;TRL z;7(yA^CsL4789|xWdWx6>Sy%RH*Rr2t6(6RsyHmih8MWSGkNJK<$rx&(4tYIZ>60i zuwG_830WRVk#Q-YcZ@w13#A&w2m}wx7*lQE8L^zmp!RVhV63mf>-=PUs|hP^5^H95 zR-ZHND@+|QD3Q7UInM@PR3NjFl1AbgI7;Pc9fFUt$wp#@>+J7;Psql6Bp<{2`aFC9&3iEf-~Oz`@LX68@ztKJX}Nu&JMXL3e2){VRI!WC^|SH)wbn;B_NFm4fwzH_96ZL_MKnm6PC5agx*F8cc}Vvz?CG zy*}yolDV<@#Em~^p)(t7))U-D4>ry}6_i)1S&hJ5*Wkyhr|QzorZFEi!4utlwx?Gc&wWu literal 15984 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 - - - - - - - + + + + + diff --git a/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 index 9fb6cc8..9b67727 100644 --- a/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 +++ b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 @@ -1 +1 @@ -6f9a98d7c0413137ca4ded09c4bee4db \ No newline at end of file +a216e7bed5220cc85f9331725a7fb5d6 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.png b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.png index c2afe48700f62ffe1c66f78439179be8e1f25565..2ab375832115820c2a4d6958048986a143339833 100644 GIT binary patch literal 7025 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 H==1*pV?GP1 literal 14728 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%0A}x3)HK&>2Bizy~!2 zE@BAD-x*_W78YsxOw;6-*zinE(AR!@2vx2u(-yxw1heBDAt3h7yafLgY``1OCn19BT2EcnHVo|!4|Vk- z{&wm1Y-=CrIUIt5F{mFvh~(wdqk@Bjzm1J0AS#d=#6h7g^?rVobDuM&cQM6N31tRN z4|V}4m!ox_lGy_ma6E#Qj*d>$b?+J}>F(M{Gz2JvvOJ=pTnit9tdmt#6b0cl`yow zn3@Ja(Fv3rA&`6M2@)D;Hu~E$EzGRQn!0sseA+LEg@r}LVS(Tx{&~brMg$-L?}#@8 zRu0Lm#E8Y)zw;Qgu{~IxWzJO4kze{QG zw=G}*yXVhu1Mfy5njKiP4e;~^CMNz6GN9i5dLy(Gz)Y%Y_7-?Vm?$E~TY(^FnK1|$ zZA&1V-OD`DY4SgNjayK0W+8#ln>AFBlf`m%#lgXW<$XH{2btT4kSQe$9vK>o*C`2}WD~P`#exsA*`4wj&>veAL411x4nHkp8vEE)XKpg^$`j20 zo0Jq@^mE88Qc_8-KyUSdSARleq8?Dy)>?5l06%gFW;XzZ#z2Al2;cW)y^oCa24|9H z{HYpQ+nEjakBMC>fUO7f@AYncpP!psvR2j**EK4Gv{cQBCB3N{p?&$TL!6)`C2~ju z#=0IJTUqktMb1ho<&={_XyH+8ZOIM+2>kIK`h z;We)NK7sHE5pUj*z)I4yU3;K55dg7SDCjNFC}HIbhtdfXi8*gHBg2?O_Mgrql-mDu zCgJ0Q+2N@F#*)-dK#J4eN=j{a`tq3DO0vOCj?hZEhyyJ$dI%*1T%X<+BJug zqpq#3;O*@_x3;DT=Rnf7w(Ouz0gVv`y!{CZT1d#%puoM235CJIK}eY01qJ>FoTX8P zV^*^^uNc4TC;?|H0riEIRh8o+QX1e0RbN)Q)4CSFpkO-4)R9n)LAOY42`we0rFt?}K6|$c(kL@CV^AZI6ge0h41BCvf&I+MNa^~z8W*T1=TpCL2R@74r&RUz=+9Oi;tEKS7CHqL(`&(S=Y@MVVAdc zb%h7QFhUg2^6@6*VqSnJYk#{p7IqR{GTBu)HNs(|o4v6+AO`gUvVGJ#LnQohq4@at z_j4bID7!+YJGmB&C841{L6h|XNq6fd+9MF~en37t%tm`??)A`LgeIjo`jVHIH#Z;1 zP}9iBlT}y$Pg%Au@}Ky0%kf!RS^o-T5ScD4FSmVHQ!cnp^SP*q4049Rj$5F`kuotw zfF%xrtR*X62o{AF{dQp|54semkm7c2eQM7cu)T`7{v0Mm!6oP#AQ^W1QgPEvyT(6Kh4 zs9mI?8JV&D5;{Q)eA@Y69$V)EZM9p>|8VLL(LMOkq7;%A?cgt^LLbZ{@-7tW*%j>g vTL^HHMC>uIC?zf-{u8|OzyI=O=fqRQ2U}KiZUZ@IiITgkB$Ibr-{=1WHGk}a diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map index bc4a3f2..9705e38 100644 --- a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map +++ b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map @@ -1,7 +1,5 @@ - - - - - + + + diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 index 2a58661..8e3ce5b 100644 --- a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 +++ b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 @@ -1 +1 @@ -a27167a28d67a117ce1231fff4116e66 \ No newline at end of file +b209711f81eab7533da1c6b60f6e8acb \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.png b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.png index 54b13205b73146450b96608e168e0008c6286d77..c7f66b9275eda492d09b7ca66d87aaec757d30e1 100644 GIT binary patch literal 5753 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 literal 11096 zcmb7qby!thx9=tdq(MNsK|s121O!AHq$EU?M!G?eMoPL%1w^Ej?hp`3MY>z0Q&R8P z?{~gG&b{ZJd(Y#3M0xgJYwo$m9KRZon(9h;*p%1^1Oo4#vVt}Ofnp8+cE!SgzpI1O z#NY?Ut5wW^5^+5BTu+N`A zhm;Mz*zi_h)G}02`TBQqYOaMT(L8PE<#JuKNjBQZ;htnGfoxOh_9SB9h&(bf5(@`s z^Os;6Eh7udHE(b4?Wyp0!7k?HVdmoGRCyF(<_+w^vI4lBZaVgXmgHd@g%ivSo#cCc zJgtv5$4arTU%%tmG?2LG_4n$xmbUieJpo@|-w!5@db`bEzp8MWwNRJnl?Ev=R*IEz zJ)3O^Wx1d7X!UFItKKJMwVPkF0(K`T1Ut!jJ$H;(*4CCa#+PBY5oF++yWyQribLiLRW~n%p@Mq1fOcBS|`S~b_;abOe zVX+%TD);X%uC6}iZ7I%5pRW+G4zpq5=O+#g4OLcE{p`Ej9Dd`L`lFx2`CiAP`itx9 zm~e5`Y;n@#<6}giklom$nL1~=i?MRGv*U3yhGdoajEt8p{uhsja-?4Mt!ftQA_6~r z;G7BgdxeFC6sf`s$cPFH!az_G;=! z=B(E9U$?z{eVHUBsa@)+d0H>|-Ndsev!+MlTJ_=Cr|Gr){o{*E!H+KCvDJ2Yc9=hE zt7Tw-Rc#b=aNv@ZlCreYo7i!@{OT1UR3X;(!&c$Yh`evs74DmQekYSw3fL6iKkfKmM z`(?G=`0IuSN}VG0ySBC*x*W-bT}N#|&ZetdlV3j&$T;U|OJ+dcEQp`xQhQ@BmAF)=ZZHbyXcT22}9X~fYH z5wWpjjY;3mt6B8Qj3a;kv~Ip9oU^_^X_d>sz<>fPPUSHRQ($Z_xSty0pjU2+ck9-z zkkHV@#c;ZA_}#0Nl(2<`N2yva*2>&J2jBUrG6%v`tS_RaRCa0;T=W zA5B%+h&n9<_GZ0^-RPO8^1#b5=Un*p>*ZXtFHZT@<)x;f;iUNm0Y3h-!yIL1IUgT! z>B~L&2nEKFu&|E7L3Kwe9v+^>UH)`jJUl!$cJ}s#_Tb|h-=F#6(cRDN?W@>p7+Nn6 za5_3WkLRdFo#m=}*CM6}!5BU41L&2=?KIPrJcZIuz-+J!OIk4j5U}F!r z1_bLjbB^Op!LOR0Wr^m`2NN?T@zu0Z1yE;D(hP%N{UL_@kgyP&>f}^519YZOE zy*Xaq6HOtou(lR#f$DF(y!V>^g-DJOO7o z9@|p|iG2y z4a7uRHa6_DP2MAgR};T}jh5(|m~b_fy?aNWvmW!TT$iKx!-r_EoTBq{A4Wz>ndg%J zXRE0l!a_nqZ#CJbNE;g(GAOC2@M=oR$_f*2X=p!vS};l8s!tbi$;ZOVT3Eflo?;Sg zNq+lib9}d~hg#GrZ*CLHF>R)$riKh^e4@eqc6T&Ia8;EcG|5f1IapJTL``v~>WYil zpS^Gy1Cn6ASd*nkqFx3nF@I*c#B{&6+~d|L;Mx|FA)1C^H3V-Z*^EG(>t0)FwzWr>3U1-kPX9nsFWa_WnUhLDZH|moKpsl$om>riEQRJ&WR`&m)XYOzsuyYMYxgh)GC{gyB)ad5lqD zB#NOB2!qb~w1!8#fk2JM4Bl{$nb@e=M+nYT<`aI3=0E3~RnS!vdY?S8vQpw{K1v{* z|Gr!7K7aIUG-_=y`}S5*Wo5jdpP%)7i@#-DeL<`N<^Zo$kPw<1R9o*8{;7J`Tgc_B zs9>Yybw%Aw)GlT=Gc)tqEUkT4QaK37{?J0ju>Y!$zN0N2YAmucv%ItmKt zL_{=VE+N!3H0+X+SrHL~Ia2ps>a(B@i<_FVV0}-YJR#H?Y1`c0)d0>QKv4p}Mhr8> zNy??Cr@QUUh@sNs4kOqY7+&adkgl$+B|tmho~Z16V&i4Imk!MMI6Wdl(&IkOJGWA-#MnXa& zTdd0{Awi|3rBzW|Tl+4nh<)IxT7kAr=8*VDx8hQN>)w4XfU#!Z--^b@)QE+yn`R-Y zsW-dh=m;teqWe;LrjMkAeyjQUNmdzgwOpM%M6?0C^LigV3HBeGoDc`TfLzql(&Kl! z?}bFZ?)J{fV>$=!&O3Uurbb{ioW|V`Zp+BT6#6w_q)0>L?EVXL za>S><@+hwSk!w%1ueMY<(lYNpTzm4p&-IV|a?VADq*`^g2Wd}t4AnjE)WnjK+jkWe zzlU7E@iX`DaBhq~K8ZAK1Ty!kxmgO2Rx-`l*!U;lm59-UGQ&d!1J|bwYu9U25<_gO zjV7K0=2tl_%6;GB-E3Tz;p^@#DvjJjeN#VQaxxDg_ZQ zUv`-NJ=aHaLPQ2fw@H&1k+ih*-r?bhotchKuxYc;^>Jl2WW(JqGp-K;;?UmN+4;U^ ztl}+?y@OR5fyC13)S;BaOdSy%s++7hrO62iK}}6f{s0fLwKkZ%PIwv1b>U*Mn;Ey4 z`b~NcFQpN}e-X24_j_EX#L|y&0@n-~e5?HGu-a+bED*Fr&J|2SU%IYcW~p*42Mj2g zX5U1mLQ&#V{rJ|{>d+QbKBLbmpAb>iN9@rG=B0Wo@v*TR`n(jYdLp!cl{!B zQlfCwoSsKctm_(|xw;+j+Yl3dyqYdJu}dwM7FC?%Vvci?=$M$(x@DiveAZ{bQ|zlA zht_-Xr+=9BpCAQQzz1(=I{JRUL%XG{L(iG_cSyR@m(Dv;vW#Ea?%=ew|2RP(&ffG) zy-RJn>M}R9N1kHsEU8y^C{lCM)jSmra0#7%`?ycgcJ3zNcv|2-rrF%_YlvVs8ePdLQ8F~XK}N$Z|qPbI^F1jU${fcH#MEG@TTBi+DqXW98MjLiE`ld8RU*&s| zeyJF|Vb!7x|FrW!C3;MBBB86B)N+&vD|`ged$Epdw4y`KqTeM69esmt3s<$C4)xyI zLZv}8k~xaFAbMO+MRo&Oa-&yqQ!Omgd{x77haWt60KM!*ZmwA)>&-Z7u^=c6%1c#d zV)L&_>^{52x*UF2$Kz>&HVLDBNmC^)EwsSyyv{d@7|1dW$%f_h*Jcb;o-3Uch##%H zVWBd-!V2EO{oL8!xiM%tO6~L_@R0hIVw<;VxNENJN}1t}+gvZ~(h~1IMPRrDrmR1@ z#ke)*e5zzCs6V!^)Wd61B(E5;Jzd*5I9N7&TP8yJ-L%i@S5i0^lBWy7inZgm)j+F> zp6xbe3R2=h_a&mDvhxTuZE#};t`im*7|12ux*!^&PfVQIbRIKYb{f5l;D9A(u4Yj4z_J)8r?V zsK*>K+YFDDqqnx~fn#{;>EVtnPD#m@n>3PvECNX=3&#tCfHoS)FoU2VNlzS|l7j=6 zVl?>+!%voXILVelbczQ2kxWQTM9CYl(*csU2c+=v`O(Hits~vi@^Yo;uIUG(YHZ?2 z^!1_K9#BI0+Qsz5k%Y9gu^{KzNU)K9LcsY*uG8Maogd@l7JCcrr_=L)Fp70w0t8sB z4`#nBDd_|yw79s4LPtjz5)$(0>|oWP_F1-**yH8y7%W`e&k;mSM=kX5wgZI#Ru-X@z1^PQmL*|Nvx+lM^3?GOY8>~(1!Gov#>nBHVXye+sT|Zh2 zdsJQ%_2FXtX-@Cyf*ZqCKDs$-hjxwL2_L2MB!KdwY9a5uC8m)PZ7@>n}uX#%-*Tl zv03Fgv`&7HL(q#KZ=_2XbcS=Ad_C?j3g=f98DmGQQe~9~5+5@D?AbH$U}$Row)jua zmGwDOV`F1G9sSgDqQ;bwX%%KcH8D00X^rZ7Y+Y@n``|(Qh)yfvRNkH7=x(s9kmC6L zdzI7GZ~dK}XhrJT{OPVrjB2GRc!RhjQtn?7rFtcxz{^aVrz{D#tP2VXM7{Rt|NQyg zij$b^*m71lC(OlzB3S;~$-|>N`L_O1jSd@$lc(oR)7qxD-wr;^W=wRsJ%Du-eJj(jNAsv@%((_7DCq4G^c$@Ztd~(DYQj=Ge540eXwqdYE28L17_^r={(1NXD^hw(SKPpZhP}w}pj4 z5yRzXGUyl>a-3xHoMaZ4r~4Bv{t`$Z1DBk)ZNc4CrxFbnmDgoO8Qv{dGWyFznu7Nc zf>kXeB;fDGJotKnaJ=7Xz2WsavW6#=E;;ufixnRE1IFid>YnZD>`?yLaPt`-EsZhJ*T*c@wcVR?gEv2$sY3z(L{v{3;U!FQc%imC&tIj#9VyS^g_bpOh zNl6KpT6C`re-JJcK=V9Oo-zK>LfZ?P=4tiirKKPW0n3GnN{fj`PoDFW?Wj~!pL>qS z=$*W(`akzjriO+H%9{>Uly+-$V#xVk4`jap{cRE>bwA4-oQTJ0MMp$V|JE?h=_>QRY31RfS$h1nj8K%(c~@g*usK{f+7;2h)GC@6xj3j*HH7coPufN zrHH7gf7;6T%s8nNa?e39CMS_+m9@_m4h=E*!fc$J=);2SH_6B_Ktcuup+awo zrV_zdKnKjv&t}0*z7$OEgUwv{`7`4B4OUs!#Krt@TH=>%)gm{;%za{?Ib+}<%F4P99=YJvW=kGtQ`*Abc_`|62Gu`u}LaR|m+{NoJs0kGq z(Sr!l=@Ef6fr^A*BRa3)i)yr8gWJBwFy4CC?xs%061+!?xQ60*l1e{1!xOrm8}M9k z=nE4$qt!|38DdRcpVOWo}{C2F$*7zwqCjhh-tW-tdSEg~u^wZE&_4?P(f!H->d#=UWyh@k?PRIwEQM zr8U}a**$VaMs!s2Zj^jP<oTdt-JA4S_K*~<5D?92F>893mrP2Xy7t$-ypug`jhXNNqlBA-uDDl$1OHZ)48iz z!fs<~_MoIBvoc4ZC?lF;Wy;c=I>iVjZ)1JARIe1UE|kC$6zV3HrOvyC=}Rbzh*7BP zct9$?|M&t$#pdb56sm&&~#}IXpEtyUA{(>7ItBo|168@eurGr))lE%SJbqcE-pVAH; z4nqu@MJM5b41W??)ojH{&{%K)5e^Ox+7A61m!{+jw9RK5+zlGsiYHOTfr3K!{S1iK zDEP1Cl<1cumy;9iM2A(|o*yVm;uP`;F(`<-?y2BfO+#AP)I<&ELEhT>-P{EvBbp_n zWHP<}?LpT%<`WYW<8yQ4@Ti2zXY@+-z`a20iLEwaG5A;T7aZIGv7>fzh%vY0p`pKj z^Mikcl>gzH+9Jvgu+bb61&H#isz^*tO)-`;zor935)q{)-D{~4R8v(|y*OQt>m^3& z1u)FwKYbEt2FC3MFiy$;1dGd{B2ZFFs&{ZO7Kt%HG?*A)gMB)(94EtF<#^RF3FfyP zK%vj>16|!$3XJ)nqv9JIB?<})6TqorPgY@M{Mz6DHZTxzu(wAKv_eH)ot5!5;IoT| zMCyZ;|DNCLPjQ6s`myS50dP9AG~$C z5(PBoe7NoSFZ6M9{KcPSxk5G@-b9s!au;6J1%jL`7xq|`*WDq1(DApVV zPFoXvz>XF{L)5vfVk1+gk01Gw=_-`>U3YgOWN7%~hc1XI2Gjdc2OUq-QvT;rp;8z) zAOy8;8``3xqInv*(q8*rH=SWa5VCG=RdWT=pj#?kR$FV9^AQLf6yz*`ih`2TrrO7S z$+#iu3*771uY;aJ24P?va+@?T+kf&owgp1S0Lc&plDzP{5Xf4z8Z}O8B0R#tNJ>cXOdz@9-j5sZ{p(Ki-(Tv1NQ9SHwKQaKc|2f-OyN6_V zK}DGJ=-M=_s9wssXCM!^F?4tDD%$BO@gZ6|fpy7|xgPkZ1oVC{&Bn`BYom1GX!v-2MCaHOCM z&ic$M?8dp9J;0SUsJ10V$`=Otur`?gxWTI02I6Ue*3s&i34*dLp}sAnzTRF2eSLjK zMh-5n0%*=2UtHMln>718FgREIQ6(6+?)_%^cCre`?b}Q_>%}cCIS~<%NN51LEvQff zi-w)#rAHUkOksDoV(>Pc`3;Eebqx(|gfT2=Ec&)4gscmDAROG0Nh&y&r|p*-ZT^2J zgY|ot8f!a`Qbp5fdnYH)awzSgXe+%BE$yeOt}`h{w?X!cJT|ANr*7`Hs<$BdQ;j1b zCJsVM-I9@tudoI_?}HW49raPji4a~@kuHe)D!;=ADf&rH3`ALY4qsXe0MeRx+s-q`)dp41Y&^Khmw*KckTlU0<2xdX^<<` z^^!nC2d8urQc^Vk8qgq@@~N6L z@qwJB?(d%qB0@q0bl3h|89D^7->H*v>vI|nsbdo9vy~eNwOS*Yy*9L;BSi#~l9Cl( z`;R|)64uNOL2Oa+q?Z_>*2)WN0;!kGFP>kWFSh=@;z2Bwl(!&LBuM`mQv3FS4^Vw@ z8vkD2`Ue}VGU$s(+tW9Ti;Mp?X9CXm|1nY`cN*#eCR=_kQmggnNKpas3STs**;>6H zil#Bs(jt1R%?=3(8l;3Ugt8DLGS`;r*m508zpkNS$uZy}lW^W3ddz>m!4YsTJ}r%H zOQ~eEV|-k{T=9D6k-^y9J5Vxn*0<5`1O2bnAqF#&G@#fXUFE(j4X zh}TNI($SRAe6y9>*}r2?7G;P%QA%9!|GU`J{d-ChmQa^w@ehbS@vGB|JqpkJ6PE2- zB75dqY|^M89NeSmaUKTW&7WsrTBSf6*;-)-JL{a6k$|~1+c>_(_b?dHJnr!a=Az2) zZw3bk>%8_~&q*H~9`bo?8I*kW^zrs?2Wb!dM9zB{cqe&w1wRZ;{I_u^aX!SM)bH5~ zr_z6Yf;8db1Jvs3wWjHdX32}KPs+;5ZP3~n5_|V1EaD7*3~Fx?V~$v)arD}JII@P+ znA^B65SZnQ2&A*PxUUNjF#6?7$f1N_euPERPY7=Bd$Prs>AA_D2VChCI3^Le12DIQ z^aUQ)*tY`?hJKnpNy4fQEp~yhUSQM;qS3XMn-(kvnGkSdkD?c8B&zbui~ACf>N(j|+JF=jtL+mGzCx-?O2&qqdO|$aBX`9QkE@ zJQbi{0i2B@IDFa`7EEyEgrcHbc+{e=AP!NyckkZH=H`7kf=O9foT`EUmo&A1ZPrKT ze-fh>mlrW)d1MTKSrJ6Y65INftzsy9#PYj-j&%bQOqQSx#F{!DIFQd-z2yfWW0tVyC0 z(oGmi`2GgW<~(2*Siv6m;aS+5ULl8$9?TVf4a~6f6j2E=(#9VhgYx_ECU(deSI58A zyc2^`!o$9C>66PFT(m2lp+R2FgXuDU{*+@qlX1sFqZxc~qF diff --git a/docs/flippy_8hpp.html b/docs/flippy_8hpp.html index c59e8be..a5347a2 100644 --- a/docs/flippy_8hpp.html +++ b/docs/flippy_8hpp.html @@ -116,65 +116,67 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/flippy_8hpp__incl.map b/docs/flippy_8hpp__incl.map index fcc81a9..2184e00 100644 --- a/docs/flippy_8hpp__incl.map +++ b/docs/flippy_8hpp__incl.map @@ -1,61 +1,63 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/flippy_8hpp__incl.md5 b/docs/flippy_8hpp__incl.md5 index 7c71b7d..cc5a936 100644 --- a/docs/flippy_8hpp__incl.md5 +++ b/docs/flippy_8hpp__incl.md5 @@ -1 +1 @@ -e505848e1dbb1755f57345bbaee1220a \ No newline at end of file +45bdfbbf740053db621e22a8c928d287 \ No newline at end of file diff --git a/docs/flippy_8hpp__incl.png b/docs/flippy_8hpp__incl.png index 2c682f130e9f1fc31d17eb1945d7805c94b72133..c240874a87b9154ccb049613a4c28bd48b988ebd 100644 GIT binary patch literal 86971 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�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 NRg_bch0B<}{$Bw0U;O|8 literal 77270 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 g;Q#TfWd4|lP-1 const& displacement_vector) { pre_update_geometry = get_two_ring_geometry(node_id); - nodes_.displace(node_id, displacement_vector); - update_two_ring_geometry(node_id); + pure_node_move(node_id, displacement_vector); post_update_geometry = get_two_ring_geometry(node_id); update_global_geometry(pre_update_geometry, post_update_geometry); } @@ -1005,7 +1004,7 @@ class Triangulation Nodes nodes_; std::vector bulk_nodes_ids; Geometry global_geometry_; - // Geometry pre_update_geometry, post_update_geometry; + Geometry pre_update_geometry, post_update_geometry; mutable vec3 l0_, l1_; Real verlet_radius{}; Real verlet_radius_squared{}; @@ -1056,6 +1055,13 @@ class Triangulation } + //! Update node positions without calculating global geometry. + void pure_node_move(Index node_id, vec3 const& displacement_vector) + { + nodes_.displace(node_id, displacement_vector); + update_two_ring_geometry(node_id); + } + //! This function calculates distance vectors from a node to all of its neighbors. void update_nn_distance_vectors(Index node_id) { diff --git a/flippy/Triangulator.hpp b/flippy/Triangulator.hpp index 7370c43..c2114d4 100755 --- a/flippy/Triangulator.hpp +++ b/flippy/Triangulator.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "custom_concepts.hpp" #include "vec3.hpp" diff --git a/single_header_flippy/flippy.hpp b/single_header_flippy/flippy.hpp index fdf7d55..ae0730a 100644 --- a/single_header_flippy/flippy.hpp +++ b/single_header_flippy/flippy.hpp @@ -72,6 +72,7 @@ #include #include #include +#include // begin --- custom_concepts.hpp --- @@ -24311,9 +24312,9 @@ class Triangulation static Triangulation experimental_load_sphere_from_stl(std::filesystem::path const& stl_file_path, Real verlet_radius_inp){ std::vector> triangles = implementation::stlSerializer::read_STLSolid_into_triangle_vec(stl_file_path); - std::vector> nodes; + std::vector> nodes; std::vector> unique_nodes; - fp::Triangulation triangulation; + Triangulation triangulation; nodes.resize(triangles.size()/2 + 2); for (Index i=0; implementation::stlTriangle &triangle : triangles) { for (unsigned int tr_idx = 0; tr_idx < 3; ++tr_idx) { @@ -24324,7 +24325,7 @@ class Triangulation triangle[tr_idx].id = i; ++i; unique_nodes.push_back(node); - fp::Node n{}; + Node n{}; n.pos = node.pos; n.id = node.id; nodes[n.id] = n; @@ -24344,10 +24345,6 @@ class Triangulation } } - for(auto &node: nodes){ - std::cout << "node_id: " << node.id << "\n"; - } - Triangulation tr; tr.verlet_radius = verlet_radius_inp; tr.R_initial = 1; @@ -24432,8 +24429,7 @@ class Triangulation void move_node(Index node_id, vec3 const& displacement_vector) { pre_update_geometry = get_two_ring_geometry(node_id); - nodes_.displace(node_id, displacement_vector); - update_two_ring_geometry(node_id); + pure_node_move(node_id, displacement_vector); post_update_geometry = get_two_ring_geometry(node_id); update_global_geometry(pre_update_geometry, post_update_geometry); } @@ -24999,6 +24995,13 @@ class Triangulation } + //! Update node positions without calculating global geometry. + void pure_node_move(Index node_id, vec3 const& displacement_vector) + { + nodes_.displace(node_id, displacement_vector); + update_two_ring_geometry(node_id); + } + //! This function calculates distance vectors from a node to all of its neighbors. void update_nn_distance_vectors(Index node_id) { From 94479f85c86ac2531479bf7b24b0231296a68436 Mon Sep 17 00:00:00 2001 From: dadu Date: Tue, 28 May 2024 13:34:41 +0200 Subject: [PATCH 05/59] changed docs --- docs/_gradient_descent_updater_8h_source.html | 162 ++++ docs/_monte_carlo_updater_8hpp.html | 95 +- docs/_monte_carlo_updater_8hpp__dep__incl.map | 5 + docs/_monte_carlo_updater_8hpp__dep__incl.md5 | 1 + docs/_monte_carlo_updater_8hpp__dep__incl.png | Bin 0 -> 4436 bytes docs/_monte_carlo_updater_8hpp__incl.dot | 65 -- docs/_monte_carlo_updater_8hpp__incl.map | 62 ++ docs/_monte_carlo_updater_8hpp__incl.md5 | 1 + docs/_monte_carlo_updater_8hpp__incl.png | Bin 0 -> 75348 bytes docs/_monte_carlo_updater_8hpp_source.html | 26 +- docs/_nodes_8hpp.html | 66 +- docs/_nodes_8hpp.js | 2 +- docs/_nodes_8hpp__dep__incl.dot | 16 - docs/_nodes_8hpp__dep__incl.map | 14 + docs/_nodes_8hpp__dep__incl.md5 | 1 + docs/_nodes_8hpp__dep__incl.png | Bin 0 -> 21969 bytes docs/_nodes_8hpp__incl.dot | 26 - docs/_nodes_8hpp__incl.map | 21 + docs/_nodes_8hpp__incl.md5 | 1 + docs/_nodes_8hpp__incl.png | Bin 0 -> 21810 bytes docs/_nodes_8hpp_source.html | 36 +- docs/_triangulation_8hpp.html | 91 +- docs/_triangulation_8hpp__dep__incl.dot | 12 - docs/_triangulation_8hpp__dep__incl.map | 10 + docs/_triangulation_8hpp__dep__incl.md5 | 1 + docs/_triangulation_8hpp__dep__incl.png | Bin 0 -> 13200 bytes docs/_triangulation_8hpp__incl.dot | 59 -- docs/_triangulation_8hpp__incl.map | 56 ++ docs/_triangulation_8hpp__incl.md5 | 1 + docs/_triangulation_8hpp__incl.png | Bin 0 -> 63373 bytes docs/_triangulation_8hpp_source.html | 334 ++++--- docs/_triangulator_8hpp.html | 64 +- docs/_triangulator_8hpp__dep__incl.dot | 14 - docs/_triangulator_8hpp__dep__incl.map | 12 + docs/_triangulator_8hpp__dep__incl.md5 | 1 + docs/_triangulator_8hpp__dep__incl.png | Bin 0 -> 16018 bytes docs/_triangulator_8hpp__incl.dot | 29 - docs/_triangulator_8hpp__incl.map | 26 + docs/_triangulator_8hpp__incl.md5 | 1 + docs/_triangulator_8hpp__incl.png | Bin 0 -> 28115 bytes docs/_triangulator_8hpp_source.html | 26 +- docs/annotated.html | 40 +- docs/annotated_dup.js | 1 + docs/classes.html | 23 +- ...p_1_1_gradient_decent_updater-members.html | 123 +++ docs/classfp_1_1_gradient_decent_updater.html | 127 +++ ...assfp_1_1_monte_carlo_updater-members.html | 21 +- docs/classfp_1_1_monte_carlo_updater.html | 383 +++++--- ...3b7ba1838866d8e4968a404deb5c94_icgraph.dot | 11 - ...3b7ba1838866d8e4968a404deb5c94_icgraph.map | 5 + ...3b7ba1838866d8e4968a404deb5c94_icgraph.md5 | 1 + ...3b7ba1838866d8e4968a404deb5c94_icgraph.png | Bin 0 -> 6626 bytes ...064bcdc7395374ab73913e364f1f81_icgraph.dot | 13 - ...064bcdc7395374ab73913e364f1f81_icgraph.map | 7 + ...064bcdc7395374ab73913e364f1f81_icgraph.md5 | 1 + ...064bcdc7395374ab73913e364f1f81_icgraph.png | Bin 0 -> 17735 bytes ...172728bb0764e21ba1e44aa76cce83_icgraph.dot | 15 - ...172728bb0764e21ba1e44aa76cce83_icgraph.map | 9 + ...172728bb0764e21ba1e44aa76cce83_icgraph.md5 | 1 + ...172728bb0764e21ba1e44aa76cce83_icgraph.png | Bin 0 -> 15382 bytes ...de725c1ae28fd44d096ffb82467b598_cgraph.dot | 27 - ...de725c1ae28fd44d096ffb82467b598_cgraph.map | 28 + ...de725c1ae28fd44d096ffb82467b598_cgraph.md5 | 1 + ...de725c1ae28fd44d096ffb82467b598_cgraph.png | Bin 0 -> 45696 bytes ...19b68a956bf4875eecab53dbc950a57_cgraph.dot | 11 - ...19b68a956bf4875eecab53dbc950a57_cgraph.map | 5 + ...19b68a956bf4875eecab53dbc950a57_cgraph.md5 | 1 + ...19b68a956bf4875eecab53dbc950a57_cgraph.png | Bin 0 -> 6574 bytes ...3e40c3b93bf2bf6f2b08291357503be_cgraph.dot | 23 - ...3e40c3b93bf2bf6f2b08291357503be_cgraph.map | 15 + ...3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 | 1 + ...3e40c3b93bf2bf6f2b08291357503be_cgraph.png | Bin 0 -> 36040 bytes ...f28ad26646a0e87dce57eed5ca5047c_cgraph.dot | 27 - ...f28ad26646a0e87dce57eed5ca5047c_cgraph.map | 28 + ...f28ad26646a0e87dce57eed5ca5047c_cgraph.md5 | 1 + ...f28ad26646a0e87dce57eed5ca5047c_cgraph.png | Bin 0 -> 45696 bytes ...85050d8f094aa3d577df33eac9242d_icgraph.dot | 13 - ...85050d8f094aa3d577df33eac9242d_icgraph.map | 7 + ...85050d8f094aa3d577df33eac9242d_icgraph.md5 | 1 + ...85050d8f094aa3d577df33eac9242d_icgraph.png | Bin 0 -> 17678 bytes ...a3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.dot | 13 - ...a3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.map | 7 + ...a3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.md5 | 1 + ...a3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.png | Bin 0 -> 20253 bytes ...3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.dot | 11 - ...3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.map | 5 + ...3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.md5 | 1 + ...3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.png | Bin 0 -> 9475 bytes docs/classfp_1_1_triangulation-members.html | 21 +- docs/classfp_1_1_triangulation.html | 719 ++++++++------ ...ssfp_1_1_triangulation__inherit__graph.dot | 10 - ...ssfp_1_1_triangulation__inherit__graph.map | 5 + ...ssfp_1_1_triangulation__inherit__graph.md5 | 1 + ...ssfp_1_1_triangulation__inherit__graph.png | Bin 0 -> 11009 bytes ...77d1be6c31f16241e9035c5a0f93652_cgraph.dot | 11 - ...77d1be6c31f16241e9035c5a0f93652_cgraph.map | 5 + ...77d1be6c31f16241e9035c5a0f93652_cgraph.md5 | 1 + ...77d1be6c31f16241e9035c5a0f93652_cgraph.png | Bin 0 -> 6238 bytes ...7d1be6c31f16241e9035c5a0f93652_icgraph.dot | 15 - ...7d1be6c31f16241e9035c5a0f93652_icgraph.map | 9 + ...7d1be6c31f16241e9035c5a0f93652_icgraph.md5 | 1 + ...7d1be6c31f16241e9035c5a0f93652_icgraph.png | Bin 0 -> 14120 bytes ...ee6051e9db388def8aaed68b1841d4_icgraph.dot | 17 - ...ee6051e9db388def8aaed68b1841d4_icgraph.map | 11 + ...ee6051e9db388def8aaed68b1841d4_icgraph.md5 | 1 + ...ee6051e9db388def8aaed68b1841d4_icgraph.png | Bin 0 -> 17796 bytes ...afce8afd92f1b88fb15ce7d9cb31edd_cgraph.dot | 17 - ...afce8afd92f1b88fb15ce7d9cb31edd_cgraph.map | 18 + ...afce8afd92f1b88fb15ce7d9cb31edd_cgraph.md5 | 1 + ...afce8afd92f1b88fb15ce7d9cb31edd_cgraph.png | Bin 0 -> 30340 bytes ...7b2a1e57f742d1d401eeb09b057beb_icgraph.dot | 17 - ...660cb2bec69afe055843975698cfd0_icgraph.dot | 17 - ...660cb2bec69afe055843975698cfd0_icgraph.map | 11 + ...660cb2bec69afe055843975698cfd0_icgraph.md5 | 1 + ...660cb2bec69afe055843975698cfd0_icgraph.png | Bin 0 -> 17744 bytes ...e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.map | 5 + ...e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.md5 | 1 + ...e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.png | Bin 0 -> 4921 bytes ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.dot | 23 - ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map | 17 + ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 | 1 + ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png | Bin 0 -> 33795 bytes ...d1ec431a7a0040d7963e4297a80faaa_cgraph.dot | 21 - ...d1ec431a7a0040d7963e4297a80faaa_cgraph.map | 22 + ...d1ec431a7a0040d7963e4297a80faaa_cgraph.md5 | 1 + ...d1ec431a7a0040d7963e4297a80faaa_cgraph.png | Bin 0 -> 31724 bytes ...1ec431a7a0040d7963e4297a80faaa_icgraph.dot | 13 - ...1ec431a7a0040d7963e4297a80faaa_icgraph.map | 7 + ...1ec431a7a0040d7963e4297a80faaa_icgraph.md5 | 1 + ...1ec431a7a0040d7963e4297a80faaa_icgraph.png | Bin 0 -> 10836 bytes ...d5763865ac706a2e800ed306d070d68_cgraph.dot | 13 - ...d5763865ac706a2e800ed306d070d68_cgraph.map | 14 + ...d5763865ac706a2e800ed306d070d68_cgraph.md5 | 1 + ...d5763865ac706a2e800ed306d070d68_cgraph.png | Bin 0 -> 21277 bytes ...5763865ac706a2e800ed306d070d68_icgraph.dot | 19 - ...5763865ac706a2e800ed306d070d68_icgraph.map | 13 + ...5763865ac706a2e800ed306d070d68_icgraph.md5 | 1 + ...5763865ac706a2e800ed306d070d68_icgraph.png | Bin 0 -> 24467 bytes ...2af174bd11d3db03de25587638ffeb4_cgraph.dot | 13 - ...2af174bd11d3db03de25587638ffeb4_cgraph.map | 7 + ...2af174bd11d3db03de25587638ffeb4_cgraph.md5 | 1 + ...2af174bd11d3db03de25587638ffeb4_cgraph.png | Bin 0 -> 9318 bytes ...33f13e1fd24b039ca1ad2969b8d267_icgraph.dot | 13 - ...33f13e1fd24b039ca1ad2969b8d267_icgraph.map | 7 + ...33f13e1fd24b039ca1ad2969b8d267_icgraph.md5 | 1 + ...33f13e1fd24b039ca1ad2969b8d267_icgraph.png | Bin 0 -> 10792 bytes ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.dot | 15 - ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.map | 7 + ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 | 1 + ...92685c96cd6a0cdba72b50adf3fb49b_cgraph.png | Bin 0 -> 8050 bytes ...d51f097deab1674fce1800d2f2cf31_icgraph.dot | 11 - ...d51f097deab1674fce1800d2f2cf31_icgraph.map | 5 + ...d51f097deab1674fce1800d2f2cf31_icgraph.md5 | 1 + ...d51f097deab1674fce1800d2f2cf31_icgraph.png | Bin 0 -> 7382 bytes ...5e93af077cc8434bb76a1a4a39f3adf_cgraph.dot | 11 - ...5e93af077cc8434bb76a1a4a39f3adf_cgraph.map | 12 + ...5e93af077cc8434bb76a1a4a39f3adf_cgraph.md5 | 1 + ...5e93af077cc8434bb76a1a4a39f3adf_cgraph.png | Bin 0 -> 16245 bytes ...62c6430c00d719a8ea5a4a3e89715a8_cgraph.dot | 15 - ...62c6430c00d719a8ea5a4a3e89715a8_cgraph.map | 16 + ...62c6430c00d719a8ea5a4a3e89715a8_cgraph.md5 | 1 + ...62c6430c00d719a8ea5a4a3e89715a8_cgraph.png | Bin 0 -> 25438 bytes ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.dot | 15 - ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.map | 9 + ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 | 1 + ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.png | Bin 0 -> 16993 bytes ...47fc218cc1807b7027b069a4239c7db_cgraph.map | 5 + ...47fc218cc1807b7027b069a4239c7db_cgraph.md5 | 1 + ...47fc218cc1807b7027b069a4239c7db_cgraph.png | Bin 0 -> 4921 bytes ...ef436fe4758c409b21a135b329edc17_cgraph.dot | 15 - ...ef436fe4758c409b21a135b329edc17_cgraph.map | 7 + ...ef436fe4758c409b21a135b329edc17_cgraph.md5 | 1 + ...ef436fe4758c409b21a135b329edc17_cgraph.png | Bin 0 -> 7025 bytes ...8102adbe7dab80cda3209844a939e30_cgraph.dot | 13 - ...8102adbe7dab80cda3209844a939e30_cgraph.map | 5 + ...8102adbe7dab80cda3209844a939e30_cgraph.md5 | 1 + ...8102adbe7dab80cda3209844a939e30_cgraph.png | Bin 0 -> 5753 bytes ...102adbe7dab80cda3209844a939e30_icgraph.dot | 15 - ...102adbe7dab80cda3209844a939e30_icgraph.map | 9 + ...102adbe7dab80cda3209844a939e30_icgraph.md5 | 1 + ...102adbe7dab80cda3209844a939e30_icgraph.png | Bin 0 -> 13794 bytes ...b65b7f5974560fc57e20b50cf73b41_icgraph.dot | 11 - ...b65b7f5974560fc57e20b50cf73b41_icgraph.map | 5 + ...b65b7f5974560fc57e20b50cf73b41_icgraph.md5 | 1 + ...b65b7f5974560fc57e20b50cf73b41_icgraph.png | Bin 0 -> 6755 bytes ...lementation_1_1stl_serializer-members.html | 21 +- ...p_1_1implementation_1_1stl_serializer.html | 23 +- ...mplementation_1_1stl_triangle-members.html | 21 +- ...sfp_1_1implementation_1_1stl_triangle.html | 40 +- ...mentation_1_1stl_triangle__coll__graph.dot | 10 - ...mentation_1_1stl_triangle__coll__graph.map | 5 + ...mentation_1_1stl_triangle__coll__graph.md5 | 1 + ...mentation_1_1stl_triangle__coll__graph.png | Bin 0 -> 7736 bytes docs/classfp_1_1vec3-members.html | 43 +- docs/classfp_1_1vec3.html | 445 +++++---- docs/classfp_1_1vec3__coll__graph.dot | 10 - docs/classfp_1_1vec3__coll__graph.map | 5 + docs/classfp_1_1vec3__coll__graph.md5 | 1 + docs/classfp_1_1vec3__coll__graph.png | Bin 0 -> 4222 bytes ...522af9d50779abf605b8be03e146a5f_cgraph.dot | 10 - ...522af9d50779abf605b8be03e146a5f_cgraph.map | 4 + ...522af9d50779abf605b8be03e146a5f_cgraph.md5 | 1 + ...522af9d50779abf605b8be03e146a5f_cgraph.png | Bin 0 -> 2928 bytes ...22af9d50779abf605b8be03e146a5f_icgraph.dot | 10 - ...22af9d50779abf605b8be03e146a5f_icgraph.map | 4 + ...22af9d50779abf605b8be03e146a5f_icgraph.md5 | 1 + ...22af9d50779abf605b8be03e146a5f_icgraph.png | Bin 0 -> 2931 bytes ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.dot | 15 - ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.map | 29 + ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.md5 | 1 + ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.png | Bin 0 -> 51538 bytes ...484a50de6cbbadfa7b04d4352410a10_cgraph.dot | 13 - ...484a50de6cbbadfa7b04d4352410a10_cgraph.map | 7 + ...484a50de6cbbadfa7b04d4352410a10_cgraph.md5 | 1 + ...484a50de6cbbadfa7b04d4352410a10_cgraph.png | Bin 0 -> 5007 bytes ...568d337f067bd43b63508174f047df2_cgraph.dot | 11 - ...568d337f067bd43b63508174f047df2_cgraph.map | 5 + ...568d337f067bd43b63508174f047df2_cgraph.md5 | 1 + ...568d337f067bd43b63508174f047df2_cgraph.png | Bin 0 -> 3864 bytes ...68d337f067bd43b63508174f047df2_icgraph.dot | 11 - ...68d337f067bd43b63508174f047df2_icgraph.map | 19 + ...68d337f067bd43b63508174f047df2_icgraph.md5 | 1 + ...68d337f067bd43b63508174f047df2_icgraph.png | Bin 0 -> 37245 bytes ...f4f85470de85d92876fe2c93ea0f425_cgraph.dot | 11 - ...f4f85470de85d92876fe2c93ea0f425_cgraph.map | 5 + ...f4f85470de85d92876fe2c93ea0f425_cgraph.md5 | 1 + ...f4f85470de85d92876fe2c93ea0f425_cgraph.png | Bin 0 -> 4594 bytes ...4d6fa0ceec87d5a26cac17560f1d7c_icgraph.map | 17 + ...4d6fa0ceec87d5a26cac17560f1d7c_icgraph.md5 | 1 + ...4d6fa0ceec87d5a26cac17560f1d7c_icgraph.png | Bin 0 -> 32670 bytes docs/clipboard.js | 61 ++ .../conceptfp_1_1floating__point__number.html | 23 +- docs/conceptfp_1_1indexing__number.html | 23 +- docs/concepts.html | 25 +- docs/cookie.js | 58 ++ docs/custom__concepts_8hpp.html | 58 +- docs/custom__concepts_8hpp__dep__incl.dot | 31 - docs/custom__concepts_8hpp__dep__incl.map | 30 + docs/custom__concepts_8hpp__dep__incl.md5 | 1 + docs/custom__concepts_8hpp__dep__incl.png | Bin 0 -> 58697 bytes docs/custom__concepts_8hpp__incl.dot | 10 - docs/custom__concepts_8hpp__incl.map | 5 + docs/custom__concepts_8hpp__incl.md5 | 1 + docs/custom__concepts_8hpp__incl.png | Bin 0 -> 4357 bytes docs/custom__concepts_8hpp_source.html | 26 +- docs/dir_000001_000003.html | 21 +- .../dir_34e9a5f624ac092a9ae2401c28d616d7.html | 21 +- .../dir_4f4e61201b043a278e63eb62d89bbefb.html | 25 +- ...r_4f4e61201b043a278e63eb62d89bbefb_dep.dot | 12 - ...r_4f4e61201b043a278e63eb62d89bbefb_dep.map | 4 + ...r_4f4e61201b043a278e63eb62d89bbefb_dep.md5 | 1 + ...r_4f4e61201b043a278e63eb62d89bbefb_dep.png | Bin 0 -> 3028 bytes .../dir_6b186b4a3fa96a5ae1faf2feaa17366f.html | 29 +- docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.js | 1 + ...r_6b186b4a3fa96a5ae1faf2feaa17366f_dep.dot | 14 - ...r_6b186b4a3fa96a5ae1faf2feaa17366f_dep.map | 6 + ...r_6b186b4a3fa96a5ae1faf2feaa17366f_dep.md5 | 1 + ...r_6b186b4a3fa96a5ae1faf2feaa17366f_dep.png | Bin 0 -> 2690 bytes .../dir_8d6e340cbd427aa421517bf60c41f005.html | 25 +- ...r_8d6e340cbd427aa421517bf60c41f005_dep.dot | 12 - ...r_8d6e340cbd427aa421517bf60c41f005_dep.map | 4 + ...r_8d6e340cbd427aa421517bf60c41f005_dep.md5 | 1 + ...r_8d6e340cbd427aa421517bf60c41f005_dep.png | Bin 0 -> 2110 bytes docs/doxygen.css | 271 +++++- docs/doxygen_crawl.html | 362 +++++++ docs/dynsections.js | 326 ++++--- docs/files.html | 40 +- docs/flippy_8hpp.html | 92 +- docs/flippy_8hpp__incl.dot | 66 -- docs/flippy_8hpp__incl.map | 70 ++ docs/flippy_8hpp__incl.md5 | 1 + docs/flippy_8hpp__incl.png | Bin 0 -> 107714 bytes docs/flippy_8hpp_source.html | 26 +- docs/functions.html | 21 +- docs/functions_func.html | 21 +- docs/functions_rela.html | 21 +- docs/functions_vars.html | 21 +- docs/globals.html | 21 +- docs/globals_defs.html | 21 +- docs/graph_legend.dot | 24 - docs/graph_legend.html | 21 +- docs/graph_legend.md5 | 1 + docs/graph_legend.png | Bin 0 -> 22211 bytes docs/group___globals.html | 89 +- docs/group___globals.js | 2 +- ...171e60ff447e5c0776969445616702_icgraph.dot | 11 - ...171e60ff447e5c0776969445616702_icgraph.map | 5 + ...171e60ff447e5c0776969445616702_icgraph.md5 | 1 + ...171e60ff447e5c0776969445616702_icgraph.png | Bin 0 -> 5582 bytes docs/group__my_concepts.html | 21 +- docs/index.html | 22 +- docs/menu.js | 38 +- docs/namespacefp.html | 43 +- docs/namespacefp.js | 3 +- docs/namespacefp_1_1implementation.html | 27 +- docs/namespacemembers.html | 23 +- docs/namespacemembers_enum.html | 21 +- docs/namespacemembers_eval.html | 21 +- docs/namespacemembers_func.html | 21 +- docs/namespacemembers_type.html | 23 +- docs/namespacemembers_vars.html | 21 +- docs/namespaces.html | 44 +- docs/navtree.js | 832 ++++++++-------- docs/navtreedata.js | 4 +- docs/navtreeindex0.js | 364 +++---- docs/navtreeindex1.js | 215 ++-- docs/resize.js | 174 ++-- docs/search/all_10.js | 6 +- docs/search/all_11.js | 2 +- docs/search/all_12.js | 2 +- docs/search/all_13.js | 2 +- docs/search/all_2.js | 2 +- docs/search/all_5.js | 2 +- docs/search/all_6.js | 5 +- docs/search/all_8.js | 2 +- docs/search/all_b.js | 4 +- docs/search/all_c.js | 15 +- docs/search/all_d.js | 10 +- docs/search/classes_1.js | 3 +- docs/search/functions_10.js | 2 +- docs/search/functions_5.js | 2 +- docs/search/functions_6.js | 2 +- docs/search/functions_b.js | 9 +- docs/search/search.js | 916 ++++++++---------- docs/search/typedefs_0.js | 2 +- docs/stl_serializer_8hpp_source.html | 26 +- docs/structfp_1_1_bond_flip_data-members.html | 21 +- docs/structfp_1_1_bond_flip_data.html | 53 +- ...ructfp_1_1_bond_flip_data__coll__graph.dot | 12 - ...ructfp_1_1_bond_flip_data__coll__graph.map | 7 + ...ructfp_1_1_bond_flip_data__coll__graph.md5 | 1 + ...ructfp_1_1_bond_flip_data__coll__graph.png | Bin 0 -> 7913 bytes docs/structfp_1_1_geometry-members.html | 29 +- docs/structfp_1_1_geometry.html | 147 ++- docs/structfp_1_1_geometry__coll__graph.dot | 10 - docs/structfp_1_1_geometry__coll__graph.map | 5 + docs/structfp_1_1_geometry__coll__graph.md5 | 1 + docs/structfp_1_1_geometry__coll__graph.png | Bin 0 -> 7147 bytes docs/structfp_1_1_neighbors-members.html | 21 +- docs/structfp_1_1_neighbors.html | 73 +- docs/structfp_1_1_neighbors__coll__graph.dot | 10 - docs/structfp_1_1_neighbors__coll__graph.map | 5 + docs/structfp_1_1_neighbors__coll__graph.md5 | 1 + docs/structfp_1_1_neighbors__coll__graph.png | Bin 0 -> 5046 bytes ...501864ac7f34bd676aa97d9faf68cc_icgraph.dot | 21 - ...501864ac7f34bd676aa97d9faf68cc_icgraph.map | 15 + ...501864ac7f34bd676aa97d9faf68cc_icgraph.md5 | 1 + ...501864ac7f34bd676aa97d9faf68cc_icgraph.png | Bin 0 -> 25794 bytes docs/structfp_1_1_node-members.html | 23 +- docs/structfp_1_1_node.html | 162 ++-- docs/structfp_1_1_node__coll__graph.dot | 18 - docs/structfp_1_1_node__coll__graph.map | 13 + docs/structfp_1_1_node__coll__graph.md5 | 1 + docs/structfp_1_1_node__coll__graph.png | Bin 0 -> 18541 bytes ...59f64aafa9cd65ff0e5fed21064da3_icgraph.dot | 11 - ...59f64aafa9cd65ff0e5fed21064da3_icgraph.map | 5 + ...59f64aafa9cd65ff0e5fed21064da3_icgraph.md5 | 1 + ...59f64aafa9cd65ff0e5fed21064da3_icgraph.png | Bin 0 -> 4476 bytes ...f3d0a7d0c7425beb820fb453c240ed3_cgraph.dot | 11 - ...f3d0a7d0c7425beb820fb453c240ed3_cgraph.map | 5 + ...f3d0a7d0c7425beb820fb453c240ed3_cgraph.md5 | 1 + ...f3d0a7d0c7425beb820fb453c240ed3_cgraph.png | Bin 0 -> 4628 bytes docs/structfp_1_1_nodes-members.html | 21 +- docs/structfp_1_1_nodes.html | 468 ++++----- docs/structfp_1_1_nodes__coll__graph.dot | 10 - docs/structfp_1_1_nodes__coll__graph.map | 5 + docs/structfp_1_1_nodes__coll__graph.md5 | 1 + docs/structfp_1_1_nodes__coll__graph.png | Bin 0 -> 7067 bytes ...791117fddd2490c8223a74de6f9109_icgraph.dot | 11 - ...791117fddd2490c8223a74de6f9109_icgraph.map | 5 + ...791117fddd2490c8223a74de6f9109_icgraph.md5 | 1 + ...791117fddd2490c8223a74de6f9109_icgraph.png | Bin 0 -> 3686 bytes ...4a196ade9731f70eeed6446b32854ca_cgraph.dot | 11 - ...4a196ade9731f70eeed6446b32854ca_cgraph.map | 5 + ...4a196ade9731f70eeed6446b32854ca_cgraph.md5 | 1 + ...4a196ade9731f70eeed6446b32854ca_cgraph.png | Bin 0 -> 3809 bytes ...304df70878d39c9c55ce6cba0cec3d_icgraph.dot | 13 - ...304df70878d39c9c55ce6cba0cec3d_icgraph.map | 7 + ...304df70878d39c9c55ce6cba0cec3d_icgraph.md5 | 1 + ...304df70878d39c9c55ce6cba0cec3d_icgraph.png | Bin 0 -> 6962 bytes ...3ecc9a931522c8f339dadb2232a528a_cgraph.dot | 11 - ...3ecc9a931522c8f339dadb2232a528a_cgraph.map | 5 + ...3ecc9a931522c8f339dadb2232a528a_cgraph.md5 | 1 + ...3ecc9a931522c8f339dadb2232a528a_cgraph.png | Bin 0 -> 4468 bytes ...c0fd75105d0110c204b2b9c2af5640_icgraph.dot | 13 - ...c0fd75105d0110c204b2b9c2af5640_icgraph.map | 7 + ...c0fd75105d0110c204b2b9c2af5640_icgraph.md5 | 1 + ...c0fd75105d0110c204b2b9c2af5640_icgraph.png | Bin 0 -> 8533 bytes ...efb079f96664cee5698ccdf9e6bc080_cgraph.dot | 11 - ...efb079f96664cee5698ccdf9e6bc080_cgraph.map | 5 + ...efb079f96664cee5698ccdf9e6bc080_cgraph.md5 | 1 + ...efb079f96664cee5698ccdf9e6bc080_cgraph.png | Bin 0 -> 5725 bytes ...8eaef6c3fa8679dfafcb4018573233_icgraph.dot | 11 - ...8eaef6c3fa8679dfafcb4018573233_icgraph.map | 5 + ...8eaef6c3fa8679dfafcb4018573233_icgraph.md5 | 1 + ...8eaef6c3fa8679dfafcb4018573233_icgraph.png | Bin 0 -> 4112 bytes ...5c2e5dd4f3b43b2445b62c400107e9_icgraph.dot | 11 - ...5c2e5dd4f3b43b2445b62c400107e9_icgraph.map | 5 + ...5c2e5dd4f3b43b2445b62c400107e9_icgraph.md5 | 1 + ...5c2e5dd4f3b43b2445b62c400107e9_icgraph.png | Bin 0 -> 4819 bytes ...63d48ecbce98b85747961bbaae82a9_icgraph.dot | 11 - ...63d48ecbce98b85747961bbaae82a9_icgraph.map | 5 + ...63d48ecbce98b85747961bbaae82a9_icgraph.md5 | 1 + ...63d48ecbce98b85747961bbaae82a9_icgraph.png | Bin 0 -> 3540 bytes ...ac33789677da84759647308c5f25da_icgraph.dot | 11 - ...ac33789677da84759647308c5f25da_icgraph.map | 5 + ...ac33789677da84759647308c5f25da_icgraph.md5 | 1 + ...ac33789677da84759647308c5f25da_icgraph.png | Bin 0 -> 3993 bytes ...ab72aa27fd66417ac8d5d0c9d000be6_cgraph.dot | 21 - ...ab72aa27fd66417ac8d5d0c9d000be6_cgraph.map | 15 + ...ab72aa27fd66417ac8d5d0c9d000be6_cgraph.md5 | 1 + ...ab72aa27fd66417ac8d5d0c9d000be6_cgraph.png | Bin 0 -> 23388 bytes ...ementation_1_1raw_s_t_l_solid-members.html | 21 +- ..._1_1implementation_1_1raw_s_t_l_solid.html | 30 +- ...tation_1_1raw_s_t_l_solid__coll__graph.dot | 14 - ...tation_1_1raw_s_t_l_solid__coll__graph.map | 9 + ...tation_1_1raw_s_t_l_solid__coll__graph.md5 | 1 + ...tation_1_1raw_s_t_l_solid__coll__graph.png | Bin 0 -> 12770 bytes ...ntation_1_1raw_s_t_l_triangle-members.html | 21 +- ...1implementation_1_1raw_s_t_l_triangle.html | 28 +- ...ion_1_1raw_s_t_l_triangle__coll__graph.dot | 12 - ...ion_1_1raw_s_t_l_triangle__coll__graph.map | 7 + ...ion_1_1raw_s_t_l_triangle__coll__graph.md5 | 1 + ...ion_1_1raw_s_t_l_triangle__coll__graph.png | Bin 0 -> 9681 bytes ...1_1implementation_1_1stl_node-members.html | 21 +- ...tructfp_1_1implementation_1_1stl_node.html | 30 +- ...mplementation_1_1stl_node__coll__graph.dot | 12 - ...mplementation_1_1stl_node__coll__graph.map | 7 + ...mplementation_1_1stl_node__coll__graph.md5 | 1 + ...mplementation_1_1stl_node__coll__graph.png | Bin 0 -> 8576 bytes docs/tabs.css | 2 +- docs/topics.html | 21 +- docs/utils_8hpp.html | 57 +- docs/utils_8hpp__dep__incl.dot | 15 - docs/utils_8hpp__dep__incl.map | 13 + docs/utils_8hpp__dep__incl.md5 | 1 + docs/utils_8hpp__dep__incl.png | Bin 0 -> 19272 bytes docs/utils_8hpp__incl.dot | 18 - docs/utils_8hpp__incl.map | 13 + docs/utils_8hpp__incl.md5 | 1 + docs/utils_8hpp__incl.png | Bin 0 -> 9834 bytes docs/utils_8hpp_source.html | 59 +- docs/vec3_8hpp.html | 60 +- docs/vec3_8hpp__dep__incl.dot | 26 - docs/vec3_8hpp__dep__incl.map | 24 + docs/vec3_8hpp__dep__incl.md5 | 1 + docs/vec3_8hpp__dep__incl.png | Bin 0 -> 40696 bytes docs/vec3_8hpp__incl.dot | 18 - docs/vec3_8hpp__incl.map | 13 + docs/vec3_8hpp__incl.md5 | 1 + docs/vec3_8hpp__incl.png | Bin 0 -> 12217 bytes docs/vec3_8hpp_source.html | 161 +-- flippy/GradientDescentMinimizer.h | 8 + 453 files changed, 6626 insertions(+), 4983 deletions(-) create mode 100644 docs/_gradient_descent_updater_8h_source.html create mode 100644 docs/_monte_carlo_updater_8hpp__dep__incl.map create mode 100644 docs/_monte_carlo_updater_8hpp__dep__incl.md5 create mode 100644 docs/_monte_carlo_updater_8hpp__dep__incl.png delete mode 100644 docs/_monte_carlo_updater_8hpp__incl.dot create mode 100644 docs/_monte_carlo_updater_8hpp__incl.map create mode 100644 docs/_monte_carlo_updater_8hpp__incl.md5 create mode 100644 docs/_monte_carlo_updater_8hpp__incl.png delete mode 100644 docs/_nodes_8hpp__dep__incl.dot create mode 100644 docs/_nodes_8hpp__dep__incl.map create mode 100644 docs/_nodes_8hpp__dep__incl.md5 create mode 100644 docs/_nodes_8hpp__dep__incl.png delete mode 100644 docs/_nodes_8hpp__incl.dot create mode 100644 docs/_nodes_8hpp__incl.map create mode 100644 docs/_nodes_8hpp__incl.md5 create mode 100644 docs/_nodes_8hpp__incl.png delete mode 100644 docs/_triangulation_8hpp__dep__incl.dot create mode 100644 docs/_triangulation_8hpp__dep__incl.map create mode 100644 docs/_triangulation_8hpp__dep__incl.md5 create mode 100644 docs/_triangulation_8hpp__dep__incl.png delete mode 100644 docs/_triangulation_8hpp__incl.dot create mode 100644 docs/_triangulation_8hpp__incl.map create mode 100644 docs/_triangulation_8hpp__incl.md5 create mode 100644 docs/_triangulation_8hpp__incl.png delete mode 100644 docs/_triangulator_8hpp__dep__incl.dot create mode 100644 docs/_triangulator_8hpp__dep__incl.map create mode 100644 docs/_triangulator_8hpp__dep__incl.md5 create mode 100644 docs/_triangulator_8hpp__dep__incl.png delete mode 100644 docs/_triangulator_8hpp__incl.dot create mode 100644 docs/_triangulator_8hpp__incl.map create mode 100644 docs/_triangulator_8hpp__incl.md5 create mode 100644 docs/_triangulator_8hpp__incl.png create mode 100644 docs/classfp_1_1_gradient_decent_updater-members.html create mode 100644 docs/classfp_1_1_gradient_decent_updater.html delete mode 100644 docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.png delete mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.dot create mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation__inherit__graph.dot create mode 100644 docs/classfp_1_1_triangulation__inherit__graph.map create mode 100644 docs/classfp_1_1_triangulation__inherit__graph.md5 create mode 100644 docs/classfp_1_1_triangulation__inherit__graph.png delete mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a1d7b2a1e57f742d1d401eeb09b057beb_icgraph.dot delete mode 100644 docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.png create mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.png create mode 100644 docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.dot create mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map create mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.png delete mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.png delete mode 100644 docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.dot create mode 100644 docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.map create mode 100644 docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.md5 create mode 100644 docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.png delete mode 100644 docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.dot create mode 100644 docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.map create mode 100644 docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.md5 create mode 100644 docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.png delete mode 100644 docs/classfp_1_1vec3__coll__graph.dot create mode 100644 docs/classfp_1_1vec3__coll__graph.map create mode 100644 docs/classfp_1_1vec3__coll__graph.md5 create mode 100644 docs/classfp_1_1vec3__coll__graph.png delete mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.dot create mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.map create mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.md5 create mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.png delete mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.dot create mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.map create mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.md5 create mode 100644 docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.png delete mode 100644 docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.dot create mode 100644 docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.map create mode 100644 docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.md5 create mode 100644 docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.png delete mode 100644 docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.dot create mode 100644 docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.map create mode 100644 docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.md5 create mode 100644 docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.png delete mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.dot create mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.map create mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.md5 create mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.png delete mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.dot create mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.map create mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.md5 create mode 100644 docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.png delete mode 100644 docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.dot create mode 100644 docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.map create mode 100644 docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.md5 create mode 100644 docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.png create mode 100644 docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.map create mode 100644 docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.md5 create mode 100644 docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.png create mode 100644 docs/clipboard.js create mode 100644 docs/cookie.js delete mode 100644 docs/custom__concepts_8hpp__dep__incl.dot create mode 100644 docs/custom__concepts_8hpp__dep__incl.map create mode 100644 docs/custom__concepts_8hpp__dep__incl.md5 create mode 100644 docs/custom__concepts_8hpp__dep__incl.png delete mode 100644 docs/custom__concepts_8hpp__incl.dot create mode 100644 docs/custom__concepts_8hpp__incl.map create mode 100644 docs/custom__concepts_8hpp__incl.md5 create mode 100644 docs/custom__concepts_8hpp__incl.png delete mode 100644 docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.dot create mode 100644 docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.map create mode 100644 docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.md5 create mode 100644 docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.png delete mode 100644 docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.dot create mode 100644 docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.map create mode 100644 docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.md5 create mode 100644 docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.png delete mode 100644 docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.dot create mode 100644 docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.map create mode 100644 docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.md5 create mode 100644 docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.png create mode 100644 docs/doxygen_crawl.html delete mode 100644 docs/flippy_8hpp__incl.dot create mode 100644 docs/flippy_8hpp__incl.map create mode 100644 docs/flippy_8hpp__incl.md5 create mode 100644 docs/flippy_8hpp__incl.png delete mode 100644 docs/graph_legend.dot create mode 100644 docs/graph_legend.md5 create mode 100644 docs/graph_legend.png delete mode 100644 docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.dot create mode 100644 docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.map create mode 100644 docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.md5 create mode 100644 docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.png delete mode 100644 docs/structfp_1_1_bond_flip_data__coll__graph.dot create mode 100644 docs/structfp_1_1_bond_flip_data__coll__graph.map create mode 100644 docs/structfp_1_1_bond_flip_data__coll__graph.md5 create mode 100644 docs/structfp_1_1_bond_flip_data__coll__graph.png delete mode 100644 docs/structfp_1_1_geometry__coll__graph.dot create mode 100644 docs/structfp_1_1_geometry__coll__graph.map create mode 100644 docs/structfp_1_1_geometry__coll__graph.md5 create mode 100644 docs/structfp_1_1_geometry__coll__graph.png delete mode 100644 docs/structfp_1_1_neighbors__coll__graph.dot create mode 100644 docs/structfp_1_1_neighbors__coll__graph.map create mode 100644 docs/structfp_1_1_neighbors__coll__graph.md5 create mode 100644 docs/structfp_1_1_neighbors__coll__graph.png delete mode 100644 docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.dot create mode 100644 docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.map create mode 100644 docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.md5 create mode 100644 docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.png delete mode 100644 docs/structfp_1_1_node__coll__graph.dot create mode 100644 docs/structfp_1_1_node__coll__graph.map create mode 100644 docs/structfp_1_1_node__coll__graph.md5 create mode 100644 docs/structfp_1_1_node__coll__graph.png delete mode 100644 docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.dot create mode 100644 docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.map create mode 100644 docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.md5 create mode 100644 docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.png delete mode 100644 docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.dot create mode 100644 docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.map create mode 100644 docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.md5 create mode 100644 docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.png delete mode 100644 docs/structfp_1_1_nodes__coll__graph.dot create mode 100644 docs/structfp_1_1_nodes__coll__graph.map create mode 100644 docs/structfp_1_1_nodes__coll__graph.md5 create mode 100644 docs/structfp_1_1_nodes__coll__graph.png delete mode 100644 docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.map create mode 100644 docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.dot create mode 100644 docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.map create mode 100644 docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.md5 create mode 100644 docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.png delete mode 100644 docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.map create mode 100644 docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.dot create mode 100644 docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.map create mode 100644 docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.md5 create mode 100644 docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.png delete mode 100644 docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.map create mode 100644 docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.dot create mode 100644 docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.map create mode 100644 docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.md5 create mode 100644 docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.png delete mode 100644 docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.map create mode 100644 docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.map create mode 100644 docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.map create mode 100644 docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.dot create mode 100644 docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.map create mode 100644 docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.md5 create mode 100644 docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.png delete mode 100644 docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.dot create mode 100644 docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.map create mode 100644 docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.md5 create mode 100644 docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.png delete mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.dot create mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.map create mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.md5 create mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.png delete mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.dot create mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.map create mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.md5 create mode 100644 docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.png delete mode 100644 docs/structfp_1_1implementation_1_1stl_node__coll__graph.dot create mode 100644 docs/structfp_1_1implementation_1_1stl_node__coll__graph.map create mode 100644 docs/structfp_1_1implementation_1_1stl_node__coll__graph.md5 create mode 100644 docs/structfp_1_1implementation_1_1stl_node__coll__graph.png delete mode 100644 docs/utils_8hpp__dep__incl.dot create mode 100644 docs/utils_8hpp__dep__incl.map create mode 100644 docs/utils_8hpp__dep__incl.md5 create mode 100644 docs/utils_8hpp__dep__incl.png delete mode 100644 docs/utils_8hpp__incl.dot create mode 100644 docs/utils_8hpp__incl.map create mode 100644 docs/utils_8hpp__incl.md5 create mode 100644 docs/utils_8hpp__incl.png delete mode 100644 docs/vec3_8hpp__dep__incl.dot create mode 100644 docs/vec3_8hpp__dep__incl.map create mode 100644 docs/vec3_8hpp__dep__incl.md5 create mode 100644 docs/vec3_8hpp__dep__incl.png delete mode 100644 docs/vec3_8hpp__incl.dot create mode 100644 docs/vec3_8hpp__incl.map create mode 100644 docs/vec3_8hpp__incl.md5 create mode 100644 docs/vec3_8hpp__incl.png create mode 100644 flippy/GradientDescentMinimizer.h diff --git a/docs/_gradient_descent_updater_8h_source.html b/docs/_gradient_descent_updater_8h_source.html new file mode 100644 index 0000000..ecb5412 --- /dev/null +++ b/docs/_gradient_descent_updater_8h_source.html @@ -0,0 +1,162 @@ + + + + + + + +flippy: flippy/GradientDescentUpdater.h Source File + + + + + + + + + + + + + + + + + + +

+
+
node_idGlobal id of the Node, which is a number between 0 and max_number_of_nodes - 1.
+ + + + + + +
+
flippy +
+
a c++20 package for dynamically triangulated membrane simulations.
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
GradientDescentUpdater.h
+
+
+
1#ifndef FLIPPY_HPP_GRADIENTDESCENTUPDATER_H
+
2#define FLIPPY_HPP_GRADIENTDESCENTUPDATER_H
+
3
+
4#include "custom_concepts.hpp"
+
5#include "Triangulation.hpp"
+
6
+
7namespace fp{
+
8template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters, TriangulationType triangulation_type>
+
+ +
10 static constexpr Real max_float = 3.40282347e+38;
+ +
12 EnergyFunctionParameters const& prms;
+
13 std::function<Real(fp::Node<Real, Index> const&, fp::Triangulation<Real, Index, triangulation_type> const&, EnergyFunctionParameters const&)> energy_function;
+
14 Real min_bond_length_square{0.}, max_bond_length_square{max_float};
+
15 unsigned long move_attempt{0}, bond_length_move_rejection{0},move_back{0};
+
16 unsigned long flip_attempt{0}, bond_length_flip_rejection{0}, flip_back{0};
+
17
+
18private:
+ +
20 EnergyFunctionParameters const& prms_inp,
+
21 std::function<Real(fp::Node<Real, Index> const&, fp::Triangulation<Real, Index, triangulation_type> const&, EnergyFunctionParameters const&)> energy_function_inp,
+
22 Real min_bond_length, Real max_bond_length)
+
23 :triangulation(triangulation_inp), prms(prms_inp), energy_function(energy_function_inp),
+
24 min_bond_length_square(min_bond_length*min_bond_length), max_bond_length_square(max_bond_length*max_bond_length)
+
25 {}
+
26
+
27
+
28
+
29};
+
+
30}
+
31
+
32#endif
+
This file contains the fp::Triangulation class and several related helper classes....
+
Definition GradientDescentUpdater.h:9
+
Implementation of Triangulation of two-dimensional surfaces in 3D.
Definition Triangulation.hpp:297
+
This file contains the concepts that are costomly defined for the flippy class templates.
+
Definition custom_concepts.hpp:8
+
A data structure containing all geometric and topological information associated with a node.
Definition Nodes.hpp:30
+
+
+ + + + diff --git a/docs/_monte_carlo_updater_8hpp.html b/docs/_monte_carlo_updater_8hpp.html index 49f038c..d6c5661 100644 --- a/docs/_monte_carlo_updater_8hpp.html +++ b/docs/_monte_carlo_updater_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/MonteCarloUpdater.hpp File Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -116,6 +123,78 @@ Include dependency graph for MonteCarloUpdater.hpp:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +

Go to the source code of this file.

@@ -128,7 +207,7 @@ - +

Namespaces

namespace  fp
namespace  fp
 

Detailed Description

@@ -139,7 +218,7 @@ diff --git a/docs/_monte_carlo_updater_8hpp__dep__incl.map b/docs/_monte_carlo_updater_8hpp__dep__incl.map new file mode 100644 index 0000000..fb33621 --- /dev/null +++ b/docs/_monte_carlo_updater_8hpp__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/_monte_carlo_updater_8hpp__dep__incl.md5 b/docs/_monte_carlo_updater_8hpp__dep__incl.md5 new file mode 100644 index 0000000..4b9365b --- /dev/null +++ b/docs/_monte_carlo_updater_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +38c7b900756c58f95a4303f3e0550b1d \ No newline at end of file diff --git a/docs/_monte_carlo_updater_8hpp__dep__incl.png b/docs/_monte_carlo_updater_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3459950441d28341626b4504866b6c82eeadc0e5 GIT binary patch literal 4436 zcmcIoXH-+&whcv^1VS&;QKU;#_>fQnQWU9zNSA!lyFdV?hbEz^fPm7JA`q$xy$K}x z(Mv!G9YLidQUsN^x$n0{ZmloQc?L?aQOiO0e z#TH#}FVrQ55{oo8uxo_-Vf;{=jJw^H)Y#OX?fn?s%N5 zEVk^0X`Rau$|(}c)fY;OZ9Qa`l@MO1zl8`pBm#})ryN6V?h?zphgd|c>7B_1B0GAy=tXR+JV)RdyuiV*_x2;Nzs z;6|QhbLrBhvdT(oB;(Z7l*+?ZMgg_pf`$}Cp{A}bO+L&5fKS@i2q2uC~MqcY3ZPX8$n3{IA_!OHZZftl~Af9Dqxx7m)DiWD#4opJL zLxeJJ`fbm_lh${6M9r;jZ2WeYdLvw1%PT76Jtm~7sj0up93C7Hj`!Dv*%|gTJ(PIg z;qkm-G7r5<^e?i4Y1RZ%d9N}6JQS^nV66*H82ND$DSL(;~zxS^?d%KG%=0y;Bt3&_x(C7+(RHZ?JPvt*WvM;WV}~* zmP2@=UaG+2LRSnOJ$=_oU)IRX45p?=uJ!i;xvZ>AZYpSJL94O3c?sJvM>(t>od5Vc z{ao-e6dfC@RY6)>9mq{cI{C6!3Lg2qvT`4Q()_@wmV0q=F;s8vg0lC*$#w@V(a%Jj zJ$Nye3&zD2-`uR~NybCZb4qu98!H_d9gVI<5|?6_)jJ1YT^G*k+ufgZ5LH(fP;?nY z8;W%oYR8+Hn^P5~uK^jiy$6d}MNX1d6H>w85Q| zlOqJ9gK==gHa4m#DJeNF6Ot2BQ}seaRqY>bUTvF{$3ZEh0*T$Q+2Rf7rcy!2qkMGwU?I{B$C|Vqg`xv|NG~UkjT+dv!j!fZW762(#O|V?)lA2 z|Mc}yyc669Jsk7aymW2C&DB-&=1qpoD-J2IuA`RrhBWj{O<81Z8zBW@?x0x#s7#)p zYA8q~lDM>V4=5CjOw-+ccFYol@ z(@o)Xlk-+rSAU`8_H@h7*;#CLC_iB|e_x+A0zpZ@@F4fE zS#{5Rsvx<)DJc;V6QgNCZR-XEC_Q=dM0%p%1=H;9;OkqXm3;N;Red8P0!YTx+&l(s zuH3`Yyx}jXA=N?Mxw$zSpXge=gn3B;77K0gnWurUv$G3HOBL@<+LMsI)vn&&b7Q5(lefFDZ>MtP6&k|$0YuEk#>Sv* zqH=PujEoHDb$ki-dNUlp+zm!=ZEZCZ0i>?(?h0fvb_Ny!ft2WIO10Bpdth<;hKA$V zyPy$4Y@Qz+JUodpw9HN)pI(9`^(G`F40}{pRCGTaf|oY*Pfl{3J9n;`_(~f@Ngf>W z@bDR4=6`fkm{y?5&BVWn4jlP}>19RZv@+b9p7pfrjYU82(%JtVL3m zVKA7ZT-*1rTzy!9d`#ytnPv&rpD_V)J8 z5vXuM&#C-SM1EWe4#(k+vqmXNT)9H5x!)~~zj5QnVrLXpvts|z?lJ|0SwJl^D~qeO ztqpq2z{C`1SuT2X_t(K*3I! z#9qnj1M31!OOdXR&Q@{BQqw}IB0u&JJ?k1 zU3-#}k^xA%7Xpu5TwG!l;{k(!d_qW`-k8e!YldFyf5z>?RN+X>;!Wx>y9CMmQf3nP#nx(8)?gfDGnYr?YcTh#={?371Wxr(tRE_{@>AN;A0mNi2 zIrnWXGd;c5g9n!w7#KRayTOhOoV=Imjt|0Mn*3LujMShW{A+=sC4NCcx_*B0gZUcF zO|~gu)AYZ(&b6|#B1VopfEeapgLeEmmYRFC4WC^%xX4;*-!}bs1Pcqxhk=2sFLEd} z9UX-@WvtOY?LTP%vT1!QFRpp*M?5QQ*6NA*^FpukuGQKWfEWu>%XzB)fh!g-$7=CE{2L1p`rn3(K}%9fRJ#MOez zN=87w-FF?rVlNx#bxuv)LlOIIZQ^HUY=K5s-m5RsTQ?JDFRQ8|fSz7hT_voCh@|T) zr{0y!C@U|IE-k(M`0-=LiMth~;9p1bIwCBO!@`n{{sQi1VQHy|d=M8$6C4t9uQlD# z?E*IvC>2`&;%II-SyB4xgv6dzBkrly9$XIErzb5A`P`ZLaUypclyuITdxk1A|?yMV^;A8dgBU$@|H zhNd*tqW;Ej8N&;QN?g!CluJrnevlxD;G$vJd$!m(Sf02NdPk?w&jhy>7qNMZFXrQr zn`(QQ!G`w9{CVGw9b;dp!lNuivm6~1xxpGaiK)DGOm{x#dP)=X>C4#G^h=F3%QbE5 zJRhhjyXNh(vQJMKow%fi>P{bY>MiU9k2`Q@zwG~OBI`4)N^^;y+{cfGosq$E5Jph} z!*1zElR7_4UHLGcs(+{)Kb;OyjPu1SZ`!bYdxBVYeHYB8Ni^=D`-`cXSS)|}QRctK z>f7=@TvCyy*fG}UR)fQLi+-1j*nt=crCfjF=?e}y%u{0GkO>WUZ}-4r2~ob*Jr5)2 zs!?)|a?3S4ScmNW`83fs5MIdgrIP?gTbi3OqC27Mqd}6@_2)M*1;Z+IgFNRkG$s60 z@ejhRVe*NHWpVDzsF>aS{6#rB#=XpZmv&vUL4MJ&N~Fa-Pw_}@IYxyhR$9ghN7H$W z8-|6$DiAE&Qs@1&SPgepUq+vOQ-dBxhGZ&7MjxwMURtJ8+!9~?uX+VEqYk|bkBwiZ z3=YNL1AFE6Z{Ga>6-O9-nE@)S_J8dAe{)FoDf2p?m6OwwS;}(CR7=X-dodZx!$XS& zx7fB@-#9R}KgP$$RUS>=PwG05Eofn7W81VtY-jJ*wMl*D0DUMfB~_2&xwd{-n3#}I zgQ7=YuC?;qW^InG`u9chniNV%NN53bH99tyo|P5<`{a-c0_bsfL{Cub?VSVnQ!Ezy zsnPGX_BbGl7(g;yyvZeZPkt(cNAGon!?$Kz;(_|Hb8svIa)3aJ&FI0Y0c%OF_KD@>C zFgUqAv+0_-(My%6*z;VfIx?@^lz7J{C-=fPw+_e-&=HTtF5UCiDTr6o^*)dmywZiCNC{5{ZLmNbyeEg+tUUI7RZ_T zaT&_H;ptg9>+x+P=}LPikaW3#uO?^lWwXdL+nVx@h&^DekwAft7UKnLoCkQ@u3;^c zN{#a=UFW;rm`Q*W3ZOxXY{R&UyVYl>FlTb6tlbl~%SM`5ODc%Jzdw+woqwdNArM*n z)&zrRVqHWcaSIn<35>(ik`p^8CqgnqL`te}HJtVd1siYs(`U~XKYvE2i|RS;uaS;^ ze#sxe_Yw$**CS_?4oS<)OX*GG(!R(_0Wr!`dz+gx)si`g_neAm5!H1BruNLn*gc#Y z-PY79lz-pXcV0W5i3De&qto>A!cJWSB7f;trVt#?4}=Ats(}pE?Z@TX z>nNduVeZA%)i~hog@MU4FE#1~Q}65&1#LXp=%|DD z29!;0Z85015WU0D*`~a2->d;_yM0$Wepq+(M4f4o9nPI&-7O>}1i0rUdBO`rG35UK zz9la3Q-hCSuA+-kM^$mlZ|m=y4fA!tAuJ!v#e0&rJ9vk4b(47?1lnk8Q{B9Ivj(+o zzcJT#;$VJ0A7GJ_7kK9GKYY-i^HRuW6bwHSe){w&?7{_dwMQ*(KB{OwVzy~H`uPt* zu(5!p{C%)K7*O(`*kkQ5e{6WR{!eLZ>&)DxfLk5VWKE$Xn+j6N;o Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="custom_concepts.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$custom__concepts_8hpp.html",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="random",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="Nodes.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_nodes_8hpp.html",tooltip="This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o..."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="vector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node7 [id="edge6_Node000005_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="unordered_set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node8 [id="edge7_Node000005_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="external/json.hpp",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node9 [id="edge8_Node000005_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="vec3.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$vec3_8hpp.html",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node9 -> Node10 [id="edge9_Node000009_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="ostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node9 -> Node11 [id="edge10_Node000009_Node000011",color="steelblue1",style="solid",tooltip=" "]; - Node11 [id="Node000011",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node9 -> Node12 [id="edge11_Node000009_Node000012",color="steelblue1",style="solid",tooltip=" "]; - Node12 [id="Node000012",label="cmath",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node9 -> Node2 [id="edge12_Node000009_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node13 [id="edge13_Node000001_Node000013",color="steelblue1",style="solid",tooltip=" "]; - Node13 [id="Node000013",label="Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node13 -> Node14 [id="edge14_Node000013_Node000014",color="steelblue1",style="solid",tooltip=" "]; - Node14 [id="Node000014",label="optional",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node13 -> Node15 [id="edge15_Node000013_Node000015",color="steelblue1",style="solid",tooltip=" "]; - Node15 [id="Node000015",label="set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node13 -> Node5 [id="edge16_Node000013_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node13 -> Node9 [id="edge17_Node000013_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node13 -> Node16 [id="edge18_Node000013_Node000016",color="steelblue1",style="solid",tooltip=" "]; - Node16 [id="Node000016",label="utilities/utils.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$utils_8hpp.html",tooltip="This file contains helper functions that are used throughout flippy, but are not specific to any give..."]; - Node16 -> Node11 [id="edge19_Node000016_Node000011",color="steelblue1",style="solid",tooltip=" "]; - Node16 -> Node17 [id="edge20_Node000016_Node000017",color="steelblue1",style="solid",tooltip=" "]; - Node17 [id="Node000017",label="fstream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node16 -> Node18 [id="edge21_Node000016_Node000018",color="steelblue1",style="solid",tooltip=" "]; - Node18 [id="Node000018",label="utility",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node16 -> Node19 [id="edge22_Node000016_Node000019",color="steelblue1",style="solid",tooltip=" "]; - Node19 [id="Node000019",label="filesystem",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node16 -> Node20 [id="edge23_Node000016_Node000020",color="steelblue1",style="solid",tooltip=" "]; - Node20 [id="Node000020",label="type_traits",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node13 -> Node21 [id="edge24_Node000013_Node000021",color="steelblue1",style="solid",tooltip=" "]; - Node21 [id="Node000021",label="Triangulator.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulator_8hpp.html",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node21 -> Node22 [id="edge25_Node000021_Node000022",color="steelblue1",style="solid",tooltip=" "]; - Node22 [id="Node000022",label="array",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node21 -> Node6 [id="edge26_Node000021_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node21 -> Node7 [id="edge27_Node000021_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node21 -> Node23 [id="edge28_Node000021_Node000023",color="steelblue1",style="solid",tooltip=" "]; - Node23 [id="Node000023",label="unordered_map",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node21 -> Node2 [id="edge29_Node000021_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node21 -> Node9 [id="edge30_Node000021_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node13 -> Node24 [id="edge31_Node000013_Node000024",color="steelblue1",style="solid",tooltip=" "]; - Node24 [id="Node000024",label="stlSerializer.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$stl_serializer_8hpp_source.html",tooltip=" "]; - Node24 -> Node17 [id="edge32_Node000024_Node000017",color="steelblue1",style="solid",tooltip=" "]; - Node24 -> Node6 [id="edge33_Node000024_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node24 -> Node9 [id="edge34_Node000024_Node000009",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/_monte_carlo_updater_8hpp__incl.map b/docs/_monte_carlo_updater_8hpp__incl.map new file mode 100644 index 0000000..27875c8 --- /dev/null +++ b/docs/_monte_carlo_updater_8hpp__incl.map @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_monte_carlo_updater_8hpp__incl.md5 b/docs/_monte_carlo_updater_8hpp__incl.md5 new file mode 100644 index 0000000..57490f8 --- /dev/null +++ b/docs/_monte_carlo_updater_8hpp__incl.md5 @@ -0,0 +1 @@ +0b2e234a6494b1b9a9166e72fef470a0 \ No newline at end of file diff --git a/docs/_monte_carlo_updater_8hpp__incl.png b/docs/_monte_carlo_updater_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..f335f79d41a317942b7bdb8dccac006907f31429 GIT binary patch literal 75348 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 JtIo3S{RY;|;TQk_ literal 0 HcmV?d00001 diff --git a/docs/_monte_carlo_updater_8hpp_source.html b/docs/_monte_carlo_updater_8hpp_source.html index f1e2543..72d0a72 100644 --- a/docs/_monte_carlo_updater_8hpp_source.html +++ b/docs/_monte_carlo_updater_8hpp_source.html @@ -3,16 +3,18 @@ - + flippy: flippy/MonteCarloUpdater.hpp Source File + - + + @@ -43,28 +45,28 @@
- + + -
@@ -344,7 +346,7 @@ diff --git a/docs/_nodes_8hpp.html b/docs/_nodes_8hpp.html index 1d1a832..7ceb2f9 100644 --- a/docs/_nodes_8hpp.html +++ b/docs/_nodes_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/Nodes.hpp File Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -117,11 +124,46 @@ Include dependency graph for Nodes.hpp:
+ + + + + + + + + + + + + + + + + + + + +
This graph shows which files directly or indirectly include this file:
+ + + + + + + + + + + + + +

Go to the source code of this file.

@@ -137,15 +179,15 @@ - +

Namespaces

namespace  fp
namespace  fp
 
- - - + + +

Typedefs

-using fp::Json = nlohmann::json
 shortening of the nlohmann::json namespace, which is an external open source library bundled by flippy.
 
+using fp::Json = nlohmann::json
 shortening of the nlohmann::json namespace, which is an external open source library bundled by flippy.
 

Detailed Description

This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node of the triangulation and the collection of all nodes of the triangulation, respectively.

@@ -155,7 +197,7 @@ diff --git a/docs/_nodes_8hpp.js b/docs/_nodes_8hpp.js index d9a1bdf..7bad057 100644 --- a/docs/_nodes_8hpp.js +++ b/docs/_nodes_8hpp.js @@ -2,5 +2,5 @@ var _nodes_8hpp = [ [ "fp::Node< Real, Index >", "structfp_1_1_node.html", "structfp_1_1_node" ], [ "fp::Nodes< Real, Index >", "structfp_1_1_nodes.html", "structfp_1_1_nodes" ], - [ "Json", "_nodes_8hpp.html#ga0527b166a9415a6e07381ef4e11ed318", null ] + [ "Json", "_nodes_8hpp.html#ga7bd3848f67a3e8464cd2db3d7b255c04", null ] ]; \ No newline at end of file diff --git a/docs/_nodes_8hpp__dep__incl.dot b/docs/_nodes_8hpp__dep__incl.dot deleted file mode 100644 index 2faddf4..0000000 --- a/docs/_nodes_8hpp__dep__incl.dot +++ /dev/null @@ -1,16 +0,0 @@ -digraph "flippy/Nodes.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/Nodes.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="flippy/MonteCarloUpdater.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_monte_carlo_updater_8hpp.html",tooltip="This file contains the MonteCarloUpdater class template. Together with Triangulation...."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node3 -> Node2 [id="edge3_Node000003_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 -> Node4 [id="edge4_Node000003_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="flippy/flippy.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$flippy_8hpp.html",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; - Node1 -> Node4 [id="edge5_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/_nodes_8hpp__dep__incl.map b/docs/_nodes_8hpp__dep__incl.map new file mode 100644 index 0000000..6637906 --- /dev/null +++ b/docs/_nodes_8hpp__dep__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/_nodes_8hpp__dep__incl.md5 b/docs/_nodes_8hpp__dep__incl.md5 new file mode 100644 index 0000000..3d2fb77 --- /dev/null +++ b/docs/_nodes_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +1b3c86753f7a94350eb5cd83c2cb4865 \ No newline at end of file diff --git a/docs/_nodes_8hpp__dep__incl.png b/docs/_nodes_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..5128565f8c477a09a0da2ed5b7094c4ae429a218 GIT binary patch literal 21969 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 Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="vector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="unordered_set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="external/json.hpp",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="vec3.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$vec3_8hpp.html",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="ostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node7 [id="edge6_Node000005_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node8 [id="edge7_Node000005_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="cmath",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node9 [id="edge8_Node000005_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="custom_concepts.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$custom__concepts_8hpp.html",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node9 -> Node10 [id="edge9_Node000009_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; -} diff --git a/docs/_nodes_8hpp__incl.map b/docs/_nodes_8hpp__incl.map new file mode 100644 index 0000000..48514c2 --- /dev/null +++ b/docs/_nodes_8hpp__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_nodes_8hpp__incl.md5 b/docs/_nodes_8hpp__incl.md5 new file mode 100644 index 0000000..338206f --- /dev/null +++ b/docs/_nodes_8hpp__incl.md5 @@ -0,0 +1 @@ +b89a5c65efed6b5811ccbd4335787b8f \ No newline at end of file diff --git a/docs/_nodes_8hpp__incl.png b/docs/_nodes_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3b762761c0315c133b127eb983db72a339bb1864 GIT binary patch literal 21810 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 - + flippy: flippy/Nodes.hpp Source File + - + + @@ -43,28 +45,28 @@
- + + -
@@ -117,7 +119,7 @@
13#include "vec3.hpp"
14
15namespace fp {
-
16using Json = nlohmann::json;
+
16using Json = nlohmann::json;
18
28template<floating_point_number Real, indexing_number Index>
@@ -229,7 +231,7 @@
242 {
247 }
-
248 explicit Nodes(Json const& node_dict)
+
248 explicit Nodes(Json const& node_dict)
249 {
256 std::vector<Index> nn_ids_temp, verlet_list_temp;
257 data.resize((node_dict.size()));
@@ -411,8 +413,8 @@
538 }
539
-
540 [[nodiscard]] Json make_data() const{
-
545 Json json_data;
+
540 [[nodiscard]] Json make_data() const{
+
545 Json json_data;
546 for (auto& node : data) {
547 json_data[std::to_string(node.id)] = {
548 {"area", node.area},
@@ -462,7 +464,7 @@
Internal implementation of a 3D vector.
Definition vec3.hpp:43
Here we implement the concepts of a positive integer number that is used throughout the code for inde...
Definition custom_concepts.hpp:31
-
nlohmann::json Json
shortening of the nlohmann::json namespace, which is an external open source library bundled by flipp...
Definition Nodes.hpp:16
+
nlohmann::json Json
shortening of the nlohmann::json namespace, which is an external open source library bundled by flipp...
Definition Nodes.hpp:16
Definition custom_concepts.hpp:8
A data structure containing all geometric and topological information associated with a node.
Definition Nodes.hpp:30
vec3< Real > pos
Position of the node in the lab frame.
Definition Nodes.hpp:73
@@ -523,7 +525,7 @@ diff --git a/docs/_triangulation_8hpp.html b/docs/_triangulation_8hpp.html index 427f335..a75c234 100644 --- a/docs/_triangulation_8hpp.html +++ b/docs/_triangulation_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/Triangulation.hpp File Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -122,11 +129,77 @@ Include dependency graph for Triangulation.hpp:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
This graph shows which files directly or indirectly include this file:
+ + + + + + + + + +

Go to the source code of this file.

@@ -147,7 +220,7 @@ - +

Namespaces

namespace  fp
namespace  fp
 
+static constexpr int 

@@ -171,7 +244,7 @@

Variables

-static constexpr int fp::BOND_DONATION_CUTOFF = 4
fp::BOND_DONATION_CUTOFF = 4
 a node needs to have more than the cutoff number of bonds to be allowed to donate one
 
@@ -183,7 +256,7 @@ diff --git a/docs/_triangulation_8hpp__dep__incl.dot b/docs/_triangulation_8hpp__dep__incl.dot deleted file mode 100644 index 3adc59f..0000000 --- a/docs/_triangulation_8hpp__dep__incl.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph "flippy/Triangulation.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="flippy/MonteCarloUpdater.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_monte_carlo_updater_8hpp.html",tooltip="This file contains the MonteCarloUpdater class template. Together with Triangulation...."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="flippy/flippy.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$flippy_8hpp.html",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; -} diff --git a/docs/_triangulation_8hpp__dep__incl.map b/docs/_triangulation_8hpp__dep__incl.map new file mode 100644 index 0000000..421a0ae --- /dev/null +++ b/docs/_triangulation_8hpp__dep__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/_triangulation_8hpp__dep__incl.md5 b/docs/_triangulation_8hpp__dep__incl.md5 new file mode 100644 index 0000000..908b915 --- /dev/null +++ b/docs/_triangulation_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +4566a57fd71ad54fc6abd4c07e53bd7e \ No newline at end of file diff --git a/docs/_triangulation_8hpp__dep__incl.png b/docs/_triangulation_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc1d6b2466b3dc8cf3a844498e8022c340bcf9a GIT binary patch literal 13200 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 G_`d+DUvNzT literal 0 HcmV?d00001 diff --git a/docs/_triangulation_8hpp__incl.dot b/docs/_triangulation_8hpp__incl.dot deleted file mode 100644 index 10b7970..0000000 --- a/docs/_triangulation_8hpp__incl.dot +++ /dev/null @@ -1,59 +0,0 @@ -digraph "flippy/Triangulation.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="optional",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="Nodes.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_nodes_8hpp.html",tooltip="This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o..."]; - Node4 -> Node5 [id="edge4_Node000004_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="vector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node4 -> Node6 [id="edge5_Node000004_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="unordered_set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node4 -> Node7 [id="edge6_Node000004_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="external/json.hpp",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node4 -> Node8 [id="edge7_Node000004_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="vec3.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$vec3_8hpp.html",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node8 -> Node9 [id="edge8_Node000008_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="ostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node8 -> Node10 [id="edge9_Node000008_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node8 -> Node11 [id="edge10_Node000008_Node000011",color="steelblue1",style="solid",tooltip=" "]; - Node11 [id="Node000011",label="cmath",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node8 -> Node12 [id="edge11_Node000008_Node000012",color="steelblue1",style="solid",tooltip=" "]; - Node12 [id="Node000012",label="custom_concepts.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$custom__concepts_8hpp.html",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node12 -> Node13 [id="edge12_Node000012_Node000013",color="steelblue1",style="solid",tooltip=" "]; - Node13 [id="Node000013",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node8 [id="edge13_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node14 [id="edge14_Node000001_Node000014",color="steelblue1",style="solid",tooltip=" "]; - Node14 [id="Node000014",label="utilities/utils.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$utils_8hpp.html",tooltip="This file contains helper functions that are used throughout flippy, but are not specific to any give..."]; - Node14 -> Node10 [id="edge15_Node000014_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node14 -> Node15 [id="edge16_Node000014_Node000015",color="steelblue1",style="solid",tooltip=" "]; - Node15 [id="Node000015",label="fstream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node14 -> Node16 [id="edge17_Node000014_Node000016",color="steelblue1",style="solid",tooltip=" "]; - Node16 [id="Node000016",label="utility",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node14 -> Node17 [id="edge18_Node000014_Node000017",color="steelblue1",style="solid",tooltip=" "]; - Node17 [id="Node000017",label="filesystem",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node14 -> Node18 [id="edge19_Node000014_Node000018",color="steelblue1",style="solid",tooltip=" "]; - Node18 [id="Node000018",label="type_traits",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node19 [id="edge20_Node000001_Node000019",color="steelblue1",style="solid",tooltip=" "]; - Node19 [id="Node000019",label="Triangulator.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulator_8hpp.html",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node19 -> Node20 [id="edge21_Node000019_Node000020",color="steelblue1",style="solid",tooltip=" "]; - Node20 [id="Node000020",label="array",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node19 -> Node5 [id="edge22_Node000019_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node19 -> Node6 [id="edge23_Node000019_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node19 -> Node21 [id="edge24_Node000019_Node000021",color="steelblue1",style="solid",tooltip=" "]; - Node21 [id="Node000021",label="unordered_map",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node19 -> Node12 [id="edge25_Node000019_Node000012",color="steelblue1",style="solid",tooltip=" "]; - Node19 -> Node8 [id="edge26_Node000019_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node22 [id="edge27_Node000001_Node000022",color="steelblue1",style="solid",tooltip=" "]; - Node22 [id="Node000022",label="stlSerializer.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$stl_serializer_8hpp_source.html",tooltip=" "]; - Node22 -> Node15 [id="edge28_Node000022_Node000015",color="steelblue1",style="solid",tooltip=" "]; - Node22 -> Node5 [id="edge29_Node000022_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node22 -> Node8 [id="edge30_Node000022_Node000008",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/_triangulation_8hpp__incl.map b/docs/_triangulation_8hpp__incl.map new file mode 100644 index 0000000..f8d05ae --- /dev/null +++ b/docs/_triangulation_8hpp__incl.map @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_triangulation_8hpp__incl.md5 b/docs/_triangulation_8hpp__incl.md5 new file mode 100644 index 0000000..e0ecf1a --- /dev/null +++ b/docs/_triangulation_8hpp__incl.md5 @@ -0,0 +1 @@ +c977adf36bb5cd76ff35378a78cfae78 \ No newline at end of file diff --git a/docs/_triangulation_8hpp__incl.png b/docs/_triangulation_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..0cc5ad0c7f431fb38e8911a3a2ef6099d847a2b4 GIT binary patch literal 63373 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 Fe*s7PwJQJs literal 0 HcmV?d00001 diff --git a/docs/_triangulation_8hpp_source.html b/docs/_triangulation_8hpp_source.html index 8e3d62d..56ab4cc 100644 --- a/docs/_triangulation_8hpp_source.html +++ b/docs/_triangulation_8hpp_source.html @@ -3,16 +3,18 @@ - + flippy: flippy/Triangulation.hpp Source File + - + + @@ -43,28 +45,28 @@
- + + -
@@ -230,7 +232,7 @@
305
310// [[deprecated("This constructor is deprecated and will be removed in the future. Use Triangulation::load_sphere_from_json() instead.")]]
-
311 Triangulation(Json const& nodes_input, Real verlet_radius_inp):Triangulation(verlet_radius_inp)
+
311 Triangulation(Json const& nodes_input, Real verlet_radius_inp):Triangulation(verlet_radius_inp)
312 {
313 if constexpr(triangulation_type==SPHERICAL_TRIANGULATION) {
314 nodes_ = Nodes<Real, Index>(nodes_input);
@@ -418,7 +420,7 @@
559 return BondFlipData<Index>();
560
561 }else{
- +
562 static_assert(triangulation_type == TriangulationType::SPHERICAL_TRIANGULATION or triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION,
563 "Triangulation type must be either spherical or planar.");
564 }
565 }
@@ -427,107 +429,107 @@
567 //unit-tested
569
-
610 void unflip_bond(Index node_id, Index nn_id, BondFlipData<Index> const& common_nns)
+
610 void unflip_bond(Index node_id, Index nn_id, BondFlipData<Index> const& common_nns)
611 {
- - +
612 flip_bond_unchecked(common_nns.common_nn_0, common_nns.common_nn_1, nn_id, node_id);
+
613 update_diamond_geometry(node_id, nn_id, common_nns.common_nn_0, common_nns.common_nn_1);
614 update_global_geometry(post_update_geometry, pre_update_geometry);
615 }
616
619
- -
638 Index common_nn_j_m_1, Index common_nn_j_p_1)
+
637 BondFlipData<Index> flip_bond_unchecked(Index node_id, Index nn_id,
+
638 Index common_nn_j_m_1, Index common_nn_j_p_1)
639 {
- - -
642 delete_connection_between_nodes_of_old_edge(node_id, nn_id);
-
643 return {.flipped=true, .common_nn_0=common_nn_j_m_1, .common_nn_1=common_nn_j_p_1};
+
640 emplace_before(common_nn_j_m_1, node_id, common_nn_j_p_1);
+
641 emplace_before(common_nn_j_p_1, nn_id, common_nn_j_m_1);
+
642 delete_connection_between_nodes_of_old_edge(node_id, nn_id);
+
643 return {.flipped=true, .common_nn_0=common_nn_j_m_1, .common_nn_1=common_nn_j_p_1};
644 }
645
646 // unit-tested
648
- +
657 void update_bulk_node_geometry(Index node_id)
658 {
-
659 update_nn_distance_vectors(node_id);
+
659 update_nn_distance_vectors(node_id);
660
-
661 Real area_sum = 0.;
-
662 vec3<Real> face_normal_sum{0., 0., 0.}, local_curvature_vec{0., 0., 0.};
- -
664 indexing_number auto nn_number = (Index) nodes_.nn_ids(node_id).size();
+
661 Real area_sum = 0.;
+
662 vec3<Real> face_normal_sum{0., 0., 0.}, local_curvature_vec{0., 0., 0.};
+
663 vec3<Real> face_normal;
+
664 indexing_number auto nn_number = (Index) nodes_.nn_ids(node_id).size();
665 Index j_p_1;
666
- - - +
667 Real face_area, face_normal_norm;
+
668 vec3<Real> ljj_p_1, lij_p_1, lij;
+
669 Real cot_at_j, cot_at_j_p_1;
670
-
671 for (Index j = 0; j<nn_number; ++j) {
+
671 for (Index j = 0; j<nn_number; ++j) {
672 //return j+1 element of ordered_nn_ids unless j has the last value then wrap around and return 0th element
- +
673 j_p_1 = Neighbors<Index>::plus_one(j,nn_number);
674
-
675 lij = nodes_.nn_distances(node_id)[j];
-
676 lij_p_1 = nodes_.nn_distances(node_id)[j_p_1];
-
677 ljj_p_1 = lij_p_1 - lij;
+
675 lij = nodes_.nn_distances(node_id)[j];
+
676 lij_p_1 = nodes_.nn_distances(node_id)[j_p_1];
+
677 ljj_p_1 = lij_p_1 - lij;
678
-
679 cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
-
680 cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
+
679 cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
+
680 cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
681
682
-
683 face_normal = lij.cross(lij_p_1); //nodes_.nn_distances(node_id)[j].cross(nodes_.nn_distances(node_id)[j_p_1]);
- +
683 face_normal = lij.cross(lij_p_1); //nodes_.nn_distances(node_id)[j].cross(nodes_.nn_distances(node_id)[j_p_1]);
+
684 face_normal_norm = face_normal.norm();
685#ifdef DEBUG
-
686 if(face_normal_norm < 1e-10) {
-
687 throw std::runtime_error("A triangle face is degenerate and Area sum is evaluating to "+std::to_string(face_normal_norm)+". This should not happen.");
+
686 if(face_normal_norm < 1e-10) {
+
687 throw std::runtime_error("A triangle face is degenerate and Area sum is evaluating to "+std::to_string(face_normal_norm)+". This should not happen.");
688 }
689#endif
- - - +
690 face_area = mixed_area(lij, lij_p_1, Real(0.5)*face_normal_norm, cot_at_j, cot_at_j_p_1);
+
691 area_sum += face_area;
+
692 face_normal_sum += face_area*face_normal/face_normal_norm;
693
- +
694 local_curvature_vec -= (cot_at_j_p_1*lij + cot_at_j*lij_p_1);
695 }
-
696 nodes_.set_area(node_id, area_sum);
-
697 nodes_.set_volume(node_id, nodes_[node_id].pos.dot(face_normal_sum)/((Real) 3.)); // 18=3*6: 6 has the aforementioned justification. 3 is part of the formula for the tetrahedron volume
-
698 nodes_.set_curvature_vec(node_id, -local_curvature_vec/((Real) 2.*area_sum)); // 2 is part of the formula to calculate the local curvature I just did not divide the vector inside the loop
-
699 nodes_.set_unit_bending_energy(node_id, local_curvature_vec.dot(local_curvature_vec)/((Real) 8.*area_sum)); // 8 is 2*4, where 4 is the square of the above two and the area in the denominator is what remains after canceling. 1/ comes from the pre-factor to bending energy
+
696 nodes_.set_area(node_id, area_sum);
+
697 nodes_.set_volume(node_id, nodes_[node_id].pos.dot(face_normal_sum)/((Real) 3.)); // 18=3*6: 6 has the aforementioned justification. 3 is part of the formula for the tetrahedron volume
+
698 nodes_.set_curvature_vec(node_id, -local_curvature_vec/((Real) 2.*area_sum)); // 2 is part of the formula to calculate the local curvature I just did not divide the vector inside the loop
+
699 nodes_.set_unit_bending_energy(node_id, local_curvature_vec.dot(local_curvature_vec)/((Real) 8.*area_sum)); // 8 is 2*4, where 4 is the square of the above two and the area in the denominator is what remains after canceling. 1/ comes from the pre-factor to bending energy
700
701 };
702
703
705
-
715 [[deprecated("This function is deprecated and will be removed in a future release. It uses expensive function calls and is not recommended for use.")]]
+
715 [[deprecated("This function is deprecated and will be removed in a future release. It uses expensive function calls and is not recommended for use.")]]
- -
717 vec3<Real> const& lij_p_1)
+
716 static std::tuple<Real, vec3<Real>> partial_voronoi_area_and_face_normal_of_node_in_a_triangle(vec3<Real> const& lij,
+
717 vec3<Real> const& lij_p_1)
718 {
-
719 Real area, face_normal_norm;
- +
719 Real area, face_normal_norm;
+
720 vec3<Real> un_noremd_face_normal;
721 //precalculating this normal and its norm will be needed in area calc. If all triangles are oriented as
722 // right-handed, then this normal will point outwards
- - - -
726 return std::make_tuple(area, un_noremd_face_normal);
+
723 un_noremd_face_normal = lij.cross(lij_p_1);
+
724 face_normal_norm = un_noremd_face_normal.norm();
+
725 area = mixed_area(lij, lij_p_1, face_normal_norm/2.);
+
726 return std::make_tuple(area, un_noremd_face_normal);
727 }
728
730
-
748 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1){
-
749 if ((cot_at_j>0.) && (cot_at_j_p_1>0.)) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
-
750 if (lij.dot(lij_p_1)>0) { // cos at i is positive i.e. angle at i is not obtuse
-
751 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/Real(8.);
+
748 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1){
+
749 if ((cot_at_j>0.) && (cot_at_j_p_1>0.)) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
+
750 if (lij.dot(lij_p_1)>0) { // cos at i is positive i.e. angle at i is not obtuse
+
751 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/Real(8.);
752 }
753 else {//obtuse at node i.
-
754 return triangle_area/Real(2.);
+
754 return triangle_area/Real(2.);
755 }
756 }
757 else {//obtuse at node j or j+1.
-
758 return triangle_area/Real(4.);
+
758 return triangle_area/Real(4.);
759 }
760
761 }
@@ -535,24 +537,24 @@
762
763 //unit tested
765
-
774 [[deprecated("This function is deprecated and will be removed in a future release. mixed_area, which does not take precalculated cotangents, performs expensive calculations! Use the alternative mixed_area function!")]]
+
774 [[deprecated("This function is deprecated and will be removed in a future release. mixed_area, which does not take precalculated cotangents, performs expensive calculations! Use the alternative mixed_area function!")]]
-
775 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real const& triangle_area)
+
775 static Real mixed_area(vec3<Real> const& lij, vec3<Real> const& lij_p_1, Real const& triangle_area)
776 {
- +
777 vec3<Real> ljj_p_1 = lij_p_1 - lij;
778
-
779 Real cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
-
780 Real cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
-
781 if ((cot_at_j>Real(0.)) && (cot_at_j_p_1>Real(0.))) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
-
782 if (lij.dot(lij_p_1)>Real(0.)) { // cos at i is positive i.e. angle at i is not obtuse
-
783 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/8.;
+
779 Real cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
+
780 Real cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
+
781 if ((cot_at_j>Real(0.)) && (cot_at_j_p_1>Real(0.))) { // both angles at j and j+1 are smaller than 90 deg so the triangle can only be obtuse at the node
+
782 if (lij.dot(lij_p_1)>Real(0.)) { // cos at i is positive i.e. angle at i is not obtuse
+
783 return (cot_at_j_p_1*lij.dot(lij) + cot_at_j*lij_p_1.dot(lij_p_1))/8.;
784 }
785 else {//obtuse at node i.
-
786 return triangle_area/Real(2.);
+
786 return triangle_area/Real(2.);
787 }
788 }
789 else {//obtuse at node j or j+1.
-
790 return triangle_area/Real(4.);
+
790 return triangle_area/Real(4.);
791 }
792
793 }
@@ -560,28 +562,28 @@
794
796
- +
804 [[nodiscard]] Geometry<Real, Index> get_two_ring_geometry(Index node_id) const
805 {
- -
807 for (auto const& nn_id: nodes_[node_id].nn_ids) {
-
808 trg += nodes_[nn_id];
+
806 Geometry<Real, Index> trg(nodes_[node_id]);
+
807 for (auto const& nn_id: nodes_[node_id].nn_ids) {
+
808 trg += nodes_[nn_id];
809 }
-
810 return trg;
+
810 return trg;
811 }
812
814
- +
820 void update_two_ring_geometry(Index node_id)
821 {
- -
823 update_two_ring_geometry_on_a_boundary_free_triangulation(node_id);
+
822 if constexpr(triangulation_type == TriangulationType::SPHERICAL_TRIANGULATION) {
+
823 update_two_ring_geometry_on_a_boundary_free_triangulation(node_id);
824 }
- -
826 update_two_ring_geometry_on_a_boundary_triangulation(node_id);
+
825 else if constexpr(triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION) {
+
826 update_two_ring_geometry_on_a_boundary_triangulation(node_id);
827 }
828 else {
- +
829 static_assert(triangulation_type == TriangulationType::SPHERICAL_TRIANGULATION || triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION,
830 "Triangulation type is not supported!");
831 }
832 };
@@ -590,14 +592,14 @@
834 // unit-tested
836
- +
850 void scale_node_coordinates(Real x_stretch, Real y_stretch = 1, Real z_stretch = 1)
851 {
-
852 vec3<Real> displ = {0, 0, 0};
-
853 for (auto& node: nodes_.data) {
-
854 displ[0] = node.pos[0]*(x_stretch - 1);
-
855 displ[1] = node.pos[1]*(y_stretch - 1);
-
856 displ[2] = node.pos[2]*(z_stretch - 1);
-
857 move_node(node.id, displ);
+
852 vec3<Real> displ = {0, 0, 0};
+
853 for (auto& node: nodes_.data) {
+
854 displ[0] = node.pos[0]*(x_stretch - 1);
+
855 displ[1] = node.pos[1]*(y_stretch - 1);
+
856 displ[2] = node.pos[2]*(z_stretch - 1);
+
857 move_node(node.id, displ);
858 }
859 }
@@ -605,55 +607,55 @@
861 //Todo unittest
863
- -
884 Index cnn_0, Index cnn_1) const
+
883 [[nodiscard]] Geometry<Real, Index> calculate_diamond_geometry(Index node_id, Index nn_id,
+
884 Index cnn_0, Index cnn_1) const
885 {
- -
887 diamond_geometry += nodes_[nn_id];
-
888 diamond_geometry += nodes_[cnn_0];
-
889 diamond_geometry += nodes_[cnn_1];
-
890 return diamond_geometry;
+
886 Geometry<Real, Index> diamond_geometry(nodes_[node_id]);
+
887 diamond_geometry += nodes_[nn_id];
+
888 diamond_geometry += nodes_[cnn_0];
+
889 diamond_geometry += nodes_[cnn_1];
+
890 return diamond_geometry;
891 };
892
893 //Todo unittest
895
-
914 void update_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
+
914 void update_diamond_geometry(Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
915 {
- + - - + +
920 };
921
922 // Const Viewer Functions
924
-
927 [[nodiscard]] Index size() const { return nodes_.size(); }
+
927 [[nodiscard]] Index size() const { return nodes_.size(); }
929
-
936 const Node<Real, Index>& operator[](Index idx) const { return nodes_.data.at(idx); }
+
936 const Node<Real, Index>& operator[](Index idx) const { return nodes_.data.at(idx); }
938
-
941 const Nodes<Real, Index>& nodes() const { return nodes_; }
+
941 const Nodes<Real, Index>& nodes() const { return nodes_; }
943
-
949 [[nodiscard]] Json make_egg_data() const { return nodes_.make_data(); }
+
949 [[nodiscard]] Json make_egg_data() const { return nodes_.make_data(); }
951
-
954 [[nodiscard]] const Geometry<Real, Index>& global_geometry() const { return global_geometry_; }
+
954 [[nodiscard]] const Geometry<Real, Index>& global_geometry() const { return global_geometry_; }
955
956 //Todo unittest
958
963 {
- -
965 global_geometry_ = empty;
-
966 for (auto node_id: bulk_nodes_ids) {
- -
968 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
+
964 const Geometry<Real, Index> empty{};
+
965 global_geometry_ = empty;
+
966 for (auto node_id: bulk_nodes_ids) {
+ +
968 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
969 }
-
970 for (auto node_id: boundary_nodes_ids_set_) {
- -
972 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
+
970 for (auto node_id: boundary_nodes_ids_set_) {
+ +
972 update_global_geometry(empty, Geometry<Real, Index>(nodes_[node_id]));
973 }
974 }
@@ -661,7 +663,7 @@
977
981 std::set<Index> boundary_nodes_ids_set() const {
-
982 static_assert(triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION, "This function is only implemented for PLANAR_TRIANGULATION.");
+
982 static_assert(triangulation_type == TriangulationType::EXPERIMENTAL_PLANAR_TRIANGULATION, "This function is only implemented for PLANAR_TRIANGULATION.");
983 return boundary_nodes_ids_set_;
984 }
@@ -669,8 +671,8 @@
986 //Todo unittest
988
- -
995 update_nn_distance_vectors(node_id);
+
994 void update_boundary_node_geometry([[maybe_unused]]Index node_id){
+
995 update_nn_distance_vectors(node_id);
996 }
997
@@ -680,11 +682,11 @@
1001private:
1002#endif
1003 Real R_initial;
-
1004 Nodes<Real, Index> nodes_;
+
1004 Nodes<Real, Index> nodes_;
1005 std::vector<Index> bulk_nodes_ids;
-
1006 Geometry<Real, Index> global_geometry_;
-
1007 Geometry<Real, Index> pre_update_geometry, post_update_geometry;
-
1008 mutable vec3<Real> l0_, l1_;
+
1006 Geometry<Real, Index> global_geometry_;
+
1007 Geometry<Real, Index> pre_update_geometry, post_update_geometry;
+
1008 mutable vec3<Real> l0_, l1_;
1009 Real verlet_radius{};
1010 Real verlet_radius_squared{};
1011 std::set<Index> boundary_nodes_ids_set_;
@@ -725,37 +727,37 @@
1046 static_assert(triangulation_type==SPHERICAL_TRIANGULATION, "This function is only well defined for a spherical triangulation");
1047 vec3<Real> diff;
1048 vec3<Real> mass_center = calculate_mass_center();
-
1049 for (Index i = 0; i<nodes_.size(); ++i) {
-
1050 diff = nodes_[i].pos - mass_center;
+
1049 for (Index i = 0; i<nodes_.size(); ++i) {
+
1050 diff = nodes_[i].pos - mass_center;
1051 diff.scale(R_initial/diff.norm());
1052 diff += mass_center;
-
1053 nodes_.set_pos(i, diff);
+
1053 nodes_.set_pos(i, diff);
1054 }
1055
1056 }
1057
1059 void pure_node_move(Index node_id, vec3<Real> const& displacement_vector)
1060 {
-
1061 nodes_.displace(node_id, displacement_vector);
+
1061 nodes_.displace(node_id, displacement_vector);
1062 update_two_ring_geometry(node_id);
1063 }
1064
1066 void update_nn_distance_vectors(Index node_id)
1067 {
-
1075 for (Index i = 0; auto nn_id: nodes_.nn_ids(node_id)) {
-
1076 nodes_.set_nn_distance(node_id, i, nodes_.pos(nn_id) - nodes_.pos(node_id));
+
1075 for (Index i = 0; auto nn_id: nodes_.nn_ids(node_id)) {
+
1076 nodes_.set_nn_distance(node_id, i, nodes_.pos(nn_id) - nodes_.pos(node_id));
1077 ++i;
1078 }
1079 }
1080
1092 Real cot_alphas_sum(Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
1093 {
-
1098 l0_ = nodes_[node_id].pos - nodes_[cnn_0].pos;
-
1099 l1_ = nodes_[nn_id].pos - nodes_[cnn_0].pos;
+
1098 l0_ = nodes_[node_id].pos - nodes_[cnn_0].pos;
+
1099 l1_ = nodes_[nn_id].pos - nodes_[cnn_0].pos;
1100
1101 Real cot_sum = cot_between_vectors(l0_, l1_);
-
1102 l0_ = nodes_[node_id].pos - nodes_[cnn_1].pos;
-
1103 l1_ = nodes_[nn_id].pos - nodes_[cnn_1].pos;
+
1102 l0_ = nodes_[node_id].pos - nodes_[cnn_1].pos;
+
1103 l1_ = nodes_[nn_id].pos - nodes_[cnn_1].pos;
1104
1105 cot_sum += cot_between_vectors(l0_, l1_);
1106 return cot_sum;
@@ -769,7 +771,7 @@
1114 //unit tested
1115 [[nodiscard]] std::vector<Index> order_nn_ids(Index node_id) const
1116 {
-
1117 std::vector<Index> const& nn_ids = nodes_[node_id].nn_ids;
+
1117 std::vector<Index> const& nn_ids = nodes_[node_id].nn_ids;
1118 auto common_nn_ids = two_common_neighbours(node_id, nn_ids[0]);
1119 std::vector<Index> ordered_nn_ids{common_nn_ids[0], nn_ids[0], common_nn_ids[1]};
1120
@@ -795,14 +797,14 @@
1150 std::vector<Index> nn_ids_temp;
1151 vec3<Real> li0, li1;
1152 vec3<Real> mass_center = calculate_mass_center();
-
1153 for (Index i = 0; i<nodes_.size(); ++i) { //ToDo modernize this loop
+
1153 for (Index i = 0; i<nodes_.size(); ++i) { //ToDo modernize this loop
1154 nn_ids_temp = order_nn_ids(i);
-
1155 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[i].pos;
-
1156 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[i].pos;
+
1155 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[i].pos;
+
1156 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[i].pos;
1157 if ((li0.cross(li1)).dot(nodes_[i].pos - mass_center)<0) {
1158 std::reverse(nn_ids_temp.begin(), nn_ids_temp.end());
1159 }
-
1160 nodes_.set_nn_ids(i, nn_ids_temp);
+
1160 nodes_.set_nn_ids(i, nn_ids_temp);
1161 }
1162 }
1163
@@ -813,17 +815,17 @@
1178 vec3<Real> li0, li1;
1179 vec3<Real> mass_center = calculate_mass_center();
1180 mass_center.z+=10;
-
1181 for (Index node_id = 0; node_id < nodes_.size(); ++node_id) { //ToDo modernize this loop
+
1181 for (Index node_id = 0; node_id < nodes_.size(); ++node_id) { //ToDo modernize this loop
1182 if(boundary_nodes_ids_set_.contains(node_id)){
1183 continue;
1184 }
1185 nn_ids_temp = order_nn_ids(node_id);
-
1186 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[node_id].pos;
-
1187 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[node_id].pos;
+
1186 li0 = nodes_[nn_ids_temp[0]].pos - nodes_[node_id].pos;
+
1187 li1 = nodes_[nn_ids_temp[1]].pos - nodes_[node_id].pos;
1188 if ((li0.cross(li1)).dot(nodes_[node_id].pos - mass_center) < 0) {
1189 std::reverse(nn_ids_temp.begin(), nn_ids_temp.end());
1190 }
-
1191 nodes_.set_nn_ids(node_id, nn_ids_temp);
+
1191 nodes_.set_nn_ids(node_id, nn_ids_temp);
1192 }
1193
1194 }
@@ -842,8 +844,8 @@
1207 {
1208 std::vector<Index> res;
1209 res.reserve(2);
-
1210 std::vector<Index> nn_ids0 = nodes_[node_id_0].nn_ids;
-
1211 std::vector<Index> nn_ids1 = nodes_[node_id_1].nn_ids;
+
1210 std::vector<Index> nn_ids0 = nodes_[node_id_0].nn_ids;
+
1211 std::vector<Index> nn_ids1 = nodes_[node_id_1].nn_ids;
1212 std::sort(nn_ids0.begin(), nn_ids0.end());
1213 std::sort(nn_ids1.begin(), nn_ids1.end());
1214 std::set_intersection(nn_ids0.begin(), nn_ids0.end(),
@@ -858,7 +860,7 @@
1223 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
1224 std::array<Index, 2> res{vln, vln};
1225 //todo safe remove const& in the loop
-
1226 for (auto res_p = res.begin(); auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
+
1226 for (auto res_p = res.begin(); auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
1227 if (res_p==res.end()) { break; }
1228 else {
1229 if (is_member(nodes_[node_id_1].nn_ids, n0_nn_id)) {
@@ -874,11 +876,11 @@
1239 {
1240
1241 Index j = nodes_.find_nns_loc_idx(node_id_0, node_id_1);
-
1242 indexing_number auto nn_number = (Index)nodes_.nn_ids(node_id_0).size();
+
1242 indexing_number auto nn_number = (Index)nodes_.nn_ids(node_id_0).size();
1243 Index j_p_1 = Neighbors<Index>::plus_one(j, nn_number);
1244 Index j_m_1 = Neighbors<Index>::plus_one(j, nn_number);
-
1245 std::array<Index, 2> res{nodes_.nn_id(node_id_0,j_m_1),
-
1246 nodes_.nn_id(node_id_0,j_p_1)};
+
1245 std::array<Index, 2> res{nodes_.nn_id(node_id_0,j_m_1),
+
1246 nodes_.nn_id(node_id_0,j_p_1)};
1247 return res;
1248 }
1249
@@ -904,7 +906,7 @@
1269 //unit tested
1270 Neighbors<Index> previous_and_next_neighbour_local_ids(Index node_id, Index nn_id) const
1271 {
-
1282 auto const& nn_ids_view = nodes_[node_id].nn_ids;
+
1282 auto const& nn_ids_view = nodes_[node_id].nn_ids;
1283 auto const local_nn_id = (Index) (std::find(nn_ids_view.begin(), nn_ids_view.end(), nn_id)
1284 - nn_ids_view.begin());
1285 auto const nn_number = (Index) nn_ids_view.size();
@@ -915,7 +917,7 @@
1290 //unit tested
1291 Neighbors<Index> previous_and_next_neighbour_global_ids(Index node_id, Index nn_id) const
1292 {
-
1303 auto const& nn_ids_view = nodes_[node_id].nn_ids;
+
1303 auto const& nn_ids_view = nodes_[node_id].nn_ids;
1304 Neighbors<Index> neighbors = previous_and_next_neighbour_local_ids(node_id, nn_id);
1305 return {.j_m_1=nn_ids_view[neighbors.j_m_1], .j_p_1=nn_ids_view[neighbors.j_p_1]};
1306 }
@@ -959,17 +961,17 @@
1344 fp::implementation::PlanarTriangulation<Real, Index> triang(n_length, n_width);
1345// Nodes<Real, Index> bulk_nodes;
1346 Node<Real, Index> node{};
-
1347 node.curvature_vec=fp::vec3<Real>{0.,0.,0.};
+
1347 node.curvature_vec=fp::vec3<Real>{0.,0.,0.};
1348 for(Index node_id=0; node_id<N_nodes; ++node_id){
1349 node.id = node_id;
-
1350 node.pos = fp::vec3<Real>{
+
1350 node.pos = fp::vec3<Real>{
1351 triang.id_to_j(node_id)*length/n_length,
1352 triang.id_to_i(node_id)*width/n_width,
1353 0.
1354 };
1355
1356 node.nn_ids = triang.nn_ids[node_id];
-
1357 nodes_.data.push_back(node);
+
1357 nodes_.data.push_back(node);
1358 if(triang.is_bulk[node_id]){bulk_nodes_ids.push_back(node_id);}
1359 else{boundary_nodes_ids_set_.insert(node_id);}
1360 }
@@ -986,10 +988,10 @@
1371 Real min_bond_length_square,
1372 Real max_bond_length_square) {
1373 BondFlipData<Index> bfd{};
-
1374 if (nodes_.nn_ids(node_id).size() > BOND_DONATION_CUTOFF) {
-
1375 if (nodes_.nn_ids(nn_id).size() > BOND_DONATION_CUTOFF) {
+
1374 if (nodes_.nn_ids(node_id).size() > BOND_DONATION_CUTOFF) {
+
1375 if (nodes_.nn_ids(nn_id).size() > BOND_DONATION_CUTOFF) {
1376 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
-
1377 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
+
1377 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
1378 if ((bond_length_square < max_bond_length_square) && (bond_length_square > min_bond_length_square)) {
1379 if (common_neighbours(node_id, nn_id).size() == 2) {
1380 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
@@ -1015,7 +1017,7 @@
1401 flip_bond_in_quadrilateral(Index node_id, Index nn_id, const Neighbors <Index> &common_nns,
1402 Real min_bond_length_square, Real max_bond_length_square) {
1403 BondFlipData<Index> bfd{};
-
1404 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
+
1404 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
1405 if ((bond_length_square<max_bond_length_square) && (bond_length_square>min_bond_length_square)) {
1406 if (common_neighbours(node_id, nn_id).size() == 2) {
1407 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
@@ -1077,12 +1079,15 @@
Definition stlSerializer.hpp:123
Definition stlSerializer.hpp:66
Internal implementation of a 3D vector.
Definition vec3.hpp:43
+
Real dot(vec3< Real > const &v) const
Calculate dot product with another vector.
Definition vec3.hpp:106
+
Real norm() const
Returns the norm of the vector.
Definition vec3.hpp:164
+
static vec3< Real > cross(vec3< Real > const &a, vec3< Real > const &b)
Calculate cross product between two vectors.
Definition vec3.hpp:133
Here we implement the concepts of a positive integer number that is used throughout the code for inde...
Definition custom_concepts.hpp:31
-
nlohmann::json Json
shortening of the nlohmann::json namespace, which is an external open source library bundled by flipp...
Definition Nodes.hpp:16
static constexpr int BOND_DONATION_CUTOFF
a node needs to have more than the cutoff number of bonds to be allowed to donate one
Definition Triangulation.hpp:48
static bool is_member(std::vector< T > const &v, T const &el)
Convenient wrapper around std::find, which only works for std::vectors.
Definition utils.hpp:64
#define VERY_LARGE_NUMBER_
Literal for a very large integral number.
Definition Triangulation.hpp:36
TriangulationType
This enum defines named types of triangulations that are implemented in flippy.
Definition Triangulation.hpp:257
+
nlohmann::json Json
shortening of the nlohmann::json namespace, which is an external open source library bundled by flipp...
Definition Nodes.hpp:16
@ SPHERICAL_TRIANGULATION
Create a spherical triangulation which is a sub-triangulation of a regular icosahedron.
Definition Triangulation.hpp:260
@ EXPERIMENTAL_PLANAR_TRIANGULATION
Create a triangulation which is a sub-triangulation of a plane square.
Definition Triangulation.hpp:262
Definition custom_concepts.hpp:8
@@ -1113,6 +1118,15 @@
Real area
Voronoi area associated with the node.
Definition Nodes.hpp:45
Real volume
If the node is part of a closed surface triangulation, then the volume contains the volume of the tet...
Definition Nodes.hpp:58
Data structure containing all nodes of the Triangulation.
Definition Nodes.hpp:237
+
void set_nn_distance(Index node_id, Index loc_nn_index, vec3< Real > &&dist)
Overwrite the next neighbor distance with a new 3d vector.
Definition Nodes.hpp:504
+
Index size() const
Size of the Nodes data member.
Definition Nodes.hpp:521
+
const vec3< Real > & pos(Index node_id) const
Given a node id, return the constant reference to the node position.
Definition Nodes.hpp:324
+
Index nn_id(Index node_id, Index loc_nn_index) const
Given a node id and the local index in the Node::nn_ids vector, returns the next neighbour id.
Definition Nodes.hpp:459
+
void set_nn_ids(Index node_id, std::vector< Index >const &new_nn_ids)
For a Node specified by node_id, overwrite the entire Node::nn_ids vector.
Definition Nodes.hpp:448
+
const auto & nn_ids(Index node_id) const
Given a node id and a new value for the node-associated unit bending energy, update the current value...
Definition Nodes.hpp:440
+
void set_pos(Index node_id, vec3< Real > const &new_pos)
Sets the position of the requested node to a given position.
Definition Nodes.hpp:333
+
void displace(Index node_id, vec3< Real >const &displacement)
Changes the position of the requested node by a given displacement.
Definition Nodes.hpp:347
+
std::vector< Node< Real, Index > > data
Data member that contains the individual nodes.
Definition Nodes.hpp:238
Definition stlSerializer.hpp:55
This file contains helper functions that are used throughout flippy, but are not specific to any give...
Header file containing the definition and implementation a 3 dimensional vector class,...
@@ -1122,7 +1136,7 @@ diff --git a/docs/_triangulator_8hpp.html b/docs/_triangulator_8hpp.html index 001caf6..f8dd3ee 100644 --- a/docs/_triangulator_8hpp.html +++ b/docs/_triangulator_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/Triangulator.hpp File Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -113,26 +120,65 @@ #include <vector>
#include <unordered_set>
#include <unordered_map>
+#include <algorithm>
#include "custom_concepts.hpp"
#include "vec3.hpp"
Include dependency graph for Triangulator.hpp:
+ + + + + + + + + + + + + + + + + + + + + + + + + +
This graph shows which files directly or indirectly include this file:
+ + + + + + + + + + + +

Go to the source code of this file.

- + - +

Namespaces

namespace  fp
namespace  fp
 
namespace  fp::implementation
namespace  fp::implementation
 

@@ -150,7 +196,7 @@ diff --git a/docs/_triangulator_8hpp__dep__incl.dot b/docs/_triangulator_8hpp__dep__incl.dot deleted file mode 100644 index 027782e..0000000 --- a/docs/_triangulator_8hpp__dep__incl.dot +++ /dev/null @@ -1,14 +0,0 @@ -digraph "flippy/Triangulator.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/Triangulator.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="flippy/MonteCarloUpdater.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_monte_carlo_updater_8hpp.html",tooltip="This file contains the MonteCarloUpdater class template. Together with Triangulation...."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="flippy/flippy.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$flippy_8hpp.html",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; -} diff --git a/docs/_triangulator_8hpp__dep__incl.map b/docs/_triangulator_8hpp__dep__incl.map new file mode 100644 index 0000000..4b7dff7 --- /dev/null +++ b/docs/_triangulator_8hpp__dep__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/_triangulator_8hpp__dep__incl.md5 b/docs/_triangulator_8hpp__dep__incl.md5 new file mode 100644 index 0000000..835225a --- /dev/null +++ b/docs/_triangulator_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +da6d1d3fef5d71d837342be6e36d6c58 \ No newline at end of file diff --git a/docs/_triangulator_8hpp__dep__incl.png b/docs/_triangulator_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a79d5459f9eb265d059cdfda40685155f5ce51f4 GIT binary patch literal 16018 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 G-G2j&zUu`5 literal 0 HcmV?d00001 diff --git a/docs/_triangulator_8hpp__incl.dot b/docs/_triangulator_8hpp__incl.dot deleted file mode 100644 index 63e4a19..0000000 --- a/docs/_triangulator_8hpp__incl.dot +++ /dev/null @@ -1,29 +0,0 @@ -digraph "flippy/Triangulator.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/Triangulator.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="array",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="vector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="unordered_set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="unordered_map",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="custom_concepts.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$custom__concepts_8hpp.html",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node6 -> Node7 [id="edge6_Node000006_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node8 [id="edge7_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="vec3.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$vec3_8hpp.html",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node8 -> Node9 [id="edge8_Node000008_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="ostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node8 -> Node10 [id="edge9_Node000008_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node8 -> Node11 [id="edge10_Node000008_Node000011",color="steelblue1",style="solid",tooltip=" "]; - Node11 [id="Node000011",label="cmath",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node8 -> Node6 [id="edge11_Node000008_Node000006",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/_triangulator_8hpp__incl.map b/docs/_triangulator_8hpp__incl.map new file mode 100644 index 0000000..dc3bfd7 --- /dev/null +++ b/docs/_triangulator_8hpp__incl.map @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_triangulator_8hpp__incl.md5 b/docs/_triangulator_8hpp__incl.md5 new file mode 100644 index 0000000..ce2413b --- /dev/null +++ b/docs/_triangulator_8hpp__incl.md5 @@ -0,0 +1 @@ +3148ede8803e99df05e772f0cda5d89f \ No newline at end of file diff --git a/docs/_triangulator_8hpp__incl.png b/docs/_triangulator_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..49b00bf0eb2c528123d34a6d1230918864802d48 GIT binary patch literal 28115 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 S%Wz8@*;#dcwPF>k;Qs(u{7zK> literal 0 HcmV?d00001 diff --git a/docs/_triangulator_8hpp_source.html b/docs/_triangulator_8hpp_source.html index 87cf763..a569ad8 100644 --- a/docs/_triangulator_8hpp_source.html +++ b/docs/_triangulator_8hpp_source.html @@ -3,16 +3,18 @@ - + flippy: flippy/Triangulator.hpp Source File + - + + @@ -43,28 +45,28 @@

- + + -
@@ -574,7 +576,7 @@ diff --git a/docs/annotated.html b/docs/annotated.html index 33a6865..372e846 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -3,16 +3,18 @@ - + flippy: Class List + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -103,9 +110,9 @@
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 123]
- - +
[detail level 123]
 Nfp
 Nimplementation
+ + @@ -113,12 +120,13 @@ - - - - - - + + + + + + +
 Nfp
 Nimplementation
 CrawSTLSolid
 CrawSTLTriangle
 CstlNode
 CstlTriangle
 CBondFlipDataA helper struct; keeps track of bond flips
 CGeometryA helper struct. Used by the triangulation class to pass data around in one convenient package
 CMonteCarloUpdaterA helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations
 CNeighbors
 CNodeA data structure containing all geometric and topological information associated with a node
 CNodesData structure containing all nodes of the Triangulation
 CTriangulationImplementation of Triangulation of two-dimensional surfaces in 3D
 Cvec3Internal implementation of a 3D vector
 CGradientDecentUpdater
 CMonteCarloUpdaterA helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations
 CNeighbors
 CNodeA data structure containing all geometric and topological information associated with a node
 CNodesData structure containing all nodes of the Triangulation
 CTriangulationImplementation of Triangulation of two-dimensional surfaces in 3D
 Cvec3Internal implementation of a 3D vector
@@ -126,7 +134,7 @@ diff --git a/docs/annotated_dup.js b/docs/annotated_dup.js index 63192df..4e03891 100644 --- a/docs/annotated_dup.js +++ b/docs/annotated_dup.js @@ -10,6 +10,7 @@ var annotated_dup = ] ], [ "BondFlipData", "structfp_1_1_bond_flip_data.html", "structfp_1_1_bond_flip_data" ], [ "Geometry", "structfp_1_1_geometry.html", "structfp_1_1_geometry" ], + [ "GradientDecentUpdater", "classfp_1_1_gradient_decent_updater.html", null ], [ "MonteCarloUpdater", "classfp_1_1_monte_carlo_updater.html", "classfp_1_1_monte_carlo_updater" ], [ "Neighbors", "structfp_1_1_neighbors.html", "structfp_1_1_neighbors" ], [ "Node", "structfp_1_1_node.html", "structfp_1_1_node" ], diff --git a/docs/classes.html b/docs/classes.html index c69992d..bd825d5 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -3,16 +3,18 @@ - + flippy: Class Index + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,7 +116,7 @@
BondFlipData (fp)
G
-
Geometry (fp)
+
Geometry (fp)
GradientDecentUpdater (fp)
M
MonteCarloUpdater (fp)
@@ -134,7 +141,7 @@ diff --git a/docs/classfp_1_1_gradient_decent_updater-members.html b/docs/classfp_1_1_gradient_decent_updater-members.html new file mode 100644 index 0000000..75fbf80 --- /dev/null +++ b/docs/classfp_1_1_gradient_decent_updater-members.html @@ -0,0 +1,123 @@ + + + + + + + +flippy: Member List + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
flippy +
+
a c++20 package for dynamically triangulated membrane simulations.
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type > Member List
+
+
+ +

This is the complete list of members for fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type >, including all inherited members.

+
+
+ + + + diff --git a/docs/classfp_1_1_gradient_decent_updater.html b/docs/classfp_1_1_gradient_decent_updater.html new file mode 100644 index 0000000..75dd1b8 --- /dev/null +++ b/docs/classfp_1_1_gradient_decent_updater.html @@ -0,0 +1,127 @@ + + + + + + + +flippy: fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type > Class Template Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
flippy +
+
a c++20 package for dynamically triangulated membrane simulations.
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classfp_1_1_monte_carlo_updater-members.html b/docs/classfp_1_1_monte_carlo_updater-members.html index 4b34d9a..030450d 100644 --- a/docs/classfp_1_1_monte_carlo_updater-members.html +++ b/docs/classfp_1_1_monte_carlo_updater-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -126,7 +133,7 @@ diff --git a/docs/classfp_1_1_monte_carlo_updater.html b/docs/classfp_1_1_monte_carlo_updater.html index 66f7726..840e8eb 100644 --- a/docs/classfp_1_1_monte_carlo_updater.html +++ b/docs/classfp_1_1_monte_carlo_updater.html @@ -3,16 +3,18 @@ - + flippy: fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type > Class Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -107,67 +114,67 @@

A helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations. - More...

+ More...

#include <MonteCarloUpdater.hpp>

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

Public Member Functions

 MonteCarloUpdater (fp::Triangulation< Real, Index, triangulation_type > &triangulation_inp, EnergyFunctionParameters const &prms_inp, std::function< Real(fp::Node< Real, Index > const &, fp::Triangulation< Real, Index, triangulation_type > const &, EnergyFunctionParameters const &)> energy_function_inp, RandomNumberEngine &rng_inp, Real min_bond_length, Real max_bond_length)
 MonteCarloUpdater (fp::Triangulation< Real, Index, triangulation_type > &triangulation_inp, EnergyFunctionParameters const &prms_inp, std::function< Real(fp::Node< Real, Index > const &, fp::Triangulation< Real, Index, triangulation_type > const &, EnergyFunctionParameters const &)> energy_function_inp, RandomNumberEngine &rng_inp, Real min_bond_length, Real max_bond_length)
 
bool move_needs_undoing ()
bool move_needs_undoing ()
 Implementation of the Metropolis algorithm.
 
bool new_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
bool new_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
 Pre-update check to test that the update step will not result in an unphysical configuration.
 
bool new_next_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
bool new_next_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
 Pre-update check to test that the update step will not result in an unphysical configuration.
 
bool new_verlet_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
bool new_verlet_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
 Pre-update check to test that the update step will not result in an unphysical configuration.
 
void move_MC_updater (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
void move_MC_updater (fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
 Attempt a move Monte Carlo Step.
 
void flip_MC_updater (fp::Node< Real, Index > const &node)
void flip_MC_updater (fp::Node< Real, Index > const &node)
 Attempt a flip Monte Carlo Step.
 
void flip_MC_updater (fp::Node< Real, Index > const &node, Index id_in_nn_ids)
void flip_MC_updater (fp::Node< Real, Index > const &node, Index id_in_nn_ids)
 Attempt a flip Monte Carlo Step.
 
void reset_kBT (Real kBT)
void reset_kBT (Real kBT)
 Reset the temperature of the Monte Carlo updater, at which the Boltzmann weights are evaluated.
 
Real kBT ()
Real kBT ()
 A getter function that returns a value of a state variable.
 
unsigned long move_attempt_count () const
unsigned long move_attempt_count () const
 A getter function that returns a value of a state variable.
 
unsigned long bond_length_move_rejection_count () const
unsigned long bond_length_move_rejection_count () const
 A getter function that returns a value of a state variable.
 
unsigned long move_back_count () const
unsigned long move_back_count () const
 A getter function that returns a value of a state variable.
 
unsigned long flip_attempt_count () const
unsigned long flip_attempt_count () const
 A getter function that returns a value of a state variable.
 
unsigned long bond_length_flip_rejection_count () const
unsigned long bond_length_flip_rejection_count () const
 A getter function that returns a value of a state variable.
 
unsigned long flip_back_count () const
unsigned long flip_back_count () const
 A getter function that returns a value of a state variable.
 

Detailed Description

-
template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters, typename RandomNumberEngine, TriangulationType triangulation_type>
+
template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters, typename RandomNumberEngine, TriangulationType triangulation_type>
class fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >

A helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations.

Template Parameters
- - + + @@ -181,51 +188,40 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
EnergyFunctionParametersA user-defined struct type. An instance of this struct will be part of the input of the energy function. Energy function provided during instantiation must have a third argument of type EnergyFunctionParameters const&.
RandomNumberEnginetype of the random number engine that will be provided during the instantiation of the class. For example std::mt19937_64.
triangulation_typeOne of the types specified by the TriangulationType enum. This must match the type of triangulation provided during the class instantiation.
@@ -255,15 +251,15 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

- + - - + - - + - - + - - + - - + - - - - - - - +
fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::MonteCarloUpdater fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::MonteCarloUpdater (fp::Triangulation< Real, Index, triangulation_type > & triangulation_inp, fp::Triangulation< Real, Index, triangulation_type > & triangulation_inp,
EnergyFunctionParameters constprms_inp, EnergyFunctionParameters const & prms_inp,
std::function< Real(fp::Node< Real, Index > const &, fp::Triangulation< Real, Index, triangulation_type > const &, EnergyFunctionParameters const &)> energy_function_inp, std::function< Real(fp::Node< Real, Index > const &, fp::Triangulation< Real, Index, triangulation_type > const &, EnergyFunctionParameters const &)> energy_function_inp,
RandomNumberEnginerng_inp, RandomNumberEngine & rng_inp,
Real min_bond_length, Real min_bond_length,
Real max_bond_length 
)Real max_bond_length )
@@ -274,7 +279,7 @@

Parameters

- + - +
bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_needs_undoing bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_needs_undoing ())
@@ -280,6 +276,15 @@

+ + + + + + + + + @@ -290,27 +295,20 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
@@ -328,16 +326,28 @@

Returns
true if new_next_neighbour_distances_are_between_min_and_max_length(fp::Node<Real, Index> const&, fp::vec3<Real> const&) and new_verlet_neighbour_distances_are_between_min_and_max_length(fp::Node<Real, Index> const&, fp::vec3<Real> const&) conditions are both satisfied, false otherwise.
+
Returns
true if new_next_neighbour_distances_are_between_min_and_max_length(fp::Node<Real, Index> const&, fp::vec3<Real> const&) and new_verlet_neighbour_distances_are_between_min_and_max_length(fp::Node<Real, Index> const&, fp::vec3<Real> const&) conditions are both satisfied, false otherwise.
Here is the call graph for this function:
+ + + + + + +
Here is the caller graph for this function:
+ + + + +
@@ -348,27 +358,20 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

- + - - + - - - - - - - +
bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::new_neighbour_distances_are_between_min_and_max_length bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::new_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > constnode, fp::Node< Real, Index > const & node,
fp::vec3< Real > constdisplacement 
)fp::vec3< Real > const & displacement )
@@ -392,6 +395,13 @@

+ + + + + + + @@ -402,27 +412,20 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

- + - - + - - - - - - - +
bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::new_next_neighbour_distances_are_between_min_and_max_length bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::new_next_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > constnode, fp::Node< Real, Index > const & node,
fp::vec3< Real > constdisplacement 
)fp::vec3< Real > const & displacement )
@@ -445,6 +448,13 @@

+ + + + + + + @@ -455,27 +465,20 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

- + - - + - - - - - - - +
bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::new_verlet_neighbour_distances_are_between_min_and_max_length bool fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::new_verlet_neighbour_distances_are_between_min_and_max_length (fp::Node< Real, Index > constnode, fp::Node< Real, Index > const & node,
fp::vec3< Real > constdisplacement 
)fp::vec3< Real > const & displacement )
@@ -497,6 +500,21 @@

+ + + + + + + + + + + + + + + @@ -507,16 +525,15 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

- + - - + - - - - - - - +
void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_MC_updater void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_MC_updater (fp::Node< Real, Index > constnode, fp::Node< Real, Index > const & node,
fp::vec3< Real > constdisplacement 
)fp::vec3< Real > const & displacement )
- + - - +
void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_MC_updater void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_MC_updater (fp::Node< Real, Index > constnode)fp::Node< Real, Index > const & node)
@@ -534,11 +551,39 @@

Note
This function randomly chooses the next neighbor of the node and flips the edge between them. If more precise control is required, i.e., if it is necessary to control exactly which edge needs to be flipped, then the flip_MC_updater(fp::Node<Real, Index> const& node, Index id_in_nn_ids) method can be used.
+
Note
This function randomly chooses the next neighbor of the node and flips the edge between them. If more precise control is required, i.e., if it is necessary to control exactly which edge needs to be flipped, then the flip_MC_updater(fp::Node<Real, Index> const& node, Index id_in_nn_ids) method can be used.
Here is the call graph for this function:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -549,27 +594,20 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
@@ -587,11 +625,39 @@

Warning
For performance reasons, this function does not check if id_in_nn_ids is really a nn_id of the node provided in the first argument. The user is required to guarantee this fact. Otherwise, flippy will fail unpredictably. flip_MC_updater(fp::Node<Real, Index> const&) is the safer method if the user does not care exactly which bond is flipped.
+
Warning
For performance reasons, this function does not check if id_in_nn_ids is really a nn_id of the node provided in the first argument. The user is required to guarantee this fact. Otherwise, flippy will fail unpredictably. flip_MC_updater(fp::Node<Real, Index> const&) is the safer method if the user does not care exactly which bond is flipped.
Here is the call graph for this function:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -602,16 +668,15 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>

- + - - + - - - - - - - +
void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_MC_updater void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_MC_updater (fp::Node< Real, Index > constnode, fp::Node< Real, Index > const & node,
Index id_in_nn_ids 
)Index id_in_nn_ids )
- + - - +
void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::reset_kBT void fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::reset_kBT (Real kBT)Real kBT)
@@ -633,6 +698,11 @@

+ + + + + @@ -643,32 +713,37 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
Real fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::kBT Real fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::kBT ())
-inline

A getter function that returns a value of a state variable.

Monte Carlo Updater requires a kBT value in the calculation of the rejection probability of a random move.

Returns
the state of the kBT value of the updater.
-
See also
move_needs_undoing()
+
See also
move_needs_undoing()
Here is the caller graph for this function:
+ + + + +
@@ -679,28 +754,28 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_attempt_count unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_attempt_count ()) const
-inline

A getter function that returns a value of a state variable.

-

Every time a move is attempted, a private internal state variable move_attempt is incremented by move_MC_updater(). This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of move_attempt.
-
See also
move_needs_undoing()
+

Every time a move is attempted, a private internal state variable move_attempt is incremented by move_MC_updater(). This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of move_attempt.
+
See also
move_needs_undoing()
@@ -710,28 +785,28 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::bond_length_move_rejection_count unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::bond_length_move_rejection_count ()) const
-inline

A getter function that returns a value of a state variable.

-

Moves that cause nodes to overlap with their Verlet list neighbors or move them too far away from any of their next neighbors are rejected. Every time such rejection happens, a private internal state variable bond_length_move_rejection is incremented by move_MC_updater(). The specifics of this rejection criteria are calculated in the function new_neighbour_distances_are_between_min_and_max_length(fp::Node<Real, Index> const& node, fp::vec3<Real> const& displacement) Every time a node move would lead that node to have a bond with one of its next neighbors, which is longer than a specified maximal length (max_bond_length()), the move will be rejected. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of bond_length_move_rejection.
-
See also
move_needs_undoing()
+

Moves that cause nodes to overlap with their Verlet list neighbors or move them too far away from any of their next neighbors are rejected. Every time such rejection happens, a private internal state variable bond_length_move_rejection is incremented by move_MC_updater(). The specifics of this rejection criteria are calculated in the function new_neighbour_distances_are_between_min_and_max_length(fp::Node<Real, Index> const& node, fp::vec3<Real> const& displacement) Every time a node move would lead that node to have a bond with one of its next neighbors, which is longer than a specified maximal length (max_bond_length()), the move will be rejected. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of bond_length_move_rejection.
+
See also
move_needs_undoing()
@@ -741,28 +816,28 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_back_count unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::move_back_count ()) const
-inline

A getter function that returns a value of a state variable.

-

Every time a move is rejected because the energy requirement was not satisfied, a private internal state variable move_back is incremented by move_MC_updater(). This variable does not track the rejections resulting from bond length restriction violations. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of move_back.
-
See also
move_needs_undoing() bond_length_move_rejection_count()
+

Every time a move is rejected because the energy requirement was not satisfied, a private internal state variable move_back is incremented by move_MC_updater(). This variable does not track the rejections resulting from bond length restriction violations. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of move_back.
+
See also
move_needs_undoing() bond_length_move_rejection_count()
@@ -772,27 +847,27 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_attempt_count unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_attempt_count ()) const
-inline

A getter function that returns a value of a state variable.

-

Every time a flip is attempted, a private internal state variable flip_attempt is incremented by flip_MC_updater() and flip_MC_updater(fp::Node<Real, Index> const& node, Index index_in_nn_ids). This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of flip_attempt.
+

Every time a flip is attempted, a private internal state variable flip_attempt is incremented by flip_MC_updater() and flip_MC_updater(fp::Node<Real, Index> const& node, Index index_in_nn_ids). This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of flip_attempt.
@@ -802,27 +877,27 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::bond_length_flip_rejection_count unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::bond_length_flip_rejection_count ()) const
-inline

A getter function that returns a value of a state variable.

-

If a flip would turn a valid bond into a bond that is too long, the flip is rejected, a private internal state variable bond_length_flip_rejection is incremented by flip_MC_updater() and flip_MC_updater(fp::Node<Real, Index> const& node, Index index_in_nn_ids). The rejection of flips is handled by the Triangulation class itself and reported through the BondFlipData to the flip functions of the updater. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of bond_length_flip_rejection.
+

If a flip would turn a valid bond into a bond that is too long, the flip is rejected, a private internal state variable bond_length_flip_rejection is incremented by flip_MC_updater() and flip_MC_updater(fp::Node<Real, Index> const& node, Index index_in_nn_ids). The rejection of flips is handled by the Triangulation class itself and reported through the BondFlipData to the flip functions of the updater. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of bond_length_flip_rejection.
See also
Triangulation::flip_bond(Index, Index, Real, Real) Triangulation::unflip_bond(Index, Index, BondFlipData<Index> const&)
@@ -833,28 +908,28 @@

+template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters , typename RandomNumberEngine , TriangulationType triangulation_type>
+inlinenodiscard
- + - +
unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_back_count unsigned long fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >::flip_back_count ()) const
-inline

A getter function that returns a value of a state variable.

-

Every time a flip is rejected because the energy requirement was not satisfied, a private internal state variable flip_back is incremented by flip_MC_updater() and flip_MC_updater(fp::Node<Real, Index> const& node, Index index_in_nn_ids). The rejection of flips is handled by the Triangulation class itself and reported through the BondFlipData to the flip functions of the updater. This variable does not track the rejections resulting from bond length restriction violations. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of flip_back.
-
See also
Triangulation:: unflip_bond(Index node_id, Index nn_id, BondFlipData<Index> const& common_nns) bond_length_flip_rejection_count()
+

Every time a flip is rejected because the energy requirement was not satisfied, a private internal state variable flip_back is incremented by flip_MC_updater() and flip_MC_updater(fp::Node<Real, Index> const& node, Index index_in_nn_ids). The rejection of flips is handled by the Triangulation class itself and reported through the BondFlipData to the flip functions of the updater. This variable does not track the rejections resulting from bond length restriction violations. This variable can be used for diagnostics or statistical tracking, but its state does not impact the function of the updater.

Returns
current state of flip_back.
+
See also
Triangulation:: unflip_bond(Index node_id, Index nn_id, BondFlipData<Index> const& common_nns) bond_length_flip_rejection_count()
@@ -867,7 +942,7 @@

diff --git a/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.dot b/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.dot deleted file mode 100644 index b3c20ee..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::MonteCarloUpdater::kBT" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater::kBT",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="A getter function that returns a value of a state variable."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::reset_kBT",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a919b68a956bf4875eecab53dbc950a57",tooltip="Reset the temperature of the Monte Carlo updater, at which the Boltzmann weights are evaluated."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.map b/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.map new file mode 100644 index 0000000..6e15f1a --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.md5 new file mode 100644 index 0000000..1d86240 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.md5 @@ -0,0 +1 @@ +4c3ab95d3550d76d310c7f01e557778b \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_a4e3b7ba1838866d8e4968a404deb5c94_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae21050501f025cd60b93f668c4d733f2390e75 GIT binary patch literal 6626 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 Q&;||hT1GVY)!R@11#fFR?EnA( literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.dot b/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.dot deleted file mode 100644 index 924d1a5..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "fp::MonteCarloUpdater::new_verlet_neighbour_distances_are_between_min_and_max_length" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater\l::new_verlet_neighbour\l_distances_are_between\l_min_and_max_length",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::new_neighbour_distances\l_are_between_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ada3c8ad8d719671d9dedecd3ec9bbd2b",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.map b/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.map new file mode 100644 index 0000000..1117b40 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.md5 new file mode 100644 index 0000000..7205e52 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.md5 @@ -0,0 +1 @@ +5364f116d4497fcb17ff87fe48b519fd \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_a6a064bcdc7395374ab73913e364f1f81_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5f0ee134d20808d081ae3694bf29dcf3eaeba2 GIT binary patch literal 17735 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 VV*IHdJ{g5X{JNBA%C)=h{{!yb$6o*d literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.dot b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.dot deleted file mode 100644 index 3d77241..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.dot +++ /dev/null @@ -1,15 +0,0 @@ -digraph "fp::MonteCarloUpdater::move_needs_undoing" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater\l::move_needs_undoing",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Implementation of the Metropolis algorithm."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map new file mode 100644 index 0000000..588d640 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 new file mode 100644 index 0000000..9a1ad7f --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 @@ -0,0 +1 @@ +26ffce743d462981e58202959e0ed313 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..75867a5deda25b8eb622d4ad9be82a30ab47dbc3 GIT binary patch literal 15382 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.dot b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.dot deleted file mode 100644 index d54295a..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.dot +++ /dev/null @@ -1,27 +0,0 @@ -digraph "fp::MonteCarloUpdater::flip_MC_updater" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Attempt a flip Monte Carlo Step."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a6833f13e1fd24b039ca1ad2969b8d267",tooltip="Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,..."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::move_needs_undoing",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a7e172728bb0764e21ba1e44aa76cce83",tooltip="Implementation of the Metropolis algorithm."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node4 -> Node5 [id="edge4_Node000004_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\lflip_bond_unchecked",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a077d1be6c31f16241e9035c5a0f93652",tooltip=" "]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::Triangulation::\lemplace_before",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a11ee6051e9db388def8aaed68b1841d4",tooltip="Adds a new node to the next neighbor list of a given node and calculates their mutual distance."]; - Node4 -> Node7 [id="edge6_Node000004_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node7 -> Node8 [id="edge7_Node000007_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node8 -> Node9 [id="edge8_Node000008_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; - Node8 -> Node10 [id="edge9_Node000008_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="fp::Neighbors::plus_one",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_neighbors.html#a59501864ac7f34bd676aa97d9faf68cc",tooltip=" "]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map new file mode 100644 index 0000000..b70535e --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 new file mode 100644 index 0000000..5a7c25e --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 @@ -0,0 +1 @@ +d4ea5c1a41fda752cdac87904876a521 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..f913fb07f3599149f7a2eeb522d89f33452a7b3c GIT binary patch literal 45696 zcma%j1z1+=wlx+O1}LGFMJp{K2qujv-3SN>5&}v{nIIBMH&~#6v~()nA|ee+D$+YrXG$=Nxm4F_-7%OOm^G9Na-dLb6L*>VhH($>tam zk_`v8k>bAyYd_qFe~}u-$srQy3ul!bB1gOJ9fDNy=BFkywjVqE z`pmX_$COQv9!xm2?ZNJIZ;!~AUO5o!D>VG+0)3Rw^O+}yj<7qB9_6mwD0P?S39Eb{ z?-{bqm(NNa@(JIu{aIej{2uqy=KiDmxA9CaX}9LOze&2Ca(nvjQbXZaQu68ON4w3ag_Uo*VPv5jRH{yW%l#x;8q3j@kg(Jj|P3x6u z>DT@~w1U2uqE4yU(J08>>_EWdzkifzm}36< z#p{o(i^u-@O8kRTg4Wkd`LMOM^>N*T(2|lf65cdd#_f8XCQkSD_j?r#4GffZ<=T!l z#J+w#IbXaM)t+I}KRT*C?poXb@zKuZF)KI2ukSQ+^74ZJrlt11E?bo?>(=jfnlZtdBL1AezkjH(Ewe>uR;EZyM1-uJod5#^ zL#&xe$9vN(afLA6N1L|pp8W2?NabjS-}UtLjJBn{`jq+Qi}J{q_y_tlkCG|(?|&8+ z<{1*A_Tq+GvNoF%rP7rrBO)hG_;ht?lPs^S>?}7AXWqVj`cHO@FiZ!?n3kW*`cSW7k4RY#~E|; z<9MXw>Zv4*jEn_^g+H5KZKdYY-F$VdBa{F7ClW3$uGL8oaqc_6uMgFQmHHi(ylHKn zmS}lU=;k3t=gG4#+MfK%*U7hw6tVaH@L=mqquXjg0Ersj10% zx|(IQx0vy6U7eiWXxmu>gCkD!7gohf7c}yNc;<`7Av>y-!LC7j9H^X*5GUNmZ-v&7~-Vvd84dHPRnum^9i<4@iGa z(yByY(pNZV%&@NSnv9sIvLl~y-E#?_gA0p`Jl1^|zNYByIdl2)v+n6U+NZKa1aIE5 zrQM>S{U>J2Dd!6JLhYX89%!k-|B-xlQp(EP1zoRW!Yl+`e;X z|LW4jaQvI-m&Wzs-i+eWs!5tbY|)>8>jYAAsDAtPtG49crVW!bGlm0Ieh)o7M7$4J z){8#*>r8glzaI{eq8$49Q@T6vwnZgE=k@E?UFmaJ{MB>A$EkMWIge}S?DZ-?*O_Gz zubLFzeR_7JC1a(%r6mYqisP9(9PKnZ?lk#ftJjza7gvh53pEobr!S{YUR%_S&#$*5 zcA;2D6zGvSo{3?{Q1%L^BKnV?C%>_mge_SP@KDV?byA0_edW3%TU$2JzA~o_@L{~Dtxf&lNwaI6{L6og?9$TG21oK)5w9oSFFM@1#qV?Qq|JX_<3#?x z_>b>YIlQP&Z2X4fPwedT=ZC(T9Wh&+9?WvG66H);Sa2|FO}5bDrDkAg@Z85DBiHu( zXS2t7kKJjmD|h6Yuhoa29PKHjy&ESV(TDU?6U4D$+s>Uwd3e(5T+~u@yR)t=%#xDP zlzcDs(8#u=zd5TlC1Bom=H|_tp8ZL0|BmEbEo3>xN4dGVX{OE02L&zV^6kccbYyZU z#mQ~BiX|^t9Ew=Kp|cN2oAPeoI4EE))f^{}Z8cn8n39VTi?SVVpj^@(Zirg^_F#|0 zP?*VEoqPeDuMIALet#%0-$G4IjeD&4(e!F+YD&M_pDF8@rsJhEDYr%m72TX%2 z8=^$y6%-Vj`Q`ZzAO0XGE6brKGI$%|&3F2Ax1ICI7q(`zOe!ZgW8=86(9r9eNvbng zra04Z9bOZ8_eV-6$t5&6f65i;b7} zGaWAZb=s4-g(@9sCo#{i4Oj<<&L#8DuRXidVq#)Sm$-EDE?m8O$cvgQ4hQz(qes@? zN;c&Cl$<_&+A7Zqac2-SGdQ81Kol?XwrIXVgkVhPq^qm|QUkg)7R86xTzC?9go#c#+%nl?vW)zSvi^__M>CduU-3gby zGMyJ~aLARuudFY&)K8)Y3N*h_7%ubN_x^g*eS{x56&2~3OP6+ExpGB4>8nk)%iO4j z*vju_ElRUAyYa5-=+jQ@1&r%?l8qk6sf?MK*?p?NvN_8_D}QEnbrpqXlbV`Z{tUuS zyTBo>ZUz7J+eyv2|CCiYGlE1r*Cw`Vc*l+%RaI52(;b7gA+>ZK>$jv#9MH{oaS@7r z`$`cUp@LS?-I;irzQMtZs;X32``C+KR0RutUYj>>zWnAAJrbsuJdF;QxOhyOVP)U1 zU$UqV2Tt8$)zHu&F>g!VfO?X5>*xKD5b6MC`IjiaILo4U%x1CFk*^DL{TvA| zA76W#;Z_ux(eC_^{>rBrc4L~TpdYLJj)w7@QXmzJt}V~J)5;$Is^Gi6T!9h5MT(sN zBdzNt4C|uoplCY&c;VrInuBw0rJiQ61yM*wC$yJDTwGkjmrmNjA!jUC*mmgK(2xYm z$d9i{w31I5jF4*`937`>I8wg-{8^1{*hWV7?%C9O(w15z!p7)7l6K%iWK0aBe1t$I z{Z>*^|Hw!=ZEZT8yjyAc+0p^bk;1kWcG@Yrr#oYGbablg>y2iH>P3HlI&at5-S+px zD05=(U)NzB#^xM4GEDX$1#(Q~&I~sOgoK!g`1<8`I{v-(#I2cr;=26a-Ge>{l((#eo0-BNyL0F6hXn_#4haAj))5K&RLpesch1vj7q?pf;-C)%-u6pK)Gu|ntMm=7_Bp`k4otV{+r)(4z-hoF z(aDlcM!uz$m0KAZV|c|`*8h%Dp_+x9ZJ)jUyurQ;9IEef>YLUhv&t%Jj#!%QWMtQ{ z)j{;`e;;si?8*B7eJu3|VE!LK&hGs;#K#va>c9V*`!}k-bAQC)E}f-ux8>c3EhI;Dk5y{!O59HMDqZ5x`duknV_R~iRRh9F3w8}` zbl-l};KTEScl8VHj)sy@aZjg2v;SDz-PuV0ND8(Mjq>bu4ww#Uz5J8 zd`+N8c?;?C zHFcV4>1WpIeXsWY9fqPEH?;>;xiwUt<`sLpX?)L0@DDHCO zYwgJc=HX@n~k&$jJy*qT~zUd?-^RI)#87>t^C5m1NNVpj?@H{_x^Aq=P3%m7u zKa$|=pWop#`TE1?W<(@)*4UYL_YuGG%6p7tJhc?LTBi+r`!ix6{vzvk zJMVw)bRSd9>l)g5pY{s=1Nyov!Fj%C4yJAhxSdN?w0gWMN4fg&KUdGh)!9ud$eR7X z1kI@*xOUKcv*yO?5i+rU5xINy&5}Jr zrU&1Z%Cz|xjeg{=tMOI(JElh27LOHc;IqjL(V}LW2OfXuC;hU?l}GMlYU+5vp`!`u zhJSZOmN(q&qlXg?P_W{zs5vgUHDT5p7j6rQDUuj zoE)dk@G<56$nUUmf&SS>^Rh#ueOrolIen~38rb{yPQBiU$It%qILP>NhAOq%`hLNxb*{*xy}JQn*ohWzFbILT}T1 zWm~~%PL`YBzlh0xE|TJ#TgvHU$WTA-i9X;@tA+RP;4p6eb83k#9jWR4&+;WzT=o9i zgMsnETm9Qhx%2)aJ2oFxX)9Nv5!RsDPOg55@$S1BpSuzzH%nQIN*c^ElQ&9qC39Ob zCAOSu;r9L>MDNjcI$?TgJ(}!OaCR{_hz) zm#O*&T!J(FX3;?>!sWnMUQch0p#Z12a1cBiPN5pw~{Xt{|{?f=5266E4;lsUD zRCY>Z=zEzJqU#b(y5T*4hdYVTK!1aNR;%f!kD_nX-ktc6_#kJO-G|gVtUm?cz4;vus z!k<4q$|7;5>9>EW3Rrfj|2Y2(uvMe*&PlCo%facvTEUh^?*n`bv#olvwjmtu74=3gUe_gyuqF4zi5|djnSzw#w(I+Elbwf6{{8zFT7HQ$XYO_{E-yQ$ zXJpiN>6W_hT0}!L)<7?G^De;i{=8Oxc||29FZm%f59g{AWJ5UpVq)}u^wfrM8HUGo z=Yj@ndVA$4I!1}c=+i%25~%^4UIF}ER87^+yA^+#wsl}|kn(_uv?1#W$(g8#2(3}u zi{;wE!g+ByQ`IWc($b>yUAFHnI=_xPTUv605ISxPD45w_%T@edgy^OV=X=D>g4A^NYXaHO`E~eHLVGNiwE6&0CUyj3TH&uEO6GN^dSP9XYbGnP1rD4}axTMw3s^&(gT-x6X(182;$a z&mLPCj&U18kg^;*_7G9pNuh*Rn>Zri8X`jUTyrnCT(LG}P4XXF`u5=g(f(Hlu<$v} znScKLS;jl}xb3a}1z&m*)seOd=F?7d$I$v&_gC;(^@z@mcgrHtIZTyPZ{N10{VnqC}^;j`%A@0`l+b(Q_~ zHOaIkff6lHR@s+-VbYy*$;45imK`Sf=dxj4leQva13;zuk`E&lHF z;sXCv3g*M{cavnAW>TcMTXaEzXb%n&xUh?8fUx5mOL}`_md5iN=azjcNls{G5hNiR z+Kp<7H(gg|)jBe7nB=n@J^BD`Esxn3)*i=U`qkdGB{#ZLx2on|aDs6}Rv^A}bvmT@ z=IXNJZU#{)gxC1^xE!L`vOCW&AfWXAmYqL7z1Re-eH43(ltZuq4bi8)^l3o%Q699% z85!$a9Z5`a7)`5mnD4e<{H3>61C9luN|LO4Y^*CcfXA@n6B3N#(--`7_4c~D3?Suy zkFy1pP#H-e+CM#xFY$z4N9096y2d83u$ z-&oLVMn*h0znyX4MJoa7W9uG<0WYqiL;U=KXcP_7)OQqC-pqWGh8&mGucqe`L?mML zr{L{koTs-Vjw<=(ZES4R3mkZmYG2)GO^#(aZz>c%fx^UXGa!ZJZ~^Qss)Q&)h~w{g za9a58AxoeC7vhpqQPc0W6TJTEP-JA}>Zrhie!Ty6^10>F3|*9$WF{n^eSL~ zrY0v-yZ0S9;OXJ9mEaqRPP=5&o;HiP)3<(Hj*N;j?aJXnj@yHUII-UZx4F2uh+Wv( z%x`ULn~@n16QckQbf?Pc?kaxy3SW9zWUXq5254x7goWE@1+P`@g$!^WAFAbd|IBVy z^pxSW47%x`o!MN;$;qM%-yUSe`o((Y^4ktvcUDZtak>0TV%PHWa;T8?kzcJTTMx0a zR;}MXWC-`&^k!OjvW@ExGTixbIKQw}^_}`XaL_2sn@buSpMrU(U|_KPU)bTDg z&mv8OZ~VY74?g06u+1@|;bvjkN=+R?(Yp_2E#0Wrq0f^=>e8hlu%$vGBAv5>H@+SR zDSy+>jYwuIWo;!(&<6uM7(?VjyIE7;M8l?6z+Q%FDWbU2N#*19~~YpgW@yR;OOL(;kM@5 zIW=3IFoKGd>v08P1Wl%3s)E*Tcx8Eca(0$UP%s3>mB`t~ajgNVePq9+c5=hUh2 zvCeEm8d9*=kAfK&mzJnU@?Z1hSGPPIH}N3o}kxal26(gz`XUt8S@5 z8mPn%&<4`fkE4hNo3$jgce@!b#U6N&pYP~mw)IS*TGY%z09O^?%c*C%}jQs zI^Q9w8ZJJ*06g}$k&zuGNM57CM!^K;U}I%HBq|yS_9PvAX#OwoZ$>ykcEc}Uy)yms z)^BX#&uc^L3279qw@PnzL;uQ(xd#%;_UC6NM2AOyzKEXN%5B^v&RcauLj^Y(aj=n) z{rvp0YF^R?yt>F{N+uu9uisnb@+eva6w_1D>BnO^Ig57o_QRm_>>3$>mn0b+U(4}` zgdhE@r1<4)JUX7wCm(?NwIN6I@U6*jXFCONMhRKpud0&jEEHtWLx_P%yw;v>1g`dD za{AU})xD9YZr5Z*P5@ogi8+UEWpH?2wveEbXq?EJH{auw>%7Q|+*8UgkNUkZS-J;G zWLbNA7+9V(AfMfILTApN-GKB$lz&KN?E-f%$;-#0c!9HG%=z=-Bok9?+n(uI`tvwS zi$CAQ2stls$C>&=alCM0Gr-7utKOorMa#~t6VQgz#^P;9+ju&~l$px4JB0K0dHZsA zOG<{0XXoqToWH#2bvKdn9P%p@E9?H5)Z3{tM?yx! zeHZFM=Nz|;tgInWCa^>ZjUE!3MemN*HwuiOo0}I=eo^ufBM{&kpHOn#1Pcd!${Dp7 zHOw7_*v8gYBkvX)ID6yifoc-80ZRFH7FvD$*#CVjmjV}}1Nq&7J=3iFB_N*MH4WD; zat?d;Y%lOe6_B%RTo7h~X+y zM4x70Xh<!o_8lBz%L0=%5ndoGBpOKW}}^_ zr6E&XzFtkQ?c!nF7+sI0CTboSZf`nae{2XjBjW^j5rSf-Qhe19I$!ji5jH$+9duI1 z*%mcnr@7+_r)L8#7!%OUK8uX3YgQ1KM<~1N6NEJi3RdF*=`KP?e}iBrG)u6u6;Bx( zp|Xt$EO6G+kP!Sg^=lf;*p@oh@%^X%T4j zHE<=0{%J|v>F#08_3r(W>UEEA0KupAX(~c+K98$CfIjGq57xzq$DnOOMUU6W7?R(r z8Hu!P3jpWr?2KULXtw3#vku}>}Oped#`Q zcXwNA91gTB3J3@wHW#_e>V-=bUAgvGVfGXtV{%GLm7fztjqeg>mJ8)>G0U_&v3O}Q zsmX1hjEd6XAca=t0gs*JvF$U|1Q10HEFF_%w^+85sFeWFGO^;0WW$=Y&RgR8!AE|d6vgS1a*Zz($2EQ?&6 zou70^G!VN%WO={d9bkVlfptr*mMM-cj@49EeS`D{21Y8ZdwL)sBf~b=|E!`|_{0ta zZ5KhgNq(~EEfr5!-7}nTB=gI!TAAt@7Wb3V+1lH4sqsqHNY0!9^P>13*Hes^agC=F zUtM?wMvVzyri51A;(>m=gNkd>ugvL#8BOoL_+Ke~9sARvTx}Og>2tBkf(>hYb6PWR z4`iGWZ~ghMbgS1s8k#Dov$eDD0;7hs{tEEd)5<@<|5BV>aWN!QRW;tmbS&C3Cu}72 z>bV=^i<@|ahlTt$)XQXlRQ&7X7Y34NA})zV3ER2@6*VWQa6oGVcpvbSWH`*h;gwRn z8vf$EM~A@T365rd=*+KRNDy6J=zo-K)twgvE(x-zNhcTF8M5Z>>5m|kBcV*q&%aTK z5i{y2SyX+D8dhEHiSE7kt1CxY&!-1om3EdIVTaoU=(sdE)e@f@>ZYK+_y25KYUS;+q1#F`}Qd%+%5wB^sQCTt#B84cazQ9N^y1E2XVOo2Ct<9 z_2NHG>JFXe%uqaB`7K_zFz;U^%@@i4Bx%~BwBYW5Wx)VV!tc@c06ZoSnq>GJE~u-khyA%#)V# zH+jCjp3arvXU|IN!uSX(k05xEB0}S&k#M;RCO3iu9RhPlv_!Gt`69mC<33P+lWjh? z=Fa&=qpOuB^L0wvmQq%?u2DG=uot^wH=0|?5}@%z5(Tfzybwx9XGxt z>(IhWvAR^e);TwdP8lstEOIsyGLPx!V-VwiG{1S;?XqRd7Jl=#XIPvKspyHu^C!fx z^^vibgg#sW0)G#?eZ!+BA zZ|h3r`||Qfk&$$rxsYq8K?w&6kxHiR7i`7Wl-1UHp=G1!)XTR^N?H+L{=UbX;dD4O z>OdjpzjCPmzi82*yc-f}km89pZV_n8YU9R@M8W0|IYz#iEh8_6Ud$G#i_&rV-?^Hx zXg>L7)w5s%h22&~5zGYbRu_KKiwG%;4&?+I^fIQh1|M3?UI6R|LDg*^C+ZUL#qhA& zk42C+ojxD@XcM17{s;53yYg8`h~)L_tmqp0y6t;o(Yq7;&DRPL4&?+9n?F%htGD(? z4IT<mmf70)Qg9nJis~@uU$*0PT65)f{8M6N9v8 zJDs7?2(P zl6hB--o;%q z(b3frsJNzv-CB-F*2PT!!38Ieg;-`QTDQ!oCT4#6%2K@ghl4n1@X`!{qFes+D+NZZ ztWWIJl26R$@1S?dQepR1JuH;)E#>Wqt6y&(0w$ASZOndD^rzGCU*CJ_(j}Y^N|{eW zV3Dr(78Q(q4swK9}bVJ z#sU7>mUa}xJNQ8cm~xJ+@p}3CG9yJI^TJhNX=zEQ>vTdlOY9n-9X=1TUjD_Pw|yQq z`7H$C!zc^-`U*6ZS)A;wtdC(BpmZYRwjGii`I=Pw{Okh~g0(?!^a|OD0O|l1Wu+coNE;Q)?dc|jpGH?KWD(v|G|2Tn`6S##qs^cKdtgP zPQa-I4#Y?#8SQUa!VU(9ZySP-YkUMh?fK-%OAzXItu8JuaI7#vM1zl{O$VY49b~iL z=oRX!<8Qc~6+TFqPjd(#V)TuU_iQBY`g`f=>v4v8$R6CiOL9E;<%}mA8yi@T$qHJl zwy5Hw@Y>$qV!5f>B(-8!7n06wA>FkZV;WLq-?H-ZrdV0({NZqZ(~rpMU<_gM?2Q*2`?CtoK1q*#3W+B0Vfl!LH=kr0+0|gJ8(EBBGn-%MuH@Q;^=MI7&7Nhct ztuk8yTAG@!#XaC4rML*)ip!2q!9qeuYcx^$-eQ=rYu0-k~A|8l~@aT2fHl8Mk z1S0RiG>Fciy1;S90diP-=8ce~yyCYvj@UmCIkFfS6(z5$8=Yh@4B8oy75HZ{_=J{0 zrlu!ODHIOWn+}~6y<#!6Ysj(JSfT2#7b1bUk>KaGpX>-UvSNwXUx2Ty5ZM8_E#T&E~~p@mkrOB6g#x z`Be1u@&LpnG$+mW6Lc)pTKBxeTM+Et}*s^Y<37Od4SC6!xaAn;O3{rzLW%N;O1H*uO}TLkO)QHI7%Nagk}Y?5X^V=gzLNrGQ}iv5=|p^ zP1f8V#>C%XHNanHx792VY61H~47z^ZJ3pBK+{oJ0=6fCF2P`kg*N#IXJqsZ(tuodq zJZ`MCJJ)uYz+Xhu7#|}@_5gB02XA|;+Mx{~lljcsxZ$>M0MuXw^@pt6oo}Ck<~HA^ zz7K9PYOitwtsZJh%8PgI-0?KLzD{N7!{!wlSBk>^@{3>T$a$01NMn6PnO!$X9t35bW$&JcEnAdyjntnnrz+~!U}Ue zR;6t(A6__b%x&fo?#(hM%y zr$hJ@7%5~e$Q@X1!zBtr?DtFfPZD}6_gCU9ysYXO#=F2+(_Pg|>V;gbnQdABCdL(9 z5mM9?l5azD5*oSBsru(Tts%C9mfQ)~Iz(L0;LQK$Wz(c|G}m0v{2ObN6S0~SVgI6V=oUe zqpGg%+Eib8)_^aVew>pu6?$RC!aKL`%#RcIScAMt5K0zE#@1w@7b_XvBEe?SfMNk5 zV3~N$6uXQ{)(?611^Q3^8(#r3@1)+DH6u^h`RV_E{c7pq{Y{_S4zKUX7}9j0{Kq?^QyLvj>XI;Xbpr0 z2;$@n48mAw!Y8;pF`5K;KUBctAUZ%oKfX2crFuMDtNbVWpR_cg@L$MhiuG6in|&MM zLzomnqT(-QW($zwtE^OTTp`P*t=M-UZm%Oe;-gO}WUdm6i6d#!+5pMmfT#mE1hRg# zn4q>8b2R;WkQEij5|!cgFz76_e&qG4#zB&D89dcs!Z>xV(tb@2RI3~oveE^hMc*KD zg|Kq?ks$%{x~)2c#I?4wiv!xA{Hlkh5;s{2L%EgJ1nj#eDCQ4i<*Q}*zQC77Bu(;z~yGfXs%c+~U zm;7+=ty!WcczFD9V0n=bL9q~42MwHX=;_R$!vQL-LERI>R18j|JVgtAJ8_ugF@po` zVjH;D{TP+7p;5SX>sH!WG$v|*Yp{P)u)O1Ny+$YL3|K}6w=8lX@=VFEl;TUk#ttj9 ztwd%(=^|1p22A|W^MWn$DpU;~XvU$GLe~VA*}B}7Hn{49o#g1^t$Ls8{gQfzdvVUr z#RkP*!S@)5r-sB8`>z_XaULFkR78kXt(ME&ql1G+OEW&w$3gC3b4R&J;}4<%th;*cE>l^4_4N=GOHKI6Y4)}&rD6R*|-Uma$g6geK8a32_sFj{=0Ivzjm&)WkBmc zJ^uI34R$E<{^QQ7JggG!uMi|PG1Xm8xUt4N^uoJ#p{%#PH{FN5VE{=(AQ(2KI1(nc zm5?`@#mE2z5lntmf^e&Y;jPDZcpy|QR3u}>T;8gsFu=<;ZmK3M(u?njsXx#m?SU)uDj^ z_L$X~iDn2cU`FEa|BmSEB`vJ9-?Ngha4tVOBpC2)Rgi4kd%fUgX(x{hf z^9X`{(`)H~bBzRr2RK8}LO6IeU*5d3vr^VJDtNVHH6nhzSYj<&T191$BL+=(g7fF0 zOEeE2@3;E5iG}#RtyXm|i9!j{_P1}J5IFk<%?d9I+VydtCyCx%$@hz21A^trtYnFx z65%KQ4)92A;fZ^XyIhFr2IA-6JjBZXW*?59#;nHU$NO0@?}OA#ke83i2YYAcV6r(X zCRS8+107sllt}BiHUwQah)ZEe&-MO3gE8D-)?1@$EMK`W@uc?ax*=>2D|0zh@t}UR$*+m|*n_}hx z(mRjy!eoS5rCFxp<;x@`glPc`6qFv4i>^xY|C*_Y7|9leU`u$n!gvfNJQ+0!`xcla z2XLh9CymJ^e>40#O@+#w(l*cx|BaOionlL_!{twFM&5N9G}2dSO!l0;(^RZe5D*D@ z5K0yZ!Xt{_h!0}W3~6bsVR&fBKPt+{!$UH@BTT>|e5?@?{C6NjLYTPN6M^4BMg`_% zy>$ZM2A=f&i)XVz$|2R_{Or)lw;7ZPOJIDWsN9Q{K#RDMu!6H1H}k_U@*D{L;@kwQ zv7gq(iM0NrS#%0gDwkOo_a8i%N1?8r_%3&KH^G~!Q~CF1<%G=c zomAcVUG~ntNBW^b^utN`1I^VAH}d$K|79n##$*qnJV(3!F-6X-LlKhE)I12RX@crY z^wtd`6O;9Vy{T~H-91<7OStQ>jZ?*IOU1-w2%(-6CMqlldb@IXe`*oY5ZJ-ZPXfU6 z!LMXsXh^WLR)w=v1V=~Bsr?+Fo|qQ_NFY?_huil_$;$S>@L+feF5|srcQ`R31rrbg z=c<+_9}Fj`x23Q&jT&$yPoUsfk9P?Z_ba|Swdc; z7-?ZZx!V2Lz+tXmPk-WXhT3|X;&$_EnV;wX*v19jBANO2bTbeKRvQ^|8QoX1dXaL{mco^Aqm@8`uZ*> zt%??N0{qn4dAzEk#^4=%1F4%JC*k-b@UMY^K~+NoGv-r3?&R4|GypO{?LN%Sz1M3{ zytmZ4KkX=>C~9h7xfd}I2;@2d7?AY~qgCt>p9VZxqQ8N@B-RFdbP)XFe+{wF3EMmb zn zUKqvw@W1wT&)Y&_&iok>F6l@6^R!)8c8?*OkNE@H7I`WIgAeEKnf6_yp&>EOzuG`z zlK#Z4=W+X!!AW-R%t)mRHJDn+9W<`vepk}qw${thU&PZH3P&-`t*dY+<8?OG35lVuBobPoLCyFcyFri6Lfuqrr$}7D<#;kL> z|LYJX-_?@428Qk*XH=sd_p^ES7#3D4-iZ-2d+obe(RKgBt59XGf~)VPw%l#uKTy2T z_;fYnNdG>+{0Gp6zMoqU7-5B-B~|9HWe%BQM#s97nwINzxNP4Sz)3 zzAz9Bf4*fR)6;`2cjxcT$1Hs{SKsv~jQIiCLRtC8mubDBBJ%21LTP;gl0LRU^eK8!*ftBv{5u(ITV)Os1|KYoPfcHFkNB~fj-ul(bdH=9VwzJb(&6u(<3%ct%i zFF?*83r$)9^Fu;HIb~C-UqoxH8h^;g=^6b_oL8Sn3#`xR4bzp_6}`cA%9S3(>2sEnsKRQzf8 z^#+=?r1rdYLrTAd+WLAQ42d=6SQ`T9NJ8%p<2BkrvKCY5^fWO+hEaS~W9#0korexR zd3nFJx{Nb8=%lawjyUI)SjUJOw%y;ZHHU`JScG$3D|Z ztGaIDl>d&G&o!RCd~S2PabnMaH!B_I#>(0m*FuNEp3%auwss~K4H`~KCP{FJAWuK_ zHRS3|PJ-k^*e`IVk)&{D_fb<TaY>(6y-S@KtG{peQrwJ|v#qaV<@2L$7}54mwKP!8+6YWJ7fci1nlJ}&;aPkU~qitwzf*}7Gw;fG=IQhAw^a0CV_2-*X_o;6_&OS9zptYerFsoD1{m7x_BNue)niB#Q zXV2M+#oy@2caayHB%f?b9prsssx)5uk^88qCE3~y`R{LESFt}lX>qze@>A>n{8PrU zUoyD>xj+0ehfync?Az60zF;tIk~nA(uLw#Wp^yP4(PsNYDEY~Gm$QicS zT$HNd=4boteEVlwlfa?}kN3IBGpR@0rXR7~YGRC4c4=;4x!s*3wAtZTd5m?Mz)$Ab z#GzeVT?4M1$!cMyenv5Z5&f-V=>yR; zt3exF4!VAgRBTNe{^~XCSh{vqf8)o(id3bNk)g)VH4?%q$6lncF=T05Dlk}belaP) zxf339RuqgZyEnv2E%LJOtJImatxrix$?EJm4prx!&C-{m+F9M=cC+4O=U<(Khl|tl~y8k38rY%?c z^*T0!wpese@rI3eRj5kK7RiTZI)dZr6=c}dQgcp`#Evu#q!heM+dh=oL zkIzV#o7$>VJFZFAkxD<-VTsbAPgG18M{@BbSOLtv!t(&DH7^N-4tN{(<#+4;N>_*$ zttK>kwHK;p@K>96W+nCf%I(5h5ii1EV!EB(HwVQM+?rif;9$b9mkF_(KkVMWF)?*g z-16Q6i$r)+a3M$W+2pa`yvS2^p*#=n-yhjMnjoTPtA~TE4;+4L{2imI<>n@VpX3$+ zOqP~(n<{AaU8T2=Q5>zCO#JDfh^K18>1%e#PN|lryXwF1X#I~2lkFcT*DkcNxu@9) z7G-u^vmzc#+ArTsOY%4APl`gB@UKQ)GVvWE>k2FQ>sMW?;5IUV{5T{|?x&)%nKQ4a zUM7@d*ducdiXY$n{o@L!_S=QSw$jqug@q{_H;cIyjZ<$+d?%LQeaYC^IChwln%Wlc zXxZTw5)h!I&!VehbV^Ah?6P?4#THM0FY)q?wB?iU->|Hr0Hl>|%ZOuczMoLrzVsSQ zlXgA_E9*DlcuEGXZo9Sqr{YH_Z$+xi>e^Gi;S1_kW9Q(5DHd2guWKba!RazwEg(77 z=o1q}zWRLbGz-WiwWH0UOzkmv(|vyf^Y`w1L$4G2mGFq4u{cUHi2Gv_p(mv`)rDr5 zm@<8QV6Y%XmUd(`wd2@{Qx}adSUuaiH@h;Pf4S zSR}aS^WlZYdqHGD`4MzC%-DU8sCAzM7Vum3L_$ha{bMwySYBQZsb}y0{SPr$4kzJZ zu9RCY575Gp@85p`FO-3S!3d7Ez`(#~Fmi*Pg0eyd860!dGXR~Zik6e1nSn6*j#rRC z9g>ugkO;CS-n|0h#^&frf>B5FlK9SQuqFt&a5^An`5~lt*mvq}jG!L>0=OsNyY~#x zR#kodmaD)jU3Q%ou%h-)Oei=z7xa5Msu%@h%;*h(B5ckDHM}=$b(9~Z(YD<`oLm-A z@>*&}O7XR0N)gr4+ff&P*!V(1sI3a7NMTa`h^Y{Qy6atAoyUO2cMOsMXKcOv$}Yy= z{~WGG5Y6Z?;C1^jC1Nsh+hoGTB$C*|j8Ru8G{16sRqXa)Zh13ob$CU}Ga~LF@M%^i zj9l`TXYiKxt8Z&(|F-o4lf+F)gV!3r8;-_(_xR2h8>pDDdhFO^CgzLdPudS{SB-GK zk?E;!VRQV>gSyN(Ddn!+Q*TGR^lQuO%>tBEBifP#*zjeES_+zMDwoX7M<;>d<2@nH zRiQ7tc;Ome>M`9Mv#NaI0z{7EcR>}@;9j;oGl_9g1zH#Y!Af!PAiLW_DPv@?j-9TY zocA>olUjU+n2e)fWaNT(v2Seb1hN`AxpknhVFj6FH@f{07$Mt>T=KCG)u6Hl;I}3| z2ETbQTn+@)#e5fU@2NIDjv7sQ22Kq6B`}*T2r_%kUT~|>v$cXbb=Z#_5r~lY=D`Mx z2u*-!3&B^^AQhc}_cPsL$^hza5CWwdM&IKgp##9B%Ur+ymSB!d!|>ffT9&ymx9B=g zT?DV50U_(jW1$lnS*?SL7+?v(daMZOc)X)MR&EwxZ7pD`(rs(j?8`Mc>Y_Lo?E*sz z69!(U#2_g9LlM;lCC+*mB(bo?Jf3_b@lvFV7Y4v-1R`&Ec3ToJe~^VnV1#?Q)cdQU z?^Z>-OKbu!S7EPk{??$vA`Iqx)f)%ECZk!d83b#Ll)1UNO<}>JI3 z;pShlPZJFlW#a!lKN=I5cj4UqG_J?oBGhEu+dci_ytY{Ko%84EdX$=XEFwTPqQIp4 zP-(QBUqwjtujat5Y%YpMBzr{a(mJkP>|&m>uJ*bj(;@|36UMP4cwGXP7rlLlS=2lf zH(Llq_~0pUM#~6i0)$;-SdrhUr+u{U!CRpSRR%=Q0P)HokWtGsF>7V5 ztsyuFu>3MgJY|q~aBzq!D0(uYRpcxTu@lY(io1^=ZxdViwn6Lwxxj-lhYz za|s$-d$tuL%tbF#Q=b8MA3Z|6H37pRgbHUCM1)8%>Ilw-G32XV-`>~#Dd0?)qu3hy zxJ-)AQ1|s>@{5sMb7E{Wn2VyoS;uS$34{vb6(i91!36Dr>*a?~R)U>XcBcjuR)i%B zT#R7N`+ok^Fj|Vg6xpDBOD|qJtR;7=JUA!ZE0oP-c2yM->xkDD-ts-v`XZ!y4?R#( z&hKR8iOD-95F41VC$A$)@lxGWey4kdXU@qzdH7^fd|N4ZL9bNKUW)*?jn!N1R69(=z}SY^DuoH z<|C8hgsC~|uCp$_W6)W9+}2z`*kj^SE!PlH+eolfm3EMY>DK1v=Hjq`L|+Eina!|{ z?xow5ltBt^N?V5T(Pl(d=*yX!<;kkWar_dsQPn$hh6F=s(z*SF4;~|z9HJ?5 z*pur$1;P+$Y`?5Pk-rIEk$4x~8zTX;FOM;0kb1r8NQDorB-&8STHe$&M#Lp0d*w|D zImHAr)g=EottG)(ZKxb&R}7vHVL@b3!}mHEIVBk$tJH{8i61Re4B$<)-NSBsGA$uI zElz5`T@TeZ-jB3BAFtI91FvfQcrOxbrvKq6Gat|AI+=r4UB^`~$UZd1fZ$8R*!Kag zI%HNF7U>S7ET3QBD^(c@?;EPf4l(b!|6P}7xn|o;T56((QiEjYwc^_k3T|Xp=e%i^ zjrkK@WR~4Yz&a94>0N_q1*T4AM_p@c9;@ON0TN7(Q)2$*FaW}}ZzcCoi3KsrL3$UV zl4jX`s`7Va4d$-Wta`kB0m^Tv>!k;<#4UyBc2D&xy7U3s32 z1g?rpXdVZ(_XIG6An;^*8$pOae%w6&r=?5-iJ95x>i~mtNUO5S=+9Z38{YB)hu?kt zIBf7@1`z73NOYj0;6AhoBkc8FyzS~YH$|Q}YT>N96y6`EW5XX zFutI~CW@xu*3Ekg!q8mUzyN9kISTf?^GK2e#R3HN0+|hi$QUWF22za*wg*Eu30oYW zLD@E>N1qlmBjjq8itn%y!E!EI)qswxhg?|N<#x3ZJ!{;Gp_ zz&hxSkI*Dje%-$)__44>?8BjL>b@@ex^6G2H}u@5t_51DKt&=<)|kb`$R}a+e8meR zw=YDL+yWUAh`F$IK86Pd??z12(Z$=S;8z{MD%>6jiTC}71$ioeTRZ3GJz_K#4zSiA z1rXHIVAep|lg2pkNMT)vF7;i^S#U!Fhu8j1jEgp2&|sItGqjRUE}2Q72Ktj0^GLiP zVemeyorKxzItG_3XpjvPJu}jmWaMk!RiFN0mhy9Os3EErq=k5>xZ7%KBIoF--@otV zwx~O_8szLcTvRX6BO}Fa_kS3B^Kh#FwQYEzqEM8OsZt1;iinglg%mQCnIwb=$($0I zB9xL$nWrRk#tcP~c`nf)qESTUIX~@w`@Zk@-p}#8j${Ax+gjH8uFr5?=X4n~qw32~ z*^Med-C3}+SSh>j^Ri6=a@6cEu2-fOemF+mC_A~p@7(3SSAO=2NBO(10mq3Gm)iXI zrKK*HzkTP_wu(5p>2>Z)BPSzH-{fF2^1G6*c;G;bgIqknP4RIe`ENT6*u;2n` zai2^CauM-0+H-|oJu-b#z|+gCuPmDGOzxdNEo*&OlkR6v$i@%)9$ z(VVBUv*|SUQ$ZE~TvElubm^i?%L-2nx1OzKF~7Qe<~Ez{>M~hTH1Se@w$plg#cYqT zJLf*vu!U)DyKKo&P8sg}Sz@I66D}Xe{i(O)8w~oQ?lZGVSKxK-&ZXp41|FtMSYE;F z+VuP;^g)f4m>xxWWpNvU{n3+E8*eX5m}4-g>fO~eQO;kj`{lf zc!+Y=R6>!v*~ne^S*|NG>_Dx3I=(CX3(WlW{E&alJ)*xwo#zIrFkbq2X`& zb2G#5^CJ|qT5aD&>loPXzqEU7l07Ed-dV08RVIijWaZB1nwN}3E{ikQZ`*Vz>9o4> zWr@23jETq0@0c8XlQTC7Z%}wYl>^0dHD6PK~T!%09rj6x5+P3CNUMePT`HHk2Ksl zChWW1(Y461Oz-vBLH=YTwOu9*F`6sn9n2F=`t2DuZoYerVbP_{C8?xqW!r83;$u72 zDbh6VgO_;m@c!r#xQ1$=fg$eK<>g5hw8xVtM8GmuN{ zmeP<*jM14~!B(o~{lQ(31d1<#!UxSN3Oa{Wxp)lkim;nYHXhVt+}Cx~O2tXAm1d=azo;I8|5cP$t3{v4!fi-aPkhs=2->q$IzGm$Ebp@&c*w>CtdD@TT z)Fje~#&P3`@= zyQnK7V`CcuQd7j&=kn`oY1QIfDIA(M&~tJ?CI_+s7;sc)fAEIvm=pbW3Ir&k;pKbf zi}Zhn?4c{7A7L2wbiQS5sJ3f_!GkLJ%pl$3hnPhEzQJgxbqlvF4Qej$xWatW+Mx|F zu&PN=iX*kHZCh7l*5$P6`6hrJ{V@iaL5jp-K^PaDbg!Em&fi~5F z5$=N1#%l#N7s8XhHcKkjDo~|$z5Y(Ual@lMl?gs9UwXp#UONTII)C+koB$8FbEeeL zNpEZ8e^IMZJE_uWxFq}dw!51#P(yh@O=@D*v4w@**P3mVV(u6aTCUS{sHljU_ul1Z~>BJ*?*UYynB{Adw&>9FSN^;SonU z$S&>31&KSHjdwi8R;C|GMBI+hxnXBoLUuz)xC409D|BHtBNc8${f4%Hq|HHRr;J99 zFyp8u_;5kX&6Hil)h3hvm_*@0m$}n*;<-zqp8gyuK5((O;|(KGVKwPDX!B7Veydl|+xRi7I|+qb(OVtlA;?e=k?CJxwy8W{xjXi4^5 zO!w5v&i``;l>b%sphHAe$hUjL*HAz;F~|T!N!H9TI+`@P~`RpG2^LlKcvl3=I>gG!)(TELV#vuru4# z+ll)Oz!tP(bpFU#gg&Yf?rnCNGv;X$k7E1scJ(nU?BTfh>FlM8>@R4m*VEI|hwLt! zXFglfv>Xt=PPXZu;{Ah_POnXvXQb<=Y+QbfKfA7Ld{kbhU{OVFHc3}8yK&qLpmfMD`hxD(w{dT1BazX<&mj+C*%+2_)3axJ!xGr=XMPT0uhrKdK-#f7 zx}_HGbJ&Xd$IoeZ#M1a?A3djx7Mh#e%9=zhK^OT>@@>Tl-#t$Q4xTj_qwExt=zMsM z-S+y{S!uZk<7)USDt0wYGp)(d^qo36f0b^p%0#)jzgpRV>>W|fS#h5QSE92cxH!Go zLj}A`()OYEAu0<6TlIj%rJwI2zKXqce~WS)P85<8N@Te3H6 z16o>4>-Z1-kt#!sAc1HF6krhCzJtH&^@oAZt9nR6PKU7zRppoGiffo*Q2-)??sOlT z`8O)VYp}nukxiM6tli9RO}>KO_6@=c-dLIS3SodSqwG&~(GAO!j3?Wtq?oAKtu*xd)!6Ck6{h>=zYY|AJ1$=9 zJv~`w{0g@3G_2q4#~%bkQ=$b$t7y+7KvVPZ8gT!(h2rQuL{)$G`qMXAJTnN3UUgI+ z*jpj!7nsm%(SJ}{(lj9&5+js49uYsve-tJ=;D|h&xc3>Jz%d9NKr9ri&z?Cyf^L5^ zOgO|n*nRYfMd?t%!P&@|m0mHNaAbQxUdT=VUdsYE8Mn%NHv^&al`dSEY z5E)i%rB3WIhDf^_?{6)&pF%SR1emx!C`eY>fBg9ISnged%+9zpC@5(BeMj1g)m)F!>OR7i=--*#iK~nxZtGRQSg42~Ptm1n zB7E)X;wN4!c2Na|zba{nY6%PB@0j^qtB$;gd1=v zB8pRt>u2t}(gOjj;T<_}Go+Ir^r)PU{IE-_2s*djd*$>E+$Qsbi*(ntSzfLvkNBqo zG8}ITA1HI)f)^eCKIBAFn@G4cg`_n6|KZ?23d?`I<27Re7ww;5RHT=~{DjnptANw7 zc8LlW>LDz57*evu3$7JaT-~^@jkxY$z|cT$fbq;j$eM}C37!`S#<*89GV&o>4)F*E zKRl<)<1l)|%2Wo+z`EVe1EN^x8ABc_kv&Em;V)Lo-)k|X)53>8#s zVhI5q5Y>&Z;1p8EVUUP;Sp}mdF=vT7+@SUB_$yVxW9kvkx~j%_uQf)GUsC+$JO>H1}#n zruzu)(s%HMrvG8tD{shs1b4CtE|q^X?S6p;)17hlF5IY11>L4Yhc@#x4ur{yJ+w@U zWlm@H`uy(P;w^83W_J-`jajYhdnz{{l?MZ!0FcmMST^Iqg( z`W11@raiK6rF-J0S2qzMJ)dk3TAi8dMMqG}4mgs?oeR#x8F0saxQrp&(}3{Gg!>jg zd77h^b;98dbNAOgvK)Qs=vNr6zSPR!VH}5`r&Do?Z9{g#OW;lvTu1AXF>AzS$ zw?Q8M52?uehXrype_Iu+IfrTfW-T?%z9a2MgGdE#9yT_EsdfpFKI;KmGc)gY{}6{9 zmhAk!yn3xTI$qNW~v+!g~*VJIm-9f!V@qj+|5u_9MsqE z)$2h8VJj#kl>O-;zTDOuX1;ecM@yOA4?zpGQDV}QYJzV#pbvcZbc=@5kd1{ZNp zMEO%#$n3d-$g|Ja=H(ycUt@IiMEOX#Pyc&?`j5jQr*5#@njV`Ee&XU5ob5Sjxy(n| z^+Bah9}iix{N(8pN&2q~8{sKMiMbU|^FLkDMOZgMI9_+6J4D59n*a3wNt6y+xMm>& z1V1ok)kB@QS@AO52(-1tnzCwD3eqod-S2Q5mQhz%zum-e4>>jvlLaEZ3pkBgpvHT0 z@=Y#$n)kG2E!yvErTNPLLO9(sMh3_Vui+Xf>!65b%Yfj^JjP|3O0J3t^-o6*-Br0dp6J+|%-})9#g4cXa^u{#RiR ziF6Z|`xAtvWrt0pxoKcmM3aXXvjBt$2}JDQ3K_Z9GUvZ+CA9>iM<8MyvVDr(WDdL% zXl+Dp?)E$9-)=|4a7=knBo;U(gtQf!4A6PnAO=ooIyZaz)Eq1c%uyk1{B7;+0{iyW9G{gFR?Uh} zz=uz3x%t0J-lQgLWC}b-vL!6k8xR5mEni;md6LP9MEq|vBk|Dxn->ij{#Wh0&BXe| zUuw+uDGI%P1c7d3GlRY(2=@}~MyBI^Ddcp#JU8t5`GI4kg~YCb6AX*YJXEGMgQCHb z?Swuu;ZDsqL~n-s9~FrJ zB(6?in9Ke*x1E}rQIa}xR7Zzc`2l;Q=6U=%a`u1Lp+GMadd-gQR?k|3J|NA}1%$|( z5~ByFUd@+6U5-5^CDi`^DZ;-zM9q)D1@56&uU-+S%$+;F%GVy_#QKVYb9eZ8FeZ3j zmBZ(6oz@{|U5R}0;fm(dkvHFocn4V&D%@dSVRHMpG@nH0Z5Ow&{I$`%=NkLBzOaja zTqd~K&UwI`IGP;i>nkX{q1N#xlp>b^c(sXqGvwN>_9RPS3W#3!nFtiIg&FnoN zahxV)X2MFghJqJXgn%Ekjyb-lHxVL>2}N-@-dcYDdc#&u;0+LLd7tgG*Uj8%$h)yR z?&XSa4dW*=L|!zy$7(oH_rwQMTvn*AP8g;s@}zbRT{R2_mY z!;E`NAKm!Awj`d{osV%>d45C@$ZeD1_riMuvpd}Mgo11EIZ zc!Zn>#tNWS9A&GSU#=y4KkI+fuZn0?rrD=glkq%6QXw=B^pA|FL4gnroC&q?=WpL$ z19FcjBT>E=*X(@^wWM&~K7Ri6P8VQ=Z57qI>L#TG`iUndA!NoO#pQO!9nTQloU%vi z9sWfnkz497n}j!B((*MVH1z!9bSW8{@DHH`kHl*<-f!3V&C{SnM~+I!Urq@z1lAdE zuy8*Q+82Dr1t^Y7gq&RiaW~3St^5z1X{k$dOwYUA-;*(^F@JU?IU4?!$Rx=UofSMYnO(B5OFcz1 zM=DifB}bgBHL7yGJJ6oUkz5rLRsxO#c4S_D{uNl9e>JS9`tlRT&p{(WVijWl2a5#Z zKB7Vh5Qk!Km{Q;XTKXo@X)rzoOlnU(Xf1Px}NrH<-j<)fP_}q5d z=%D!Q8w|SSdUbY=Z)kS3xkT3Hx^@~+x#G+QLfr0vzOFx>f^aAIb(X#9E3`Z8&)u~-e&bhG^X9kbBa)WAr)oJj1^ zAdjYA-CNJD_}@6zu-8j4B$8}dw6(vt95TlYEmW7B0 zGyybc0Qg~RwY+imd=R~*|uEOa1_y`IVULUJg`gJ-pN(OqI^?_I8e0t<S!9h zu&kNeV6RqK#inKHQnNVh;ySeSq%KC0LcIp|&EE6HeP_M$f@`&DO7)%N;>Ww9mWPgv zjSPQ2Eke5J|?*SO2?l}Ru7D7rAkwJV1b}a%AMMp)|0ddB8 zdkU+0qr4{z6xKj9sA~ZU!G4o-&+6&1Uw|U>+;^*wJpFSPL|(mmq^gg3txk0!!QEnc z?El3;X;r*-R7U7UIov{Lk%Xiw_x)xx5(X$r>o}2nMxJ+gq)>IjuWRDS>{;G zUa#cA4m|ygZ1_iuX#I_!2Q}DF6n?Tpxi8B1@V3lz-M!25K5$j~1W3FsTnJVbWMik= ze$I`l*dpwF&17m!Htjp#+SdsUcYVX2^v~>f{;gQ6Xq|d+vcqk_blqO&xu*vXG|YHx zTYpmG5*3v@6U||<+sq-2qx=ESJ{*5IaP4=2ph(_X&TR{WFk)T^Y`7~}nbn8Ii-lDJG0w)|ALzAd` zdn6?vbS{XnYNWmS`N3vi&bK0mD%;QNUiPz;*JLs;zL>Um;V5xQ6EgUC&MQs#4Z5JM z@XDe~u8@uSQ=yY=8f4+Tp47@0ginm9vEg7YXqzcN;=@}#6X?n$XA$GeKCSXT`njk= zbZAh*icayn8x|Y2kN(41<(IgjP-dLGONG;H5pD|}A1nSqXGkeY{W z&9mj5{<<`qsbBfq@HMg?m8~6JC-?B4c;^SwpgD$}_nR5Eul$-Ni`%9dg@EnAeLms_ zpQ|LIsc?7Tm(6{BY=E;UBuoGbqRdRIZnDcWsv-Nj!Tn+lS8S5wwCGF=Q@_n6r!b2| z=HKJ58h;Zqh>*n-4Av<98!Bv z%j`8kYaV>ylyyk*v7M{(IJX{USbW;}Q^$StGt+v%7u=@~QyV5JmanN=aZY{d&LLOf z(G5A8ru)3E-@LWeL@=#8d?xEiL#xgK@y4ZT-LWyr-J=45XXvTfS20BxiT*Z`x_p(X z({2y%z=2!+tv*4*)O*4{-KqVrb=Ctq3aQT0*L zE#I1$>=|D0@uVf_P|GoXSl@3W@j?FVWuJwchkKTz3BwJo1SQYG_xFBDCK>Ozh)Qu& z_{8a;d|uZb&o{7dJ)lZ+$I;QeSdI0vBy;nF>eh0aXa0TO-f>LPyq_I7qGDheFmQQD z@RVm~cX?i+K2R>>q4s*rb*?kc2Ud?^o^7Ng7QAx#T zy>7wSPglw|3MV@ZJW@M)tL2piO?&9*K<ywOWGDb!WW^yQ6aOj!ywqu2OG#b2L|5^c!6_>bC6f^WGRw)QaVi%an@C zz_xaQ@6w4q)&tqE{t&iV>L%VPdfzWJuvYE=61I6&rciW7o%si*)0fJ3jLsI>xYT62 zS3$`@PBG*sz$|IUy=3H6)!31`UaaZe%uE|vzn1CNwzjtjCs{{gqPvRj8|TmdCjzu5 z{K!yBNh4=qQHRDm#^m&}$qo&N(rc!DX4&?3a4wuEe)3DU>Tpl#d3jCd^{(ompu@f6 zJD&JLB+Tx({*m~m7pt#_c?muke0?wVXiNQJXDcTM)g|(4+qkbdDfQbGKgnK8AN^w5 zX?4#?jvnKFptmlCkggj9B~1>5e_QIeOb(@Ml=-uV)%Vyy6Wd>YR>0lskzeWK)>hEc z8_+xI{s=4uqC`T-ux%?OPr8kFm1H`6t~lwO@j6O6-6*KdtAJ^bScGXyhHFom(?2z5Mr!KORTUf94NCgMd-!)N2;nf1 zTmId&;(2&{prg*h`J!)cg*~(?K0l}m7O>p)xO->$p{#9!3qWYkqK%teOv}-@o0j(e zoDoiP1F=DV+Pqy+6D);BN4G+fVXYtk)9IVa`=uNfTkV1K1k^)}VASON`y+lrxcfT+ zY@UbQjpX-sf*vPN1)}tj`1trRc8LQhsKj`A(Xzw_@pwLV{{3di`VPicKskJ*+z07v zY`D+>eqSTmoxrSM8&m})qpZ|$vPcb)!3{58ngJds^*v_jV#=BA;DapktjFHH6JQNh zCh#C+#9_g~$eB{dNh^o~;~Lgs3kVhw?8+!~omVhI5s7DVmZ0jAaBnNZX1P2P??5iE z5?GmK7&G1kxRPW%h1k&ZK>OFSvu{J^*a=wV$1^A2Em%%^O~xZr9z~&{q0#;Q{jV7N zKTPTx8{Y>0Ty?xak8JO$k=YlfQ|f<(<_1e2wHS$Kb}c7oyzy*h{j6^+uZX42>*NWR z^P)tt?g+bW{OyuKCDGrvgA1SVRQt`h*!ruX|L)^kyaHA_TOIpdoWq_LJb5Xn zcMf4dqOsw!T~V;Iq-7t8-FtpFT2Lj=TrlfzN9JG~OEt8eD)2p)$ZHMbh_M z40kk#U;}j;(3yxvOXu5uKT5i8Y&n4BVMshkcMAgn-t74NFH*3frEUSi{{x*Tfll#@43m0f;^*O$RyLQ&=(;kU?AR=2} zG?Y^Df(YAtHfMUeBe2&XNXy|Y@6$E4`^0|BH00jc<$lhwxc|NA8Da6~rng#>4^Yog zizvl)@il zg;-27b>MD#y6ktbVMtgz0C77RT7V80{w5cUNA#SXTwePhG~x)QLeHCkbAZbq&@Dkm zQ$23?_yF|R_k4jz382#w!IKm?Gl=#Z99kV<1>x`w`41h7%OfV=COK&1V^m2rgAk8Pmx4ZY*1$%I{{dbzngP!ei|@2B7dRrLB77p zf4}PcPMSGD`-BF14D4N9b8|-To9!kQETs0%E@D&`h!jSJ`4-DTH9rJ``uhNln=wuH zWqV3Z_i$F2I)o0g#_D7zvn!Um$XzlXeYt{lQ`pV}FL}>V!!__0T8a!c=99w#bUU4V zFa5ZkBFtKIRtW4Hki;&;kjZ*4ceAO#v=VRT3-aek(jJ*5K6SqY)38ALX79K~R^`2Ql7tw!pLdV3`z zCgLyz2!i{qpdyJ~8C}o#n>T@=NCAFrm6g2(NhV-)p{H-ga%XVeenoQFXUtZ(hF1KB zTmit#Lzo&4{@^*T9{{u%6>tK#^}qPzY~L8kF~7EB^L2L74RI{zCpy>rPDYcJsxH{0 z)etEnZkm+HxlCZS__MWJp8cZdeYO)MkQpn3c>GJR{-1_yZq`VD!}&^*id`1z>FI^N zAD<}(+NIBPVsh72 z%>$;x_n)EUxfT_**}c*Pr3B_a0;h?N6*iEKz~L2z9x*3-5l6BPY|XFEL&bC*k|`bF z#yPo)Jx`18yH-jmr=&VqmJZ&1Zny4AiJCin9`^@d^VqyIdDhuA$XYC7>XaY*Jv+wE zL+Xdu9I;1Xhu%fX(iaS3B`e`BWD7gcVq-ui3yco1&Rjw~sHu_?@@$3H$bX9*|EW>B z2sabiuiQ1lqN3Mv=p4jAsNi5&Cy#>Q;YYqNlx)IFbAC(j=DqGC^Ajq!a!K1xCEQY5 z0HlMaxw?1ZAmK(-Zz5&r1_Vf$(5#UirmA!TqKr-ek4VdkB=*ac6!wNfg@3dFDJLK# zaX%TSN{6Z4FQLI%@KId z%PI|SS9JV~A?Eb+TN0Ym>XWEj?LlGx#OA>|4~@4sTLSOS+^IJa3)#m}Gbm#TXnQZb z&v5b*v&IkXH7gW-F$ zfGhYQ&Q4Smp8?h;mzA-DD8n7Q3`p_mO}`Y11J?QcA`W$NxUGHh3ZC-&cm zPX%=d)kuZgBh*46!11UkWL-crf3q#8`WH!Mh7Ss5XeTJNtsc8h! zJn~W_pcMzxa@56-U_5|t)IOV$eeK!+WU$vG%BlOXg~eus`4B-59I$cv@ltH<@b)nx z5R9bMArd2QuTO<7RXB$2K6>!HhGu86WO5;<+sG?)zbqqHL0v=LXlnE^e+6Zchq5fWt}9 z(Mo;qGYxO+>RLy;n#;fAR0FgtmjPIB#CImm*^Z-J0?(0SG5Zds?eXKx&ywO=Kkj~n zYp%n5Uwi=h(s)yv=)B*q-}bcFj)8jH=!|-rTjKFzmRY88t7zxUOr|Qot0F7yFT^*Ieo0e3dq^u@#5Tl(cK8_OV5#Gf`T7&CW$axhegR>!^?8+IEb{tj! zcZ-7b>6tj8o z;YMMP(X3ECJN9rZ?|q)sj$mk>DYdvk$XK+l>`d%@M4zR+A08aqq7p_PIkI8xx;0j< zUabOGG=$EZc#$&Mfbi3MI2u4QuST(r8-)7eyRU*BqC=FZT!$wZWqMfu;FU!z_w zHbP3U3{oR6zMK8{aw-4iE-9NuYinyv-0(=ym@HXwJ>sZ+uTG)`r(Ut>7iH^)mkb== zLg@9X#t-zo)b?x@q8e#0NBEx<%5Uj~ij)*y%#d1(7brXbl^@Oa*(1)wIp4*_p1r!w zm(rVy<7FN?*H4ePTpfi%x;gsD-YaC!Q7};DkF+@bti97vfBz_9&5+j3b|`+=vj_V& zZK8lV_jnU)K>lSCT0bmj$_vjakv$mWK!%J%j!lOuZ@b|=%F>U-rIkiTMg;so#iazj zDNdZ{7)$f>dudH0dR5La8#G(TRQoX7K6(SlJ?$e?mRkl3H=>BY#Op`)Wy z01t=;V0F@c-=2+2^Qr(&BwOQl{D6(jK?memRZaL0s7t1*W{|bcrewEQ+yzfM=EjYe zZjR_gqt~hw56yl5-UK_k=2ge|(6kWK0;n0U*a8=3Kzn*FL4damR6;t0KzYGpXNZf5d@%pyr_LIiT0wR z5bqt}0{8-gF|WoO97Fng;~QdT5!l<%0snZhVs15mB1prY!qU=$&mn^V>xq&Cl^6@` zj}2ff7@>qhSn6_|;OSxt;0ydwcp~~~CqQ_QoRdA(}^B%^x3q?gcaVOGTtn&w$CnGCMI_@*) z&IKW?iYV2O2GkDA+$@1TSa>hNg30nP~qfoa2K7N z^+fIuB&jsWk@f)XhtQl8B}d-Eyw3!+XEO?-r+50E59c_EN=ly8xF@g_ci`q?^;h`e=eDB=wcG!2Epo8FuVk4O0VnbDQ>gUdxF`eDf(j26uw7B1gi#BB$jm7cW7O$e|&j^E`gVF z0_TN}zCKBXh4ha?q*3q{A!@YJsB z*(`U4=7vX) z6wyibkIM82?A&=259Ku$c{D0kz%$I0`_NApS)Ek7ef?W$a(mi>OHto`=xF8+6xdZ!WpdhNyy0i5PzA3uu0!XY`7kzFH=Vie-C4VVUi z`PV2;%m8`tL1)4kakISK#!)nmvnV}+=H2P3n*~bUlFYPQwQ|;#f6dr>Kp^9R>@m)A zgOjQ=(eKhXMphQ_os)c9bFMgHug`Hbm>qZRH@aevM^8*l$ok3E3y{tF>=@=dLwf3u zj_4I~h8v-E{)EHv(ZIk4Y=1tN0IY0i6q*&+$X~)YJL2{c zPQ|2$54lKeh0-#z*LGN|UkvnnR&18QSNIblR~K-*W7;1*#RGB~GG>c-_TAmxWsqwJ z9RUNB1MowvpghkrlKxZ4l{!g}*dV?+{bl|y%p;LQxnSdbyBNi*MXf&-86QAeP$gAW zGSC3ehR+!T<sEWy_d6m zLhtB#+BbG^yt9nO*o)epp7ki}8!1{(!Ti|Jf*kvqoALj3 zOgki)t=d7+mCv>-@NcF(^{?N-%=Msa%aKY0mo48P*FE;RFLOYktJv%HOMb_w)pMPW zT3V4=Wztd`_wGYfM4qX#a^QO#} zRLCJcH}Vp51e)vxQCUm<`Y<}`|K*EI=y>ilP>>0vM1=bg%#rf-@0u4()aWUP*`EyQ zEriaKVdGvd+z!nk456{htqOBt^M}Jvmx(`L~=BD2A=1RynTnSY4~dckki~4pmk5usXlGbB((uGH7LY zOmzr-vf706Co6mPDy?IxY3iupAx}KiSb3FecK~1t*O}oBI5VYYoDphFV#dg|fKD?Q zJ@d^w{F%Sfa@Em=5XC&2y90vDDP=H3R|UG}#M#%#YFKuhn)DMtHq(6q^HNFjj6Ihe zIvofwCLbQ@al77hEFK3V*z!t_MO-DMAa#F=!j^Nrjn6NK$#*($NWlZG4B7yGQYE+V z`5LC&C;vFRsXXslWA;~^o8~q)w4;7YZBpGClVp!UwrPc1EDnM*C;;uZ4n6(zh>HGw z?N49WF&1;`xe=AyQaUw-Wm7;<5``{Ii^=%c2F0Jl9UZ;DelOQJ`MDVLhwa=>J2;Rz z(v;YO2n0FWOL8!;TSr478w%rNt^i}k!N>~4rV;(cX5M++rDre&loES{LRuix-2>G= za&W3>nq9-F>O;#ffCI)D?yKHeXi z@x0O(^#Hz4d~e;Uw~CJLRP&x<6wQpYRo~Bp5_qVK7)7 zW)*PAU+(!I8&L1T;fD{rtUc}?KDj@cmZGTGw@qPUK=c^74}O@eq|%W-&1_f^0z4 zrv`I|@cQ-Z$)|8Wca9DENjT<1Z~%qgxN(DI)j&6CA@o$37rFeKfI5*>_QIl~Xbk2# z2x9M|b6=nDY{2+i%O9{e*s~~tI4Pk-V(jFt!F%{M;CY9Ylz@5jmXwrq0_-3+3#5ta zI3u#ECY56|4&AgAnm0DP%}DGaGIDaEh=+#L{t#feHxS01I`edUcv152TlT37HilJa zT;0&`L{K6zbTX~3x;G<_P2BM`Rd0z58w8tV&{`BS>oHz9=#(S}nJsmwF=uM(sL%3d zWg+^^!T$co_E4|-N-R*Cz7>3{(BNmW?8@-&Cq~B;a(gCUZ#(Ot8>{pM)@DU34$6OV(krdG5is8E`gT=B&f;7tCWi3nLPMxl z^K0743}0({V;`wb@pz?7&l2IO1lAf03(F>9VS19iY0~=g?c29wXxAqC3SOEN6Hm+N zhYt*B-zf^nOhzG-6hjCW9^ZM3qm1M(2a8bO)m7A%c4o>d-$%pBHVmc-cUSa%Y&iz(YeE|L8G}8 zo0#mMX8pWAzvyCls*WtMFUvYNQubw5HqGB`nTMRH?sUFyncz}Ys@EK9G|PX1FjZ3< zALNp5Cl6}==z(z*gKjezED}`dHS%$8adEM)f2KDt{{6dbu{ynM{p{?vVS54eQ)s;; zhpN*GB`>2CM)Fnn#MER+m+=y~=Zgr)foy0siJwK~haCAQ9D!G+IEuW&i%KpJW@_L$ z>Kr{-TxiWZvVq@cBGm4qDf*;)i)x?@4GxyyK zf)^eobmiNzw6U*`u=n>!-Bfk4{>a9lOwQSnQX^X9r$VaBm$~aLvY4|3PN`c&weKr* z?BKP|of;%@JaGR$8$7b3ASo&7h1H?G02ksr&}p6gv7=k}diO2cR*uQUix+7C6%n2W zgJCE*({|)}_S^zAZHYc?{_4{Fny$`Iu1-9!%lmKr_VYhmLZw1;x}=6fTYSf^^0RCn zBj>;HGAV3gq2A0cqHtuJ%pm2l5X}SGC$y2P16}DlV-HklN3J%y%l4w-&0V$Zy1|`F z(*yQiuak8cJ=s6*soTo&?P5~R=5}2c<2C!!x82sOrJ@w_%Gf(yJ-SgoCxm0@MT$+V zX-;%2#gp<}G1+k0(#z?g`Hy(1ht*R`C+vOb)g#@+|1`TQu={}rahewAF@&nI7FSg+ zw@NC+>?GNwcXg`CE929gGB(0|nmT-x&W}IKTNB-{XasUoHyYlISsUoM>Jzp2fn`1{ z&sTcZb}+vgth#0r8`()QNZx-~&&BT78RGz*a3lGYo66pNbsQIbO@i$f78{i)C%M+z z47s>UuUZgJN~HXXO?p|d>NiDFE0byeb-Fg8O~?Fe>{;4|D*}toy)`~7%UEkb)hfxc zJ%T&SQOdOryIf$`Sq9guao#w%(Sy+T`d!ujL5X9k!xa=EDyt3N^TdR^a^o+@I6NO6La2YM<%}aKd-)8Y~!yc>Y6T5v(`2C743$`rO;R=3Gn^S07 zsMai3Shk$f$#RBuRiT!Q@GhD08v$Vpc0wa!-q#9z%)bDf!%yZ)OWN#Jl-=ik569lV zRi-TKIzzp2;^Wr4{t8qTdK!n92P+KN&*V!l9~D}*Tm9m<9izidOnRsHAFR?UPdVS? za^>R8)?{D*`bFo>Lgm%;p6T3qJR)_tqB z{O1oZ9~KNYcB;zi`~Fz5k$coZ{qU27fQec<%1H9)c4}AuAC?ooyB-^V%k31dEzs}C z%Kqq8bHO}=Pi>psuj6*syHl<=kmonThGjSpL@AGZMF)+Td_v7|`djVIyC}=tdwsTK zXf76LXEU6c`Y?~1h5hYl34 zYkFDrYuOhq%j3sZAEY^>Lba%LZ@YrkrUX$zmh z@NC$WpATAS$!)4q-0ag#G4Km$*+cC%?MJcT&EDM@m>o}Xq?Xa{`@EsDu}i;h<0`7> zqiW0#duv5L9zKx9{c}Y|siaMRcYyBOjzg}~vzOQ2WgTt`lsnSLT(4B(AUP-C@`_DP{ z*cwr##-_lmj2OlR!TntRPgFR6ru00ydOYFjmBXyk_RT*iD=At_N5!dWgv`1Ebe;u;t56^ra-)0Bxt66LV=KdY^TmvpuGZ`$osdF9LoulG~a>%R?R} zeq4|AhU;cc)pzs0+%h2=kfD5rt9EgP+zHi*t;Z@2_*Is+x%WmC$*-$56YQFkqteoz zHZP$r*;Z%N5-h;Y;Nf8syb9oCLDoiT?~IUq>B$ROA3mHW6OTNQJYn|%1z0m^(~sq1 z#p_vEYEL~}j6DpX78NVUB0(F;h$NzrKzkU3N@qDTfls@Rr~$-*%)Al?EzDgC!;K|d zAS@!HY-^ikYgEwJCsXeQjgoa#){EiQoCpSk?gt=%_GRs}{Oy6jEW(_0*b+ZvqgA&JXA`4T>TleRL>_ zAXp*kk!Rf88j-C?k_qbZ;$Tdq7Bv5?041fli8nrDIXzGI!BDz{J)F)8)SO->y1LzW;lZ^HL)ZDo!N|)C^n+RfJ~uu9&;%2LrzH|2y2wVA zO@I)f+tp!q8iEekKv*u;frAD2!Gy98|1Js)1p>COVHiNWj)?x0vmzp za*^;fcFD);Ab{?qT}Ec+!M#gA&q9oQ1A{4^02AN{L+W`bwE~*Bt>9Y-|3`RE$Ya&r z-AiO-Wd22@W|1MaF<6yUn*a{1PdF@qSPW(g@qUv`$RqoH=~5o!K7E5&$uEFVR#Nbv z9lFc>0FkamLSFYnzq5bNY_KXfANzb63ii3LlM{`H^({(vU}JLh`;I4_9fO7P!MB8e z=*makKk;NOrYN1cI9KjAbscZxF=kT;^YUU}BJ8CAlb8@g#Sf6>T4JIY-Z%K?tr!d% ziH;98kSsXxbDFA1X26rDPbD49syy{D(or-bB7)=tb6m+<(B(@+{d{Nmsen{&tOd9rgLQH*F3*$sqr|iDUsHbP{?oYK8AJBlZ=&ZEc5%mSBZdcEl3_yVm(Z zZgRvik4R4)=>9yr+3v9FmWRpWrYv99-)l1u;>tTbw#9V^HLr1OC8M*8OF;b4Qt$P- z&!6{WL0#v9V3;`re_(Ocf!p1g^Iqs!p`~Ex10pg6zMU-m$Iycvh^b*Y>B;02@4|f%P zsoM*}fuaDTi)M3-jyO95YqL^!@4#_6%Acac^V4vaTnxje-Nyw?SD3H$-zQ{V2 z^?PmuWBF05mS@ix;fl<6e({$e>+rG5sSxY97;prIEPkT&8ZT$(I49d#8)q(rukc_| z;Pv02ew7|&+uHIYDO=nR+SoU%x$Wc#hXR#~0wnW*bpIF8C5|kguHP`? zLC?2k^JXeuLh^-iNUg%K)Fxmlk+*7`o9ZbP<{xTG`*m-H00X2@pqq<8z+oNuLE=ci zhlFqNr5hEjnLqy}zE~TNCPJ|@4m?SPq&$yed4b%Q2Id{Vkx}@1=t0QpnBgttFlCOAZfSn zR?Dsy;oX6WlTcAcp?~Y`PyA1PIifg;ni2O2frYWwtU{VkNwz>?w%p%!dQgw@_@m#F z7qDnY@jKbaHPh14(#MI^5lutLL2D6VETZ=>swzPjv>=TsEhVL1_p2bRplyr8)jmd) z$G8ME=Zeu!^#tE%vEQq0)O0TEPX(8$7w>%Vwv@GpDb1mE=4CpMC8*65?)my;$~sKX z58nS6eUj`1o8e)jb z{7TPRA%Hlq-o2wmlJUvVjHDzAE(9_b4x{4Yr>n0M6*AILO9A-0kNG&nWp4N+z2eW~ z@6Pu5k}E`ETC-`dWx+T706}#NS^t6K30$=IK!K(+rt0RqZSlFMCpJG~j9ijSP!RT> ze_B_U+}5y;0{C9azB4Q2ZwvWhj?eC+;n#l^t%G5+7LzyJEbO8_GJj*L>*AGJJ?ay_ z;uy26TJKEkm5zNO3B}{yT0r)0K4IszWBOZSbidtx{BGFPBi)t-ajCE09b5y=IVcL7 zJ0gRon7#P;EerNozY!m*0!Dq**@-u0;S<5f@MG6?jX!HGMU8STWiB*v|JC>E799Sk z&=b(EN(`w_pRE&WZb@FtEFbw#qv5{A{cg*$Pka66wtR1i<_LVxYnZfbsYYMGOmXvm z^+JbVGJ2<`4X*_Auy_+S0DcD3@QD(q4)i3-a=cm|_?eQw|5KDFowVV`kl=~m7JqBz z!Qv&3w3e|0x-Q0nrhM0$AC3&NPhZgDZ5b?F%UrDb&x`V~C+^8vMQNZ3 z_B)?AZ?{ZrTi^{UCHuKoJ6!J%B<&v-sGAIkRpjHflm6$8({^5Fid}Bb=O3#r``&3; zI@Nq?IP=#Bvb$HCrzRX2Yu-G0*=>u%c?k)L-qja4h`7T(NTK_LcW%s|Pcad3#i$|u ztj(U4=C^d>R@LsO3JR-L8CrEZoIA(2*gfo-EkKVW9N|sUdEB(eR8l*B?&Rk`SzbK8 z$!E4Ub|<1KNGLrrN_TI**p)inscyFQ{C1J*cxtb^YEFPR~U_{X8IkIQ{heN_5Y)NKqKiT z=^Wbc>fTVaDsHv;p6vBPsvAlQHfF5K zE13>ms@F<8(@5t{wdES>OBVZPRi$p7e?DtPyXlK9zfQC8U#Zun$Wz@Fs$;coNdH%t zfZx0Q&+px5WnQ2BXdQ=n$hJe&qg11rYfpD>+e%LT-qlgT6Q&ZR?Z;2|szbxPyV?>Y z>gf($sP~|(p*g5s%UVTc=Dp*%Ns)V)l9J}Xn^@tmgFNRa3^BP}V4ZIMK>6yH#GODgEM6$jDZTsq=6DL4L>m-@n5w5*6GzdE&S+ z-QJ5joj;k^G5`Aw@%N}Jh0~5w>X^4}6*M|+Dt*AjX@cj^YW=P1Z_*SbJ{@hNx4%{O zu+kcif4rKtr`zv+lpUUMXGga|3 zV%D_E_3}-en!&ZK{(0LPRAyq^Q=-$xedr^D2iO1e7jI9(uHB{`clyDj zCpYE}*08RL2p;6Fc31t^S5882`HElv3g5Eyg^NqRQgT5!dB4;1pY6R?W%F+Ctx76+ zfhwuTc-F1^dc?kY|MbPYVj9%b_({1Hqa(Ir#ftiYf%1WmCKg@H8C>$o%s$pey!RyZ zhi&`mI2GTtbFd#;j4hE~H{3I?oFdtaeX5$6b3qr`cqocynq zC5dn}=risuH_EJjY!akmI#juvCRzU^P7|C%gByDP1@Mr!!20O#mce5wX8-4t1LtV` zXItV^id_C@gcgEQoTBylxdr}asM=8T?X-GNxjXmhe{*l-0zQZlkJ=DZ7_ z+qM8OOcEKxe-XPls?O)5vv_T&Ze+q#QU|^|zN`+1e2AUla%BW=R7PaTh135;daY1B z2x!hj_n5W${`pvgW&f$i<@BjR>I(@la@!lLYXl`qxKcC{5+I6VprsAscz4rF{a``g zIO-)go=Ts^U7&2;`h1zmWYeiCCtF)Vbqx(F3Rnx!UiSCIW^E^B^lj}H8D~4p#Q}IG zwOJMKW8<~|HJ2&c58Ir7+MOT54+?OB*eoq%~4bp^>D3#LP{y9_NFYIrINsHm0b;Xzl7 zBUVchIz%KbovvsnLlu$YUW=L*y|N<6J^z+Vx+hL-h3sQ=Y%GAy)T7R|{XeQRpf>@H zWQBhQ8+jApiHm3$iQ=B9Mo8a!?V66$%N!?Z$p}4Q(iTomX5)gHNTxLJ$=0Kom-w8W zoU(#Vo{O8CM39tKRz3pni#G0o;BNhw?+%>M{P%%o@zQru1Tiod&=Zbfmf$7Rf@V~7 z+Q*NF;2Q+3IEGY)TBuH_DEPWCk2~i50`xefqb5tHBSjfHp)V#5tY~K-oLY2^=Y|5x3Y?i?;jjWc8;1Ll&P#rv}(32DQc-TFglXerNfETV!KkQ zK$)_wtXb+T_5(W_90O4qE)xWi&Fy&$HCwVQ;~x_KC^yY}-gD1+e&;!aD1~CV3K|Sf z#v7GUk#nICawHh0;zvt?(emX;X_6~DbuI| zW&4n9=2N*G;!ieI*aX-(s&Iw?p$LnLDx4YW*uGXNCe23i0w403O$J8lS%4>1d*^OF z5^*GGzI{;&OtTSIe%@ck`lFprC(3$`y(03cFP1P%c3a?{iRR>+Q4^mF~}og^MfJnwfBw` z_8GO>VU4e&S^4+6_;}U|?VKWbnM&d7Z{SsGq5mYTTW4^hKqnp-hmJz@@v<#`&>Do= z!f+leAadaLK>V(OjJMbxz;0ucK%h51pPH(-UE~$cc>8fTs83~3?_n(?Dl>c~%fWK% z_DI}DUz^x^49*-&i7h^%)X+;L%eB{U|GhhtZ!@MC3uW$}R_+F~jQ>a^8yv|OB=i6I zq_*;O;xj>Ew|x!S4Fr2JDkYMQo)5tgy&GWMf(F}7^vBXC82?IX-iq-)h2<<*Z_|rV zNnpWcFBU7_j)+{LR&iCzfx`$+Y!_OND2&D~n!}H0%L*%7Q1b3T#|&M&ug0IjC|%#= z4_Qk5vDfd9hxbLRF{Jp_(sv|rIvD(4_IRSeTrZ*!42huHwA16))!eORcgAu8nVP1< zEeG|pC^3_lFc^{WG9bMw)bzj%Uv!7v1#F=x%5it-yoXx%;%SU#GslfRw^*rq5+!df zF!_NSH|z+cX3QY)9LZ0s(Aqd|GMR7$?HKYR>Nc^yzh2|soq)Yc0qGhIGdS5RzXPjE zD&6!LMfX%cUnmwo$7(P)LTNt(3%23gx7qMusE21oj9E?7sHd03XKo=;1Bk31r<9K+ zB39Xjo=QpF?hdjdwcxc{j2~i@1&i_I$RgcWrXA-lDBoB72$$8JpwV|_HQGuXM1v=J zUfO1~pS=r1sBi4{Jeo#{I*NQI=u{@*f0AL0QwY}Z!k^Ba)#M0;5&4>zYqqVg+=qlR zKKScA7{@ta6)r{e8ZFjNQCb~(po)s2!8O(M+G)E*Y358_V*0C| Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater::kBT",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a4e3b7ba1838866d8e4968a404deb5c94",tooltip="A getter function that returns a value of a state variable."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.map new file mode 100644 index 0000000..69fe969 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.md5 new file mode 100644 index 0000000..7e3dc52 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.md5 @@ -0,0 +1 @@ +0917c0d19505e39a68ceaac5aab78f4d \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_a919b68a956bf4875eecab53dbc950a57_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..33ef65876566cb3547aa08fae9de8c8c62769ddc GIT binary patch literal 6574 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 Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::move_needs_undoing",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a7e172728bb0764e21ba1e44aa76cce83",tooltip="Implementation of the Metropolis algorithm."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#ad8102adbe7dab80cda3209844a939e30",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lget_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3c660cb2bec69afe055843975698cfd0",tooltip="Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes."]; - Node3 -> Node5 [id="edge4_Node000003_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\lupdate_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1d7b2a1e57f742d1d401eeb09b057beb",tooltip="Updates the geometric quantities of the center node and its next neighbor nodes."]; - Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::MonteCarloUpdater\l::new_neighbour_distances\l_are_between_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ada3c8ad8d719671d9dedecd3ec9bbd2b",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node6 -> Node7 [id="edge6_Node000006_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::MonteCarloUpdater\l::new_next_neighbour\l_distances_are_between\l_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ad985050d8f094aa3d577df33eac9242d",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node6 -> Node8 [id="edge7_Node000006_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="fp::MonteCarloUpdater\l::new_verlet_neighbour\l_distances_are_between\l_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a6a064bcdc7395374ab73913e364f1f81",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map new file mode 100644 index 0000000..3ad5fcb --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 new file mode 100644 index 0000000..faeab34 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.md5 @@ -0,0 +1 @@ +251959e66a45261c8b532709c6997e8d \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_ac3e40c3b93bf2bf6f2b08291357503be_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..33662ead3750d5ba6a9110ec2562444aa22c2692 GIT binary patch literal 36040 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 F{|{1vVaosj literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.dot b/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.dot deleted file mode 100644 index d54295a..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.dot +++ /dev/null @@ -1,27 +0,0 @@ -digraph "fp::MonteCarloUpdater::flip_MC_updater" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Attempt a flip Monte Carlo Step."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a6833f13e1fd24b039ca1ad2969b8d267",tooltip="Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,..."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::move_needs_undoing",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a7e172728bb0764e21ba1e44aa76cce83",tooltip="Implementation of the Metropolis algorithm."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node4 -> Node5 [id="edge4_Node000004_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\lflip_bond_unchecked",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a077d1be6c31f16241e9035c5a0f93652",tooltip=" "]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::Triangulation::\lemplace_before",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a11ee6051e9db388def8aaed68b1841d4",tooltip="Adds a new node to the next neighbor list of a given node and calculates their mutual distance."]; - Node4 -> Node7 [id="edge6_Node000004_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node7 -> Node8 [id="edge7_Node000007_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node8 -> Node9 [id="edge8_Node000008_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; - Node8 -> Node10 [id="edge9_Node000008_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="fp::Neighbors::plus_one",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_neighbors.html#a59501864ac7f34bd676aa97d9faf68cc",tooltip=" "]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.map new file mode 100644 index 0000000..b70535e --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.map @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.md5 new file mode 100644 index 0000000..5a7c25e --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.md5 @@ -0,0 +1 @@ +d4ea5c1a41fda752cdac87904876a521 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_acf28ad26646a0e87dce57eed5ca5047c_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..f913fb07f3599149f7a2eeb522d89f33452a7b3c GIT binary patch literal 45696 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::new_neighbour_distances\l_are_between_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ada3c8ad8d719671d9dedecd3ec9bbd2b",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.map b/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.map new file mode 100644 index 0000000..92efde1 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.md5 new file mode 100644 index 0000000..a8de50c --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.md5 @@ -0,0 +1 @@ +b0ccd37d32af39b8b5433f6966f2dc00 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_ad985050d8f094aa3d577df33eac9242d_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..fc080ec809aa2cec57e72650211bdc9cea3ca64d GIT binary patch literal 17678 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 Je*KQi{{VEu%0K`B literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.dot b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.dot deleted file mode 100644 index f332fe1..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "fp::MonteCarloUpdater::new_neighbour_distances_are_between_min_and_max_length" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater\l::new_neighbour_distances\l_are_between_min_and_max_length",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::new_next_neighbour\l_distances_are_between\l_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ad985050d8f094aa3d577df33eac9242d",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::new_verlet_neighbour\l_distances_are_between\l_min_and_max_length",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a6a064bcdc7395374ab73913e364f1f81",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.map new file mode 100644 index 0000000..8b9443f --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.md5 new file mode 100644 index 0000000..f96e26d --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.md5 @@ -0,0 +1 @@ +a57398e191e2f0fc7563ce3be8124d62 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..49ad03fc7aecf32f57ca92434da482c3502aa6ab GIT binary patch literal 20253 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.dot b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.dot deleted file mode 100644 index d08a770..0000000 --- a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::MonteCarloUpdater::new_neighbour_distances_are_between_min_and_max_length" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::MonteCarloUpdater\l::new_neighbour_distances\l_are_between_min_and_max_length",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Pre-update check to test that the update step will not result in an unphysical configuration."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.map b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.map new file mode 100644 index 0000000..9004eea --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.md5 new file mode 100644 index 0000000..032f59a --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.md5 @@ -0,0 +1 @@ +16056f836c83c354c1111ab2cdb3576e \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_ada3c8ad8d719671d9dedecd3ec9bbd2b_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..dfeaa8bf389c918181749b2f3a632dd8245ba55e GIT binary patch literal 9475 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 - + flippy: Member List + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -141,7 +148,7 @@ diff --git a/docs/classfp_1_1_triangulation.html b/docs/classfp_1_1_triangulation.html index 0958ec1..757c383 100644 --- a/docs/classfp_1_1_triangulation.html +++ b/docs/classfp_1_1_triangulation.html @@ -3,16 +3,18 @@ - + flippy: fp::Triangulation< Real, Index, triangulation_type > Class Template Reference + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -109,104 +116,109 @@

Implementation of Triangulation of two-dimensional surfaces in 3D. - More...

+ More...

#include <Triangulation.hpp>

Inheritance diagram for fp::Triangulation< Real, Index, triangulation_type >:
Inheritance graph
+ + + + +
[legend]
- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

Public Member Functions

 Triangulation (Json const &nodes_input, Real verlet_radius_inp)
 Triangulation (Json const &nodes_input, Real verlet_radius_inp)
 Constructor that can re-initiate a triangulation from the stored data.
 
 Triangulation (Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)
 Triangulation (Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)
 Constructor that can initiate a spherical triangulation from scratch.
 
 Triangulation (Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)
 Triangulation (Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)
 Constructor that can initiate a planar triangulation from scratch.
 
void make_verlet_list ()
void make_verlet_list ()
 Create a Verlet list.
 
void translate_all_nodes (vec3< Real > const &translation_vector)
void translate_all_nodes (vec3< Real > const &translation_vector)
 Adds the same 3D vector to the positions of each node of the triangulation.
 
vec3< Real > calculate_mass_center () const
vec3< Real > calculate_mass_center () const
 Calculate the area-weighted average of node positions.
 
void move_node (Index node_id, vec3< Real > const &displacement_vector)
void move_node (Index node_id, vec3< Real > const &displacement_vector)
 Move an individual node of the triangulation and update all the geometric quantities of the triangulation that changed.
 
void emplace_before (Index center_node_id, Index anchor_id, Index new_value)
void emplace_before (Index center_node_id, Index anchor_id, Index new_value)
 Adds a new node to the next neighbor list of a given node and calculates their mutual distance.
 
BondFlipData< Index > flip_bond (Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
BondFlipData< Index > flip_bond (Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
 Securely flip the bond inside a quadrilateral formed by the nodes given by node_id, nn_id and their two common next neighbors, if all topological requirements are satisfied.
 
void unflip_bond (Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
void unflip_bond (Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
 Un-flip a bond that was just flipped.
 
BondFlipData< Index > flip_bond_unchecked (Index node_id, Index nn_id, Index common_nn_j_m_1, Index common_nn_j_p_1)
BondFlipData< Index > flip_bond_unchecked (Index node_id, Index nn_id, Index common_nn_j_m_1, Index common_nn_j_p_1)
 
void update_bulk_node_geometry (Index node_id)
void update_bulk_node_geometry (Index node_id)
 Update the geometric quantities associated with the given node.
 
Geometry< Real, Index > get_two_ring_geometry (Index node_id) const
Geometry< Real, Index > get_two_ring_geometry (Index node_id) const
 Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes.
 
void update_two_ring_geometry (Index node_id)
void update_two_ring_geometry (Index node_id)
 Updates the geometric quantities of the center node and its next neighbor nodes.
 
void scale_node_coordinates (Real x_stretch, Real y_stretch=1, Real z_stretch=1)
void scale_node_coordinates (Real x_stretch, Real y_stretch=1, Real z_stretch=1)
 Method for stretching or squeezing the initial triangulation shape.
 
Geometry< Real, Index > calculate_diamond_geometry (Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
Geometry< Real, Index > calculate_diamond_geometry (Index node_id, Index nn_id, Index cnn_0, Index cnn_1) const
 Aggregates the geometric quantities of the diamond configuration of nodes associated with a bond flip.
 
void update_diamond_geometry (Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
void update_diamond_geometry (Index node_id, Index nn_id, Index cnn_0, Index cnn_1)
 Calculates and updates the geometric quantities of the diamond configuration of nodes associated with a bond flip.
 
Index size () const
Index size () const
 Returns the number of nodes in the triangulation.
 
const Node< Real, Index > & operator[] (Index idx) const
const Node< Real, Index > & operator[] (Index idx) const
 Returns a constant reference to the node with the given id.
 
const Nodes< Real, Index > & nodes () const
const Nodes< Real, Index > & nodes () const
 Returns a constant reference to the underlying Nodes container.
 
Json make_egg_data () const
Json make_egg_data () const
 Creates a JSON object with the data of the triangulation.
 
const Geometry< Real, Index > & global_geometry () const
const Geometry< Real, Index > & global_geometry () const
 Information about the global geometric quantities of the triangulation, like global area, volume, and total unit bending energy.
 
void make_global_geometry ()
void make_global_geometry ()
 Initiates the global geometry of the triangulation.
 
std::set< Index > boundary_nodes_ids_set () const
std::set< Index > boundary_nodes_ids_set () const
 Returns the ids of all nodes that are not on the boundary.
 
void update_boundary_node_geometry (Index node_id)
void update_boundary_node_geometry (Index node_id)
 Updates the local geometry of a boundary node (for triangulation types that have a boundary).
 
- + - + - + - +

Static Public Member Functions

static Triangulation< Real, Index, SPHERICAL_TRIANGULATIONexperimental_load_sphere_from_stl (std::filesystem::path const &stl_file_path, Real verlet_radius_inp)
static Triangulation< Real, Index, SPHERICAL_TRIANGULATIONexperimental_load_sphere_from_stl (std::filesystem::path const &stl_file_path, Real verlet_radius_inp)
 Special constructor that can initialize a triangulation with spherical topology from a binary stl stl file.
 
static std::tuple< Real, vec3< Real > > partial_voronoi_area_and_face_normal_of_node_in_a_triangle (vec3< Real > const &lij, vec3< Real > const &lij_p_1)
static std::tuple< Real, vec3< Real > > partial_voronoi_area_and_face_normal_of_node_in_a_triangle (vec3< Real > const &lij, vec3< Real > const &lij_p_1)
 This function is deprecated!
 
static Real mixed_area (vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1)
static Real mixed_area (vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1)
 The node-associated area inside a triangle.
 
static Real mixed_area (vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real const &triangle_area)
static Real mixed_area (vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real const &triangle_area)
 This function is deprecated!
 
@@ -214,7 +226,7 @@ Related Symbols - +

(Note that these are not member symbols.)

void set_verlet_radius (Real R)
void set_verlet_radius (Real R)
 Set the radius of the Verlet list to a new value.
 
@@ -228,8 +240,8 @@

Visualization of the triangulation. A: Triangulated sphere with \(N_{\mathrm{nodes}}=2252\). Black edges highlight the local neighborhood of a node. Circular arrows show the counterclockwise orientation of the nodes. This choice guarantees that all normal vectors point to the outside of the sphere. B: An arbitrary node \(i\), with its curvature vector \(\vec{K}_{i}\) and a highlighted angle \(\alpha^j_{i,j+1}\) at neighbour \(j\) opposite to the edge \(i, j+1\). Superscript \(j\) denotes the neighboring node to which the angle belongs and subscript \(i,j+1\) denotes the edge opposite of the angle. C: Node \(i\) with its associated Voronoi area \(A_i\) highlighted in red. The node has an associated area inside each triangle it is part of. We also highlight the triangle \(i,j,j+1\) (light red with stripes) with the face normal \(\vec{n}_{i,j,j+1}\) and the area \(A_{i,j,j+1}\). The part of this triangle that is associated with node \(i\) is highlighted in dark red and has the area \(A_{ij}\). The convention is to use the central and rightmost nodes in the subscript. Since the nodes are ordered counterclockwise, this convention is unambiguous. D: Volume associated with node \(i\) is made up of tetrahedrons that have as their base the triangles that make up the Voronoi cell of the node. The head of the tetrahedron points to some lab frame origin \(\cal{O}\). \(V_{ij}\) is the part of the volume associated to node \(i\) that has its base in the triangle \(i,j,j+1\).

Template Parameters
- - + +
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
triangulation_typeTemplate parameter that specifies the type of triangulation to be created. This parameter must be chosen from the fp::TriangulationType enum. Defaulted to fp::SPHERICAL_TRIANGULATION.
@@ -247,21 +259,14 @@

- + - - + - - - - - - - +
fp::Triangulation< Real, Index, triangulation_type >::Triangulation fp::Triangulation< Real, Index, triangulation_type >::Triangulation (Json constnodes_input, Json const & nodes_input,
Real verlet_radius_inp 
)Real verlet_radius_inp )

- +
nodes_inputjson object that contains data generated by make_egg_data() function, or similarly structured data.
nodes_inputjson object that contains data generated by make_egg_data() function, or similarly structured data.
verlet_radius_inpValue for Verlet radius.
@@ -294,27 +299,19 @@

- + - - + - - + - - - - - - - +
fp::Triangulation< Real, Index, triangulation_type >::Triangulation fp::Triangulation< Real, Index, triangulation_type >::Triangulation (Index n_nodes_iter, Index n_nodes_iter,
Real R_initial_input, Real R_initial_input,
Real verlet_radius_inp 
)Real verlet_radius_inp )
@@ -348,39 +345,29 @@

- + - - + - - + - - + - - + - - - - - - - +
fp::Triangulation< Real, Index, triangulation_type >::Triangulation fp::Triangulation< Real, Index, triangulation_type >::Triangulation (Index n_length, Index n_length,
Index n_width, Index n_width,
Real length, Real length,
Real width, Real width,
Real verlet_radius_inp 
)Real verlet_radius_inp )
@@ -418,21 +405,14 @@

- + - - + - - - - - - - +
static Triangulation< Real, Index, SPHERICAL_TRIANGULATION > fp::Triangulation< Real, Index, triangulation_type >::experimental_load_sphere_from_stl static Triangulation< Real, Index, SPHERICAL_TRIANGULATION > fp::Triangulation< Real, Index, triangulation_type >::experimental_load_sphere_from_stl (std::filesystem::path conststl_file_path, std::filesystem::path const & stl_file_path,
Real verlet_radius_inp 
)Real verlet_radius_inp )
@@ -456,6 +436,13 @@

+ + + + + + +

@@ -472,9 +459,9 @@

- + - +
void fp::Triangulation< Real, Index, triangulation_type >::make_verlet_list void fp::Triangulation< Real, Index, triangulation_type >::make_verlet_list ())
@@ -502,10 +489,9 @@

- + - - +
void fp::Triangulation< Real, Index, triangulation_type >::translate_all_nodes void fp::Triangulation< Real, Index, triangulation_type >::translate_all_nodes (vec3< Real > consttranslation_vector)vec3< Real > const & translation_vector)
@@ -527,6 +513,13 @@

+ + + + + + +

@@ -543,9 +536,9 @@

- + - +
vec3< Real > fp::Triangulation< Real, Index, triangulation_type >::calculate_mass_center vec3< Real > fp::Triangulation< Real, Index, triangulation_type >::calculate_mass_center ()) const
@@ -573,21 +566,14 @@

- + - - + - - - - - - - +
void fp::Triangulation< Real, Index, triangulation_type >::move_node void fp::Triangulation< Real, Index, triangulation_type >::move_node (Index node_id, Index node_id,
vec3< Real > constdisplacement_vector 
)vec3< Real > const & displacement_vector )
@@ -609,11 +595,25 @@

+ + + + +

Here is the caller graph for this function:
+ + + + + + + + +
@@ -630,27 +630,19 @@

- + - - + - - + - - - - - - - +
void fp::Triangulation< Real, Index, triangulation_type >::emplace_before void fp::Triangulation< Real, Index, triangulation_type >::emplace_before (Index center_node_id, Index center_node_id,
Index anchor_id, Index anchor_id,
Index new_value 
)Index new_value )
@@ -661,7 +653,7 @@

Adds a new node to the next neighbor list of a given node and calculates their mutual distance.

-
Note
The direct use of this method is discouraged unless a very specific type of edge flipping is required. Triangulation::flip_bond is a more high-level method, suitable for most basic bond-flipping needs.
+
Note
The direct use of this method is discouraged unless a very specific type of edge flipping is required. Triangulation::flip_bond is a more high-level method, suitable for most basic bond-flipping needs.

This method finds the anchor node in the Nodes::nn_ids vector of the center_node and uses Node classes own method Node::emplace_nn_id to emplace the new_value there (together with its distance to the center_node).

Parameters
@@ -674,6 +666,17 @@

+ + + + + + + + + + + @@ -690,33 +693,24 @@

center_node_idGlobal id of the Node, which is a number between 0 and max_number_of_nodes - 1. The new node is emplaced in the Node.nn_ids vector of this node.
- + - - + - - + - - + - - - - - - - +
BondFlipData< Index > fp::Triangulation< Real, Index, triangulation_type >::flip_bond BondFlipData< Index > fp::Triangulation< Real, Index, triangulation_type >::flip_bond (Index node_id, Index node_id,
Index nn_id, Index nn_id,
Real min_bond_length_square, Real min_bond_length_square,
Real max_bond_length_square 
)Real max_bond_length_square )
@@ -751,6 +745,13 @@

+ + + + + + + @@ -767,27 +768,19 @@

- + - - + - - + - - - - - - - +
void fp::Triangulation< Real, Index, triangulation_type >::unflip_bond void fp::Triangulation< Real, Index, triangulation_type >::unflip_bond (Index node_id, Index node_id,
Index nn_id, Index nn_id,
BondFlipData< Index > constcommon_nns 
)BondFlipData< Index > const & common_nns )
@@ -801,24 +794,25 @@

BondFlipData that holds the information on the current bond holders.

This means that node_id and nn_id are (pre-flip) owners of the bond. And common_nns contains the id's of the current bond owners (to which the bond was flipped to). The edge will be taken away from the current two neighbors and added to the previous owners. All geometric information of the triangulation will be updated.

Warning
This method only works correctly if there were no bond flips after that flip which is being reversed. I.e., this method can only reverse the last flip. Furthermore, the method assumes that the arguments are provided correctly and will result in an illegal triangulation if this is not the case.
-
Note
This method does not check the validity of its input to provide a fast way of flip reversal. It relies on the fact that the user usually has the exact knowledge of all four node id's that participated in a flip and can provide those id's in the correct order. For a safer way of un-fliping, the Triangulation::flip_bond method can be used twice, with interchanged order of arguments.
-

The following example implementation of a Monte Carlo flip update method shows the proper way to use the Triangulation.flip_bond and Triangulation.unflip_bond methods.

+
Note
This method does not check the validity of its input to provide a fast way of flip reversal. It relies on the fact that the user usually has the exact knowledge of all four node id's that participated in a flip and can provide those id's in the correct order. For a safer way of un-fliping, the Triangulation::flip_bond method can be used twice, with interchanged order of arguments.
+

The following example implementation of a Monte Carlo flip update method shows the proper way to use the Triangulation.flip_bond and Triangulation.unflip_bond methods.

++
// `e_old`, `e_new`, `triangulation and `parameters` are data members of the updater
- +
void mc_flipp_update(fp::Node<Real, Index> const& node)
{
-
e_old = energy_function(node, triangulation, parameters);
-
Index number_nn_ids = node.nn_ids.size();
-
Index nn_id = node.nn_ids[std::uniform_int_distribution<Index>(0, number_nn_ids-1)(rng)];
-
auto bond_flip_data = triangulation.flip_bond(node.id, nn_id, min_bond_length_square, max_bond_length_square);
- -
e_new = energy_function(node, triangulation, parameters);
-
if (move_needs_undoing()) { triangulation.unflip_bond(node.id, nn_id, bond_flip_data); }
+
e_old = energy_function(node, triangulation, parameters);
+
Index number_nn_ids = node.nn_ids.size();
+
Index nn_id = node.nn_ids[std::uniform_int_distribution<Index>(0, number_nn_ids-1)(rng)];
+
auto bond_flip_data = triangulation.flip_bond(node.id, nn_id, min_bond_length_square, max_bond_length_square);
+
if (bond_flip_data.flipped) {
+
e_new = energy_function(node, triangulation, parameters);
+
if (move_needs_undoing()) { triangulation.unflip_bond(node.id, nn_id, bond_flip_data); }
}
}
-
A helper struct; keeps track of bond flips.
Definition Triangulation.hpp:84
-
bool flipped
track if the bond was flipped.
Definition Triangulation.hpp:85
-
See also
Triangulation.flip_bond BondFlipData
+
A data structure containing all geometric and topological information associated with a node.
Definition Nodes.hpp:30
+
Index id
Global id of the Node, which is a number between 0 and max_number_of_nodes - 1.
Definition Nodes.hpp:32
+
std::vector< Index > nn_ids
A vector containing the global ids of the current node's next neighbors.
Definition Nodes.hpp:93
+
See also
Triangulation.flip_bond BondFlipData
Parameters
@@ -831,11 +825,40 @@

+ + + + + + + + + + + + + + + + + + + + + +
Here is the caller graph for this function:
+ + + + + + +
@@ -852,33 +875,24 @@

node_idGlobal id of the Node, which is a number between 0 and max_number_of_nodes - 1.
- + - - + - - + - - + - - - - - - - +
BondFlipData< Index > fp::Triangulation< Real, Index, triangulation_type >::flip_bond_unchecked BondFlipData< Index > fp::Triangulation< Real, Index, triangulation_type >::flip_bond_unchecked (Index node_id, Index node_id,
Index nn_id, Index nn_id,
Index common_nn_j_m_1, Index common_nn_j_m_1,
Index common_nn_j_p_1 
)Index common_nn_j_p_1 )
@@ -888,7 +902,7 @@

Exchange the next neighborhood between four nodes in a manner that will correspond to a bond flip if the provided information was correct.

Warning
This method may lead to an unphysical state (broken lattice that no longer represents a triangulation) if the provided arguments are not correct.
-
Note
For most use-cases the high level methods Triangulation::flip_bond and Triangulation::unflilp_bond are recommended. They guarantee that the performed flips result in a legal triangulation and reject the flip otherwise. This method should only be used by advanced users that have very specific needs for a flip updater.
+
Note
For most use-cases the high level methods Triangulation::flip_bond and Triangulation::unflilp_bond are recommended. They guarantee that the performed flips result in a legal triangulation and reject the flip otherwise. This method should only be used by advanced users that have very specific needs for a flip updater.

The correct functioning of this method requires that, node_id and nn_id need to be next neighbours, and common_nn_j_m_1 and common_nn_j_p_1 need to be common next neighbors of both node_id and nn_id. Moreover, the nodes need to be ordered in the Node::nn_ids vector of the Node represented by node_id as follows: ... common_nn_j_m_1, node_id, common_nn_j_p_1 ..., or a cyclic permutation thereof.

Parameters
@@ -903,11 +917,25 @@

+ + + + +
Here is the caller graph for this function:
+ + + + + + + + +
@@ -924,10 +952,9 @@

node_idGlobal id of the Node, which is a number between 0 and max_number_of_nodes - 1.
- + - - +
void fp::Triangulation< Real, Index, triangulation_type >::update_bulk_node_geometry void fp::Triangulation< Real, Index, triangulation_type >::update_bulk_node_geometry (Index node_id)Index node_id)
@@ -951,11 +978,38 @@

+ + + + + + + + + + + + + +
Here is the caller graph for this function:
+ + + + + + + + + + + + +
@@ -972,21 +1026,14 @@

- + - - + - - - - - - - +
static std::tuple< Real, vec3< Real > > fp::Triangulation< Real, Index, triangulation_type >::partial_voronoi_area_and_face_normal_of_node_in_a_triangle static std::tuple< Real, vec3< Real > > fp::Triangulation< Real, Index, triangulation_type >::partial_voronoi_area_and_face_normal_of_node_in_a_triangle (vec3< Real > constlij, vec3< Real > const & lij,
vec3< Real > constlij_p_1 
)vec3< Real > const & lij_p_1 )
@@ -1010,6 +1057,18 @@

+ + + + + + + + + + + + @@ -1026,39 +1085,29 @@

- + - - + - - + - - + - - + - - - - - - - +
static Real fp::Triangulation< Real, Index, triangulation_type >::mixed_area static Real fp::Triangulation< Real, Index, triangulation_type >::mixed_area (vec3< Real > constlij, vec3< Real > const & lij,
vec3< Real > constlij_p_1, vec3< Real > const & lij_p_1,
Real triangle_area, Real triangle_area,
Real cot_at_j, Real cot_at_j,
Real cot_at_j_p_1 
)Real cot_at_j_p_1 )
@@ -1082,9 +1131,36 @@

Returns
Area associated with the node inside the triangle. See Area \(A_{ij}\) in Figure tr1. C.

+Here is the call graph for this function:
+
+
+ + + + + +
+
Here is the caller graph for this function:
+ + + + + + + + + + + + + + + + +
@@ -1101,27 +1177,19 @@

- + - - + - - + - - - - - - - +
static Real fp::Triangulation< Real, Index, triangulation_type >::mixed_area static Real fp::Triangulation< Real, Index, triangulation_type >::mixed_area (vec3< Real > constlij, vec3< Real > const & lij,
vec3< Real > constlij_p_1, vec3< Real > const & lij_p_1,
Real consttriangle_area 
)Real const & triangle_area )
@@ -1142,6 +1210,16 @@

Returns
Area associated with the node inside the triangle. See Area \(A_{ij}\) in Figure tr1. C.

+
+Here is the call graph for this function:
+
+
+ + + + + +
@@ -1157,16 +1235,15 @@

- + - - +
Geometry< Real, Index > fp::Triangulation< Real, Index, triangulation_type >::get_two_ring_geometry Geometry< Real, Index > fp::Triangulation< Real, Index, triangulation_type >::get_two_ring_geometry (Index node_id)Index node_id) const
-inline +inlinenodiscard
@@ -1200,10 +1288,9 @@

- + - - +
void fp::Triangulation< Real, Index, triangulation_type >::update_two_ring_geometry void fp::Triangulation< Real, Index, triangulation_type >::update_two_ring_geometry (Index node_id)Index node_id)
@@ -1221,11 +1308,6 @@

-Here is the caller graph for this function: -
-
-
@@ -1241,27 +1323,19 @@

- + - - + - - + - - - - - - - +
void fp::Triangulation< Real, Index, triangulation_type >::scale_node_coordinates void fp::Triangulation< Real, Index, triangulation_type >::scale_node_coordinates (Real x_stretch, Real x_stretch,
Real y_stretch = 1, Real y_stretch = 1,
Real z_stretch = 1 
)Real z_stretch = 1 )
@@ -1287,6 +1361,13 @@

+ + + + + + + @@ -1303,54 +1384,45 @@

- + - - + - - + - - + - - - - - - - +
Geometry< Real, Index > fp::Triangulation< Real, Index, triangulation_type >::calculate_diamond_geometry Geometry< Real, Index > fp::Triangulation< Real, Index, triangulation_type >::calculate_diamond_geometry (Index node_id, Index node_id,
Index nn_id, Index nn_id,
Index cnn_0, Index cnn_0,
Index cnn_1 
) constIndex cnn_1 ) const
-inline +inlinenodiscard

Aggregates the geometric quantities of the diamond configuration of nodes associated with a bond flip.

-
- +
State of the diamond, which contains all nodes that participate in a bond flip.
+
before the flip
- +
common nn 1
/ \
/ \
-
node --------- nn
+
node --------- nn
\ /
\ /
- -
const Nodes< Real, Index > & nodes() const
Returns a constant reference to the underlying Nodes container.
Definition Triangulation.hpp:946
+
common nn 0
+
const Nodes< Real, Index > & nodes() const
Returns a constant reference to the underlying Nodes container.
Definition Triangulation.hpp:941
Parameters
@@ -1376,33 +1448,24 @@

node_idGlobal id of the Node, which is a number between 0 and max_number_of_nodes - 1.
- + - - + - - + - - + - - - - - - - +
void fp::Triangulation< Real, Index, triangulation_type >::update_diamond_geometry void fp::Triangulation< Real, Index, triangulation_type >::update_diamond_geometry (Index node_id, Index node_id,
Index nn_id, Index nn_id,
Index cnn_0, Index cnn_0,
Index cnn_1 
)Index cnn_1 )
@@ -1413,16 +1476,16 @@

Calculates and updates the geometric quantities of the diamond configuration of nodes associated with a bond flip.

-
- +
State of the diamond, which contains all nodes that participate in a bond flip.
+
before the flip
- +
common nn 1
/ \
/ \
-
node --------- nn
+
node --------- nn
\ /
\ /
- +
common nn 0
Parameters
@@ -1436,11 +1499,36 @@

+ + + + + + + + + + + + + + + +
Here is the caller graph for this function:
+ + + + + + + + +
@@ -1457,15 +1545,15 @@

node_idGlobal id of the Node, which is a number between 0 and max_number_of_nodes - 1.
- + - +
Index fp::Triangulation< Real, Index, triangulation_type >::size Index fp::Triangulation< Real, Index, triangulation_type >::size ()) const
-inline +inlinenodiscard

@@ -1559,21 +1651,21 @@

- + - +
Json fp::Triangulation< Real, Index, triangulation_type >::make_egg_data Json fp::Triangulation< Real, Index, triangulation_type >::make_egg_data ()) const
-inline +inlinenodiscard

Creates a JSON object with the data of the triangulation.

-

Egg refers to the fact that the data can be used to recreate the triangulation using the Triangulation(Json const& nodes_input, Real verlet_radius_inp) constructor.

Note
The Triangulation(Json const& nodes_input, Real verlet_radius_inp) constructor is currently only implemented for a spherical Triangulation!
+

Egg refers to the fact that the data can be used to recreate the triangulation using the Triangulation(Json const& nodes_input, Real verlet_radius_inp) constructor.

Note
The Triangulation(Json const& nodes_input, Real verlet_radius_inp) constructor is currently only implemented for a spherical Triangulation!
Returns
Triangulation data in JSON format.
@@ -1590,15 +1682,15 @@

- + - +
const Geometry< Real, Index > & fp::Triangulation< Real, Index, triangulation_type >::global_geometry const Geometry< Real, Index > & fp::Triangulation< Real, Index, triangulation_type >::global_geometry ()) const
-inline +inlinenodiscard
@@ -1655,9 +1765,9 @@

- + - +
std::set< Index > fp::Triangulation< Real, Index, triangulation_type >::boundary_nodes_ids_set std::set< Index > fp::Triangulation< Real, Index, triangulation_type >::boundary_nodes_ids_set ()) const
@@ -1685,10 +1795,9 @@

- + - - +
void fp::Triangulation< Real, Index, triangulation_type >::update_boundary_node_geometry void fp::Triangulation< Real, Index, triangulation_type >::update_boundary_node_geometry (Index node_id)Index node_id)
@@ -1711,6 +1820,11 @@

+ + + + + @@ -1728,10 +1842,9 @@

- + - - +
void set_verlet_radius void set_verlet_radius (Real R)Real R)
@@ -1761,7 +1874,7 @@

diff --git a/docs/classfp_1_1_triangulation__inherit__graph.dot b/docs/classfp_1_1_triangulation__inherit__graph.dot deleted file mode 100644 index 84bedd4..0000000 --- a/docs/classfp_1_1_triangulation__inherit__graph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::Triangulation< Real, Index, triangulation_type >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::Triangulation\<\l Real, Index, triangulation\l_type \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Implementation of Triangulation of two-dimensional surfaces in 3D."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="orange",style="dashed",tooltip=" ",label=" \< Real, Index, triangulation\l_type \>",fontcolor="grey" ]; - Node2 [id="Node000002",label="fp::Triangulation\<\l Real, Index, triangulation\l_type \>",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html",tooltip=" "]; -} diff --git a/docs/classfp_1_1_triangulation__inherit__graph.map b/docs/classfp_1_1_triangulation__inherit__graph.map new file mode 100644 index 0000000..7c060ce --- /dev/null +++ b/docs/classfp_1_1_triangulation__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation__inherit__graph.md5 b/docs/classfp_1_1_triangulation__inherit__graph.md5 new file mode 100644 index 0000000..9c76e20 --- /dev/null +++ b/docs/classfp_1_1_triangulation__inherit__graph.md5 @@ -0,0 +1 @@ +c8e4c276e37d98137ddd0e75342dbdc0 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation__inherit__graph.png b/docs/classfp_1_1_triangulation__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..331766a18b86d08dd40ac1bab685c60227e653f4 GIT binary patch literal 11009 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 aJV@gdM|V0CfFf52L`FhUyh7CY^Zx-F;oJoP literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.dot b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.dot deleted file mode 100644 index 3e4971c..0000000 --- a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Triangulation::flip_bond_unchecked" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lflip_bond_unchecked",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lemplace_before",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a11ee6051e9db388def8aaed68b1841d4",tooltip="Adds a new node to the next neighbor list of a given node and calculates their mutual distance."]; -} diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.map b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.map new file mode 100644 index 0000000..15b74f6 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.md5 b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.md5 new file mode 100644 index 0000000..3c6d09b --- /dev/null +++ b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.md5 @@ -0,0 +1 @@ +a8ebebe1c9fe7842ad7e643cae980951 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.png b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..6d66939fcbca780ddc479e5ce47b1a44eced625b GIT binary patch literal 6238 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 E08g5P0ssI2 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.dot b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.dot deleted file mode 100644 index 404d5eb..0000000 --- a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.dot +++ /dev/null @@ -1,15 +0,0 @@ -digraph "fp::Triangulation::flip_bond_unchecked" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Triangulation::\lflip_bond_unchecked",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map new file mode 100644 index 0000000..64690c9 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 new file mode 100644 index 0000000..aa245a5 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 @@ -0,0 +1 @@ +8fec8a07fc56b71aa151613a835f4732 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.png b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1822929dd29cdee16921082e5a48e82b52675f GIT binary patch literal 14120 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lflip_bond_unchecked",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a077d1be6c31f16241e9035c5a0f93652",tooltip=" "]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node3 -> Node5 [id="edge4_Node000003_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.map b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.map new file mode 100644 index 0000000..75dd497 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 new file mode 100644 index 0000000..f8b3e62 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 @@ -0,0 +1 @@ +30d433c95cc19dd751d1c25743d2e1d8 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.png b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..01a250087b459da0e73a007a3caa3c16a8373d12 GIT binary patch literal 17796 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.dot b/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.dot deleted file mode 100644 index 64f8632..0000000 --- a/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.dot +++ /dev/null @@ -1,17 +0,0 @@ -digraph "fp::Triangulation::make_global_geometry" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lmake_global_geometry",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Initiates the global geometry of the triangulation."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lupdate_boundary_node\l_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a6ad51f097deab1674fce1800d2f2cf31",tooltip="Updates the local geometry of a boundary node (for triangulation types that have a boundary)."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; - Node3 -> Node5 [id="edge4_Node000003_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Neighbors::plus_one",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_neighbors.html#a59501864ac7f34bd676aa97d9faf68cc",tooltip=" "]; -} diff --git a/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.map b/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.map new file mode 100644 index 0000000..b9ba4a7 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.map @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.md5 b/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.md5 new file mode 100644 index 0000000..2448837 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.md5 @@ -0,0 +1 @@ +d1f4230f5703a5b3463de0210e69124a \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.png b/docs/classfp_1_1_triangulation_a1afce8afd92f1b88fb15ce7d9cb31edd_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..400828856212caf449f925d1f80322e74da45559 GIT binary patch literal 30340 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�+aoKF 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 Wth*gxyohUM=@b=I Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#ad8102adbe7dab80cda3209844a939e30",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lscale_node_coordinates",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a692685c96cd6a0cdba72b50adf3fb49b",tooltip="Method for stretching or squeezing the initial triangulation shape."]; - Node2 -> Node5 [id="edge4_Node000002_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\ltranslate_all_nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#aaef436fe4758c409b21a135b329edc17",tooltip="Adds the same 3D vector to the positions of each node of the triangulation."]; -} diff --git a/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.dot b/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.dot deleted file mode 100644 index 5f0c8fe..0000000 --- a/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.dot +++ /dev/null @@ -1,17 +0,0 @@ -digraph "fp::Triangulation::get_two_ring_geometry" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Triangulation::\lget_two_ring_geometry",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#ad8102adbe7dab80cda3209844a939e30",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lscale_node_coordinates",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a692685c96cd6a0cdba72b50adf3fb49b",tooltip="Method for stretching or squeezing the initial triangulation shape."]; - Node2 -> Node5 [id="edge4_Node000002_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\ltranslate_all_nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#aaef436fe4758c409b21a135b329edc17",tooltip="Adds the same 3D vector to the positions of each node of the triangulation."]; -} diff --git a/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.map b/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.map new file mode 100644 index 0000000..8eda40b --- /dev/null +++ b/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.md5 b/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.md5 new file mode 100644 index 0000000..c5f6225 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.md5 @@ -0,0 +1 @@ +5e454fd11cf8449882ac7fdb6897d6c8 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.png b/docs/classfp_1_1_triangulation_a3c660cb2bec69afe055843975698cfd0_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..3c80c147161c46d0f2661f527b4dc64e9f39ef94 GIT binary patch literal 17744 zcmch~e)5G15iN;)M(R0NSm8j)_L z1c7JFwbt3sIcM+d{qTHv_uAJgZ@K6E#~8mFD_m7sj);JU06`EU1$h~D1i@s1zpuo@ zg+FWe*rmc>a82*X$snib9~sU0aR|bQD9A`@dZw;TKGGz=w|8dCQIL_bf<48KfEzS4c2Vt=ZJST6tlOJ!|2Ik&B> ztZX~msBTG1$0j8eZ1Td7Uk<-Jjlqk45k_h}`q$#LnVewso7XYfSkOnXrPO8NsQ2FI z4h#w+qo)2=d>ob)*4iprY}l;3e%O;D%*@M6T3=t^Q;4uXoVe&TLUoa+}CxpSGhSj+Fo$!F(!Vd zz1sM2QCYv)t9okjLp1%nLXCVH17W1&!-u)=?<0s_*xsc@*FdR{Q$ayno5Ij{SBvoC z&HMAey1Eo^`u(ZvJEG+`$0Md!r{|pCntiu4-QwR|Arri_;~M30FC>m0;#b(& zB`qv0nk!^wWl3e#<||q5yqNj+AYE2ppU%+#*zKxb4Iw=E`*M?a<)-hSdL4c2?L9+Q z7?qoqb<3W=|0~~;qMmnRLW1>#vO#y0bvDg~3l|Cs3an&0V3l53a=nU=q!lJEEG)cV z=X6QPek}M-B6p_a^jpu>lG>TIwMd7_hPK{bmBWxmlXti`PyhVt-*ZdEn8{5vEZS#h zXJW#<_TY==@3n*Nx$@fD(8NT_;^N|RyKnsL35q$nxoz$3nBz6}K_w+z#U&+t?rZnq z#i^v95VpMwCE+vcB=p%Gx`zbh^mzB_6TZYrfrw{ep4nF| z>2><^=dsS5Idfk}$7HZT?PGVh9q&SCmD=Q7L`1~E4R_d@yRSpeQhqV4vLX|F(%2|U zf5Rm>EbRN-96rKj&=CK_<%Y$B2XQGWv?Y4A(P3fAuWl;9QHZZ8Y1Y@$l0}yO{QhNb zW+qL^V|bYG7sNc7WgSdCIP?E+!2Pji*sjEKJW=zExP9&CSa@ha`)6 z3nj$ItHQzjHa@ww%t%##U5Tewvs_J$L>*$CWD)$k!x3v!x%O;^JStxQ!H) zm#ePwk&@lGaig!setczUes%SZ|H-d(TD#4P3Vwb;!Q5xhNI5w7M$Zf?dbEm?h>cS%Z0k|eEC zp}zc-iJ0zsz_-c=%)-Ky92^|HLPFYwJeMzHi;IiH-#ZM#kvH&8zwr=PTU+~nwataA zTwG+Nq=<@&N}AblZq&-f^zd+nY_kWEe0#1oaXB6R{pW;)g!*AAul@Y_lct(PLPA1D zMkXMPl#J{#EP;;2F`Ta1`T5+RFJHgDvN7Gl!!`cxo5HEEprF>c-1oipads#Q8B#&$ z!6YFe@j2cdA;ren*w|pda^>~@M;t_5U43gdlp!#TG42y79Lsz6?s-0XWb$jFhnJUE zl|#bnYlhd6)e=>APmh|uzP@84>`zik%AL>2V@FVgsIFN?cGU>(E}yI9w$E8VKufy4 z>#L)@8&4x5)C>)Y;hZ6@?;|MtUf(Oby>2#9=d8+^aNXyC7Y?)Y){IobF1+D&|C6S! z2lq<#rD86M<;;&AOUg?xYKV%8x~>irQBza*^L$H9rGul>{^bkt!otFJ=kM5^(e$q? zCKq~A)YQ~4q)4B|#|O{M7+=18S>A)mYky;MhEK?qu(Y(a4mPZLz0|Pz>Gs?Q^s&b$ zCg_A6r!>C_-MB$L_aVknvwLhT3~dEPLiHLo%V}>XATNe)z*Fj?~4|#w{PDP)$CVU z4>-+r63NKQJ`N+Lqzr}1m1a6z9R)k`Mtk5Ky+KcRw-t1*!E8Aa^n%?pd=x@XfI~)B zV%VH~xVy?`ujgH#m%SPzaUw4xv)G%?hLBTG+?J7n=BF-qk130YR_Iw~=B3?@$&{;C zuUc(?f3K;f#p32#Qc&=0WqW@=QN)wm=xypKiVW(LPQyP$yGdRj|MOTb~`dPQ|L3mn6r`}_H_ z5frgOL0HE-11jntw3(iZJQ==fEAoVf!T%4R+j4&hJjln^)_?|&O=V~`3B$sJQ_w~) z$9?+P*7n$IcSZK$LU(3H24e}|0}G4giQ8^5`FwTRSKyGABtMTIq+noBdGX?fj7)rN ztP~Coj?z>jH^JGn%RlEo$0sI^EUnv|{w#ZRhwa)m4g23ef4Vey?Q-Vk=Ekx=wfQ_z z|4?o|@u9nWO=m^a4cuIHh0~+yQ+6@2<|z?_F;OqoFHg$D%RbKQ^0;u>*W#VdHmn?A6E8V?&H|H&7a$Q41(N$3qkrld#8nb7g%&B;d zC4-Lo2B&IjYRaptwHlT6x})rwq2?9y={Bo`*VjLadyYLUFfj#9Q=~{+Me(MXnDgPz z@^I;s<0s=Oe4Y2@hAe~f(RLqc{Z1h~T1HLA*qBkf%&^4$7;X<46;;^8g#L2npFciL z`%~UY0@mj`qi92O?<6w8yOi8|L3h(r)uKuZ{YtU#IWlrt?53YzaN*(OOPQKxbv3lN z-)cJE8y|%(0!xR1pzZOM@19Pos0Z;tzDj6W8IQw6-D3hFjvkzXvP*_Nmva+IsS8Eo;cj7Deo5uv0_@Uz-D87pxL7Bfze)^Q8?P;! z3JzMCXnJ&>m6i3`=lT8z8u`lahfDOFm-|_E*2gIwn|CQv)6)7%^n?$7|5gasf$l^{ zM`vtd5u%oT`w|@3u@CD8vedn&-&+_NV<-;K*wl8Y;hk|Nh6!jO1p^ zsd&PR7wTSKBJh*dtgH%#>uhf)ius@1{5CrJ6?#T^7&{M7Ok`Blvj6E(x~RTOcp!rUPN8(1`C8j9!?$}$Dhu_o#^Em9VqG9j0ad> zFu_sKNQl^ul!in_5#=eR;AR}Eg{7s@v))ZYn3jAkyxQ5A)U!Y4>Qjabci*h)ciQs^N}i%W=gJz3Uvp^W%|J^I zi;BWgJzn?-zZF*T4B|N(Ldp1)Y3k7;eRqnm%Gj6x3^3eE^;qLf7P?=eFxU^e((4I; zCyT)-sue%|^H4@kE*o|(At7P3*;}~1y`7YbYSftC!NGx7Kmgz+Hp0lyub%s^i2W%Z z5fP56@BaK!Up7GLw*P=J5J|Yd4esj%u&cX0$jHbX;YYezX(;-j80x1t zfaOp+KHSx4)F0@p&U?5B^%EZf+Mzff6&bk%%@hCw@Hl<}fgB(nad61E44dv-P>e(O z=I7M$gnV%hYxe3OJ!uT*!vsYR?+e# z;+yxASol`2Kx#G>|15fdUUGhgQFT z&Z7_q1b~4tWkGra+g{d*bN@gOT@emzYp9N{zkgbEeg14a=+45z694R(YOUQMq z{|C~DntEGMfWD2EctlJL8yqzzrml}4GXetxy~gK%{PYBP8 z{AkW_1HJ0=WT?imS7n>%t4Q;%tE)(%@_X{jmnH{Wvz+NeHxJbwoc#Hn#A|XZdlhb0 z?4jde?j2viL%RE$-@j+=J=D|F8yy=fGFV($DXLgoT4Fz*27$mLt-;+C4y~?qsEVSl zy54@Gm5nceawWwMbhr144c?yXuKKmJ)3H2|ze|q`9c4J{I)@2*&Kp}5@X-!4hJ)fE z_yuk!^>*}kxl1k9I{FU$g4D ze*cUd@heg}t`Jop2KiI6Tb(R;7gEik01TvUXw32Fy)VY&=N10Ijy%M{;KAZOGb@J| zrpf8N^qQj`%lE@a05ZOFIlX4b+n1oXz-8d#92&of| zWR8AE>~UPkhr_66e4R<+&g$(urc*i<&p+|ew_e5A!pOKh#!-}c|7<8cl@`=g^?meDTnVVGbRDvXIEXD6$`loue zBmRe6Qq)+CF?fB*-bQj510!C}-=Db%pON<7#oiSr<<%qKsz5xEkC!n*FEKqoPu@wj zdLMRQB{GD~8X>ccMf{OoM4k-;=zqQKbJDU+lrvg?P{8+Q8d6j}A%Y=d9@&UI4(OU9VH==26=-6c{c*_oMAg?65($?3rJJB@NIbu>5h*d4cx zsm<0nI^pv+#X8azgglW?2rIGM?U2cBy}(Tch9|7gS`f#HnChsq4I%B#0~ zsLWJIlodxcthKSJlTysc&698f(~;5HT5KHtwZ3?}KYI(k^rU!_9N68&DeS3s<4f>0 zpE}@cRuu3Fc<+&J@gomO{elDJu^3H{WM=)8zWrufwnt8}joA?`BBo{KUj9(w34pr?nYShhM*Xut_<9Dcn}yKSb>8vXsl z0d22MHpj08fYN$Ow@)G^IQ|QC3V1M6x26=9|Yo@O~sL-Dv2?s zdVPmA&f>|FCnp7)*Ja53NEtDoE!Tx#3W&Xx@O`*lNlxhd!nR%s)kWJgVN30xpH=SA z%V}KIuXCz-Yi6v%;3hG>%EI!GygMH9KFKnR{WeBY?*4T|LMk*k7;iohvDm$>#mbml zKYA2n8&ZM!k)ON9EA?)fAueg=CS!7-|H3t2)%{-v$0^td=u&!OjGa~ZL`1ScQ{KKq z5UMMD1V~qp>dBC2=B-3~3T}O>8-Vg(Lfgg7Yay5!(vFH!eb^0kHN0@;oDtM|(he0+S*g_jSKs~ObDGc`Hk z|74&VfN){0Q>Zz7g(vYdsOWfVc1NFd?kFmjTYRSYIR6v(Gx6VYG)~5JlFm`*NUXaL zeKmuT|FIyDH4{h2>EdHjG8wgC_NNE)iAFh_RSQN21RnAdd;L|l zw1$kofr2^%Di#L(EYU0qg>mSc<)CE$ON!Ri)NBQMnSWfYU$1_63amU9fRu{Fv8MgE zr%ws)>*>vb(78JdYO8R%+fj5 z3b~buAfWUPMZ64CRaHgKo;_Q=Ya8)fVPs8|1rCC=jSVN9#W1B5q1pc2J4@rWJX2n) zT-QZK(RbSV^-CJI5ix%Egvj&c_hRn)D!1*!%_%Ve?#4i_oLpRP0iyxvud1$&iClME zA-{R^=FG+hvA4H(@%=ZLlDkJ=DJUpLYwT(5?CnkL?W5k9efSQD5(&tbi)n9b!vI!x zFvoBjHe%>av^r9TB32W)GC%K43>Ip$cfU(*1ix_|b8#XSk;$lDQfdG|c02qx& zKyb_4{4&A_Vk-y|??88b<1(*^zBH|nousVnE~zx2HCa_vQcNtYH`W8JAU2!<+SGo0 zwEqTvI!7iFU_V|n+x_y|uIYg0{uu_JfbZW;ePEgEoMtiM^k|yC^*a^;q_x#2$8ZUZ zpipA^K=!9ZofE0)n z2Vh^*-k9w_Y{SLH1#W9djQAlQNNaWAl)XLL5JiSOs&R?w*x{AxFTq=HZ*M07wbC~* z$nBs*qUmk~0{EMoK0Ofz!%Pf}C*a0dlDh_IS@YTHlk?o4^oWg%3j$R*tGt{Pa9t~G z!}ce(bmNXNGFbjV*XUtod7BqQVv7Bm9$>tH0R6`N(>YX+m%032UsE&q>sM85Y;5#q z94tzlh65)@B@EkcuD)n`+1LLchCs8vhYlsY4C)Rn&#?Xn*}k(x?^I&`BXBTOtpy@z zwzJe%=eA10#LUcR^_3Bx^-P+mM<)P&xNB1dp00&@Y2bUnx|^*G79xn8oZP|D(Hxj( zx@Ne#dGtC*A4bTGp`I-DQot1V<;`caIue9bA%&D9=vdcXxO1KUGpvQUk3T^l6m6=1y$-?Tbda zy`e)B7-xEYL&NtJ$G3en*Stlx+&V_og| zzP`}M(%znHGJKHy*FcWe^XG7D6TUcr+ckKYTN@0@H};t`%$F`nb=_J$c~gY1CbTr9-NvY zQB(B~^QU-DUc88neGE18`=rNog2==P*lG7TG#YP*>2aq-oJhN1U=1gsN22xqY?oAR|)~+kOB=5E>J$ zL2Ybo?BJWyn*X65xVJ&A7u*vsE2$ofE!-dT_%S-{_7mL|vmR09$p^Bk?`jiusmK(D z?*_g2uPlJVGMJ#wyDM5do6`)4)6t$i>Z@3+atmwu`H4ffiv&>!3wa(F7Yj1^O#N7k zzrVSK#VkA~BhzIzwmS+HK&s*RpoJTO6Ph)qFh^4~4!-(IhVD4{QP0xSxWvXdxwzhg z6~brQ5r!L6TRrxs**YPoqr01M+IOGcYi}(aBwu52NbkS(xq&bW2~jZkY(3Vj*>KT- zZb@|U;zcKC=f~iJ!mWH`)yIU5gEI?vm8O>VhRfv|hsmd~;aN}?MjPC&fan8V4HJ}I z02AlRn)hg+9lo(0;a*M*EOmSE;DH$kCI_F5P6DAjytWet>(2)Ss;%8!w7$|T3CMMXJ-Gt+dm(ReTuMDq3ZJ)Wkm_OnO;JlZU@(7$$G&~wY!b#sdTwRTDS%Ft`T zUSVjXhI^!z(liXJSAvKskI`GY2VYX9PEU?a%+0Z(qyjR*K*5)GseU+v-vKDNh1jP1`V!iqFF|2YGi)L zyZ3fhhRzNT5BJ>o!=`9u#SUI^w)@&>-_ER(9%d}>DY*=Sjgf_r25icA7-Hc>I{*nT z9Jhl9jfJA0@-5za{kO=<{gFNZ?NTy4o1<@-vy`rsnw@YQQsOyE2jB&g1rTEHeI#^p zTEw2s%Uh@5(v^X`${9oE3d-{nK$7Gs!j891OfEr99e4GKg7O0TouV7Xg$r%{{pxe| zoQa>+w6$@eT(grCP*GE(#weA9Uz5OXRe)vjin)psFFS_~;3IIds(qEfT7MQ7hXpM( z>E%no#Vyg|swx4%mBUBBr;5y`8o>Hl*cftgbJNmscOCQ_X|AdwhYF2%_UyZdy<#Z* zhU@d%HMO#;%Fcaq4A-t``Ek#f7zTFGv;*-Gl2jlNXnIn+BNkA0k&>C!rRM8*G4|gm zKZqq~9Bfh_l18R3u>>xr=V(4IH@ZFA=v$%MqM>ru>T^f^?Mdva%(iWik-JPZA{cpJ^E5q?Wu0+;4qcx$BQ;Kz-XgyeMP5yekl>s z2;jj##=W}0pZB=Uai3ZgpZ_i+Ssd3@HU3j_dJNKSP$Fh_vRF4$%b14)MKBQjB_iW$ z^;U@m|2rd$#)-yZTWLIa$?2b$TSrIhq>lru%gb9q0Ysq=oro)*va<5Q`1DEMudq+W zZq)~Kw4J(toel;aLvpcWq2+7D=NR!?FVRQb!{EhycE#L~d+ouq-`!8|8QHvFy6;_n zP*xW7r0Hk)lE|K%Z|9|tGb+KK5SrxNXGj<$9_bdtH6P`(%-0pWKc`xrxzY`^&@Qe#&!dNmtrNx>gt8CsNpC zL*dTS*a+^k$C62m;-ZxGF@BFNteGM^4jrR-hqcEn)cXgQyY)V|1)VXmvm-PzGV%@W zXBTunJ=t&BEFWm1l{wu_aUblfe(X|!{Z)Zh>AXNysOX`e|*-rG<_d#WI99LxW*S=i^O?CCa^K8nkBO~|h z^KFK`bnTOVFIaWEF4$iZ7r%(MMh~he?eiXYlztg{uXwT+X07PW<^~dyJu_*jyeAu#lgDsWPtyipiM$n3vd>&k zU7Cr<^lMa7zD{KPO6tOz`yt-LcRsaVG(PV&DqlTO5mY?6- z;RAufqN2c;FR20f=aAXhhGi9O-?URSAhORdC3^fMMul89!Hpo~)*Qp{sNb)^z)$u` zZLo>WF$Z7U>EXj525Yf6(`p+BIxh(Hd5S*cCjW{^Fhk1gfg9qIK9E()d96=ewqO3Hk`jj@3y z;X&>OW%_AVJu6W*5rM$x<_8ypTb|Jko5TfkG_n#H+0wku;R2}B2IUyoPym?dkXd;H z_Rt@|EpmW6O{}fMg{M5FIm?zOe(vpQbL4}8`Tct!IPr)|=k7u9>qob}Nia`JG~2J) zWqtKnylm2QZ>qgaw|1}(8VDIVc`&qdyRj;K@4dA)@EQ?KlD4-%-%&UC{u@&qQ&Uq( z8MNW4f-wTTO`m4{UR;9(glRaVM)d$j3Qzl-my4#0?JCo)R-{ST1+)#Eu3e777yZdl z2@2YRtD$E=4|@-3sI4!en=|bpXCY}93=|41t^YE7A$^5@p^)7uQ+@ z5am#~bLSm6P~*R?eV8`5dj+qU;~&Y}G40upPsmK7H=@?8E!_3e)>> zPGaJp)S;eYkMf=jSIj$SPoS>(?Rm`owU_ zfHs>fea#%LvOW(-*BMwYO7X5=rve`Ub)9a<0LqVUun@a>Gv@=opa#ic_l^&!7U1jy ze9weUgQ48(uv=*Xz3IQKb`=L}if*ci>p$w^pr^e~6Go5l;V**Gk#2iqY68}7F>&K6HkSo*eEqQtE!C%V3WC^fNNC3b+{}Eny zG2Oh86+fk&mB4Xri;P>6RCoS`+Q0Ebh(n%H6(h^KmDvgzBoZdH(%p`vdi>+Z56ht& zPBW6wi_d@;E3cr?R_8p20zjzDXcz&`ap+xEX$S~H@FwSBj-{lS!K(k?tTn(Z#vXz8 zLkSk!(zi-B$Y4c**kEOU);@XcNdw(9FyF7acPICONQta67*k*0(15vUpg zRU=>ht$WNPgFKEF-y3l<*m6wK8s{ul zvGA$4w@etzsb_5n7<7MFVYQ$Dlan+ZJ-vyE$zyQj7+F|w{0|4x(Gv{H$3%nMSx87G zn7$U{zoII(QdAm40i8mi^tD)Ba%?Oaf~3%%(ij*gBf zmtmIE?p@!ztRGYS2-KVH)v_W34KOm%&CP+}!x*k58QR?lgDCH5VcF@-B*2nDoL09Hv|P`l<0DLV^_b z(3@X$-u+a{P~E#s-CNB!<9?Yke7^ZidxK6Z7r zgKH}(13UOa0e5Fv)>wSA60d zd9~66;XKebLm*#^iHQmNSD63ts*&gK`9!b`NFX8#TAA<_Sj(@fSCgUt-S+$OF_va- zIH6|q2Z{edkbs+yg#`-`^z1iWgoK0wug(|yes!P17?OxT`Lift20N1^>QP!X3H_{M z!5JbV>FEqWe~Fj^BO=a1Sd0YTespw{k&zJrNB$j%1ltGOW@ym0Js2MeFnRaH1jKYz zc5+x}_blBC?9DcMQX8`SbHEG&Nq&tr;&J z4PcQM#eE9g`&kY0<#|94ffkOYQ$YV;rArYS%M*D+@@O+=0RR|;q! z<|7ofr8L*vn(}I_mQugU{!O4)d!oLofvv{t0^;E{N*;$6<_4jKiK2Cdx{G@Ke-ULb zhQ8{;f2gpC*aF1M00##pBwTA8h~eXwgu%nhFbwmAGD zQi(&)qY(-67vCz&`z3S@y)!6D+$;8hwFff*&FMwhY`|@RBKSt#O*9A8arU(&Tqe;Jw z`o*tMKML*4{$jJedE6y-o!I;KB=If5EmxSr_)qNgr~6ZG-JelJzC-yXTr@=x`7QWnUqAx)7mtMG z1IRkn#G-wg^de~RVR-KeF+FGVlcOqI8$H)SAxJlMg25ckPr^zg-y9kqy;wMlc?)An{4O^JDXG0(WQ&iuA-i?; z47kAfZFBLwd01vFS+5DVSp@aT8N)~sy!-SELA#{bX+n@h$fx&kwYYo6=K6N%k3N8l%v|@P7pG($K1<$aGE+{i zK`^9P%+bLeK}*?Zg}E$wVN8al#U13xZJDt1=Bj}!lO~tXA*Ak7>?`9FukS^t=}i!qmPB(8 z>?;^PL45Lq#fIR!9@pQvE%ijlBKV%<(w-jEIXgtgF8%UES>-1T%slOVvyi}mGo*aJ zBj%TM7`CrZMYo!cAKseEEiZAe8#ZTWbH4RL3jAjL}$zkT2}a<<)GXk{6kf8|Ujlk~4_(U?ZCZg`kPzyrkmSpf5Y zPiP26LZHNi>$KM?ipq2+j*} z0DKWQ*HaeSH|Kp6WLh1=KQbe4NJ*`YqvFOx&uSe;$3l?k^Y?p!I*oj%m))3+IRkVQ zjhXNgp3PnlppIdfCGX{U2Z0Wuw;Js`D7ESN6T1Lan9Ot3OyXvio0pOBAV%Hw?&q!ZIg z8+)%ymhPK`j%V>-F_>jah`|hXi{4?yO-S0(WBSR2XpnN>lFVWM-n#MWR_R+ab65mF z_&(i1TDFgM-N;l63)3~k6$1?@krR@={e?4|`S+*9t4GI$VM@%20^7v(&U%d7)xcGD zwl|v{)E27IjL%?5nGCi3$H!%#Tdit z{Q~y0s+y8}4+VmYWipz+Vg;NDxOWMURF;pR^{QCtCx}DQ+ip86qLB%&#A0b@>B$LZ z0ReI-_J{bPu-2iM20Rc5ZBdya|IEy>{adkWR{rSmKO+zCBUS!iBM)e*f?~%j-yCKE zAuQPn@MQp<%fri6$In#{udBNbNJjCqVs3@uBOs&T(E~s(_Dacu0EAwR-D7=j$MQ9x z2~NQOki)2#=xoPXuV#(s2?-&9yG)_rbEe&d?Arf7ynf^vWY>YN*p1f^q4NTeU59A!_JQ;6gfm!PA*cvc zT)g!`;)Dz}K!(eVVnF_GhxMCx`1t>B_Ct`&tVF?4;S;2^jZje;X2#w>y>KN%l^x|h zz#YLGf`ly=EbxoNAWttZQ$W?|v|jZkCQt+*Co|jn7z+hd7sb3Tml!pB2@aPUL;$qa zuXn)#8YQEyeh$fiWryvMv$SLdKOz`xj|=cpvha^Eb5rg-cN=hfdv7mEqsJx$k;65O z?7^t8VPLT?I_gTe0;E?C!q%YYoKYjsO{%P{Vx;9pQ7Ch8e@N!9MX(K?1AcrIv!)4;q~6L z1K*DcNFR`3u!~=4T0-WP_u930UrlxTpg#YaA$$9KfwqM28Z5xNPNSkCBoMSjq70in$(p@(ZH7eRoQD3#~z2&~ofY+S?x8wT9LaOE8%uuAYr-ulVXJKJs2m+OX>Dsl* zJ~vuwY6W^t+Z1rIN{w2gM@R2NJb9T;!Vit!6J2z)t%i^%-?08VCkG#F5X>@!z7q2` zg`5lcV&pG)jEE65Bmtoi#)Oi_2~FS_L7|~%fcc$jun!eJKE z6wDKpE`j+-08A1>I*=g324lIywyYT!Tp>7ccN9xqOJM70A+*(Dbn=sOZMwzCq7mM4 z4rIG0VDLi*2@7T@?xtQR1DyMRpVa}4%k4qtpr8=O9X|E_ zq^uf%enKQo@P4ScFA%dTr`dLS-}G!WtXu0ol%Mk?BH~WU$nrl?;DTx&P|aZ0h>U{b z$>J+-VmQ^nX0?|CY^<%ntu<5=`B=g%3K{e5CCxMFI!{%nd=Lh8kbZ@-7)CBpy$yJ} z8HkA2J+~M^XnX>e@~Wr+dh?`hggyS5W3u)Q?PKR@-Z^LJwanrh+J-`9vaue(i|F4? zzADQ3@%Qj`{K9}W&zmLYQlKqNA|eevEAXwIG+84#=3sSRhntx)bPtqSn5!O4NxYpl z99`mmH7fjd?mt7(_Sz@}8YXRKWdR6p6Dm;#As$)TkgC-5^fG7OYtVO~U3jHOWQBpM zwL~7;aBTY&M&DpGX{BoV$%+-R(g!6Oc@>or&yn2X;=6O=g7kW3W6#mv!`aNj^1mjF z>;CuX4KW0h0^xj3OiltPj=69}8!5P0G5K#(%GNsr5XowT6A$BoX!^^?r)i8zV7OQB+c5K?GpQIXO5op;T1V*5-pjucGsY)F}n2c z+z&cF<22KX(fvw{7W6KVIv>Az!w1SROM=0_4gX@2Wr9r$86`>3^QZid?13%j8H&MB zTHPrPBX-FW^Sk~kOzujYjyhyx?6Fn-exjq9&+KK$Rxd0)N? z1Da_gBO`;85C|fUa_V)pvWo_LMsxph^ta!xHCZ4px>MC-!eetvi&}}I;3CJ~$??&3 z-$Mb=#Ih?&^NRo5lQ`h2yuR{(hgMFCHYXcv6{%mYoj&9|EFtLtJ$QTKVK0o~lfWXv zu*iF()5CjEx8C#}m6`nC(Hcb=G)1PXJGN$KMd0?q-pnlM*JAJM_(qp`0Vl4W2B8!8p@OL+ zhw_KkpmFD^q(=t^VuC1vq6?d8c5AECYO`N^d#Jq+5*rEAt=qS8A%+(Tn^N*dV3#V{ zv@4#Y4g!7;0)@i320m(d*i}&my`*Mh>(WKsh|&ewt6VeSy$8$Y4~qr zuDc@M+FDwD@cEC!!!JO${4_nCj%q6~JGcYsUQz_c7oY9TZ*HnUugFnlw}R<1fLd%c z;y%~WQQ8{EX=RxrdV}h9i7Qv`um~|_!J@{2B41xu2jVOl$U!kbTZTN|+S{Ak3|-=z`@AI24ABFiDN5p)%*&E|#a2jd9zTU0lpr(jiXF5uIPBpjTIUpeMcD2FprH+=C z)%f1mKie@k(Bd9<=Q#A)Ly#*9Qo z;`2stx3bF~7m*2BXO%#Vfc>0!1d&x$L;{%DSrAFGctDMKi7jtm<}I(tJ2>dPn7D(? r;Bxb@%w0F6$A|wG%D?{i$On^*RIPm`ffg)j2 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.map b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.map new file mode 100644 index 0000000..675dc1b --- /dev/null +++ b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.md5 b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.md5 new file mode 100644 index 0000000..a0a160b --- /dev/null +++ b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.md5 @@ -0,0 +1 @@ +71372ad576629fe3e2f57a3777cca0ba \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.png b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e6d166404acf2c8cf6b1b3e619babc95e673a2 GIT binary patch literal 4921 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lpartial_voronoi_area\l_and_face_normal_of_node\l_in_a_triangle",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a75e93af077cc8434bb76a1a4a39f3adf",tooltip="This function is deprecated!"]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lmake_global_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1afce8afd92f1b88fb15ce7d9cb31edd",tooltip="Initiates the global geometry of the triangulation."]; - Node3 -> Node5 [id="edge4_Node000003_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node6 -> Node7 [id="edge6_Node000006_Node000007",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node6 -> Node8 [id="edge7_Node000006_Node000008",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map new file mode 100644 index 0000000..f4d8578 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 new file mode 100644 index 0000000..85db1df --- /dev/null +++ b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 @@ -0,0 +1 @@ +b0800ae338e87aa183f921c77f5feadb \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..6f37b32f60c6d581720096cffb10ea4fdd57dea9 GIT binary patch literal 33795 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.dot b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.dot deleted file mode 100644 index d1512e9..0000000 --- a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.dot +++ /dev/null @@ -1,21 +0,0 @@ -digraph "fp::Triangulation::unflip_bond" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Un-flip a bond that was just flipped."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lflip_bond_unchecked",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a077d1be6c31f16241e9035c5a0f93652",tooltip=" "]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lemplace_before",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a11ee6051e9db388def8aaed68b1841d4",tooltip="Adds a new node to the next neighbor list of a given node and calculates their mutual distance."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node4 -> Node5 [id="edge4_Node000004_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; - Node5 -> Node7 [id="edge6_Node000005_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::Neighbors::plus_one",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_neighbors.html#a59501864ac7f34bd676aa97d9faf68cc",tooltip=" "]; -} diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.map b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.map new file mode 100644 index 0000000..63d7711 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.md5 b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.md5 new file mode 100644 index 0000000..fd2ba83 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.md5 @@ -0,0 +1 @@ +84067794a6593c46c3e77c3f36e33564 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.png b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e174a1b27f97667bdc070538d4e5e503ed862b GIT binary patch literal 31724 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map new file mode 100644 index 0000000..810a8e6 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 new file mode 100644 index 0000000..4a33b2a --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 @@ -0,0 +1 @@ +5bb7c75f9dbda4b4b77bd2251a2f65b4 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.png b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..d03d1259fc9cfac44c81b1dc646bdd2b03e001ae GIT binary patch literal 10836 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%0A#wn@g|NnW*|9$#0?5y`3 Z5A!8;$G4PY8OB5rigGIGA{oQi{|mi|plJXA literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.dot b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.dot deleted file mode 100644 index 098ded1..0000000 --- a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "fp::Triangulation::update_bulk_node_geometry" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Update the geometric quantities associated with the given node."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Neighbors::plus_one",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_neighbors.html#a59501864ac7f34bd676aa97d9faf68cc",tooltip=" "]; -} diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.map b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.map new file mode 100644 index 0000000..8fd6371 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.md5 b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.md5 new file mode 100644 index 0000000..610fbd7 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.md5 @@ -0,0 +1 @@ +1759c407b3fb68745e7730277753bdd1 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.png b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5ee644a11f149c72e3d1d45320495f03999d36 GIT binary patch literal 21277 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmake_global_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1afce8afd92f1b88fb15ce7d9cb31edd",tooltip="Initiates the global geometry of the triangulation."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node4 -> Node5 [id="edge4_Node000004_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node4 -> Node6 [id="edge5_Node000004_Node000006",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map new file mode 100644 index 0000000..86ec509 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 new file mode 100644 index 0000000..5713780 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 @@ -0,0 +1 @@ +cae34b533f66aee166bba75f08033eee \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.png b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..cf2787e73308fd1c331cccdea0253afedc3a4d51 GIT binary patch literal 24467 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.dot b/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.dot deleted file mode 100644 index 1d2d2b3..0000000 --- a/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "fp::Triangulation::experimental_load_sphere_from_stl" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lexperimental_load_sphere\l_from_stl",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Special constructor that can initialize a triangulation with spherical topology from a binary stl stl..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::is_member",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$group___globals.html#ga42171e60ff447e5c0776969445616702",tooltip="Convenient wrapper around std::find, which only works for std::vectors."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lnodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#aeeb65b7f5974560fc57e20b50cf73b41",tooltip="Returns a constant reference to the underlying Nodes container."]; -} diff --git a/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.map b/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.map new file mode 100644 index 0000000..9366cde --- /dev/null +++ b/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.md5 b/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.md5 new file mode 100644 index 0000000..620ab60 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.md5 @@ -0,0 +1 @@ +4fac8c28d5ab13f446bdae5b137414f7 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.png b/docs/classfp_1_1_triangulation_a62af174bd11d3db03de25587638ffeb4_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..e88268d1a03ca1696b1c7cb946c73210594fa9c9 GIT binary patch literal 9318 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.dot b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.dot deleted file mode 100644 index a7ea64e..0000000 --- a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "fp::Triangulation::flip_bond" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Triangulation::\lflip_bond",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map new file mode 100644 index 0000000..d819efb --- /dev/null +++ b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 new file mode 100644 index 0000000..75a6e86 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 @@ -0,0 +1 @@ +7c09e4a711fd3bc8dd10be05931c901c \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.png b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..8213a21d8b122405deaad481799a42d6e5464117 GIT binary patch literal 10792 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 aOAMwk)u77@d22ZOiBP?xi7HVr3I1O Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#ad8102adbe7dab80cda3209844a939e30",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lget_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3c660cb2bec69afe055843975698cfd0",tooltip="Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lupdate_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1d7b2a1e57f742d1d401eeb09b057beb",tooltip="Updates the geometric quantities of the center node and its next neighbor nodes."]; -} diff --git a/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.map b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.map new file mode 100644 index 0000000..d55fa51 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 new file mode 100644 index 0000000..54d1679 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.md5 @@ -0,0 +1 @@ +f486a95dff1decb653997717669f2223 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.png b/docs/classfp_1_1_triangulation_a692685c96cd6a0cdba72b50adf3fb49b_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..e06e8cdf7dba61bb671a5ddf7f1a3e83c88f0afd GIT binary patch literal 8050 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∾wyHb@bzISmGGF%-F>?T8_2e1IuSw{dOmNW?k_-P2yyp z%{vPnJf0`)0MZ82^`7}!6`v+1vUd5-*)YjhKn zDBVNusN4I(xAD~skWI9+y?%K}ZC{PEjf&pO{~>YDx-ZYLxNN4B58`%FiGPpDq?3d^ z^p+jV$+a3P((C?2!WZ6q?0XaIrMC7@e{4$SqEXGYjquhI88b6_KPkHA(Z_(V2H* z!1`tu7sbHza0Ox2*4|FR!}Gw##)dlNr4f1Dz<{#X`Mw(P3PMgx!i|j${)?kIsZaqe zWcKKD*}$=SslPvwNQ2?Fyu57esAWN5G2R@?G~n?|cYY50r7Fa;M^;{n%!ZI+vdrV% zYt+DzjpH-|U5zG_B$xm;(Nkd7+B!Ns?g#nixA%K`6s)Iea~#SmtS8&S&jALD3N{#C zK*@s{JC06HSRspfd>ba)~tT^|2dKKcjG?WxLni8QeUcE|gySG+VRV6hr z$oCZwSrp3Wn_N|0ojSbQ*3rTCapd;>UUm6+Zj|wqYvi8KXpx7{!Iy2OIIboMuELvK zYo+LtKq^U9^9<8-~^?6}*Tb4*QRNSEpAcx!8G_CdZYNNb;J zi?HNm^0V`E9=AO@xc%DQEX7j87sA3`_R^VhpC>TI}AVQ!%b1>|zMoZp<`Opt? z#5|7!2N!pFsNmuC>(^l>$AQA5v)Ka}&_wRKySmOUFSmirkI=pW@Ben7=?_+(>pHs` zF+ESjY1s{_S_6imrX>lDQ-)u?B|{l2Cldi*YtC`-5tK-MW=rSs9&`=yn@4 zsV36=2U|D42%OC%CMLSLxUhJgxqxNz8!8a&Yr~7PW0Wc9v_96`;O$**Gu;K@iP+_` z8Vd)1^kTor`zvBe&U&(16e!vQRzv^JSa8<u(Y~Bv_O{EX-(pAV{#Pe1Mq7INgVP$I8Yj> zNN>obOjSEt*xTDjbK9kc3QvxX#(*Cf32b3&0?|$1g0vcs1Z77-L7`r0`v|O0nOOD! zXpEr%d;$W3Dc2>EMAyX!(9(9!&L%)895W&Mx^-^!xCabs7XKIujOCJG7=sSu2eS>< zOCl2i0q+t^fL2Gpfq{nd7sDeXSv`(y7YL=jJh`m&SMAI>EqjuEMprvpTZ=WFWyjhE z=)f7o^*&$K)A(xeesI?@KSR}iy0zpd90braFi^6v6l=EsE-7J!@ENg+B6M|00ePhG zbqZ9a!5hp?5XtHfiHLY#QQ=%*L@=Go20x}n&-j4%`I;4Ln{FV z5!qerRH0QKj*N_tCoU-|`3;^>S67!~VMeA*94DqmBnfHnpejUl9*!m4_KJynk;TRL z;7(yA^CsL4789|xWdWx6>Sy%RH*Rr2t6(6RsyHmih8MWSGkNJK<$rx&(4tYIZ>60i zuwG_830WRVk#Q-YcZ@w13#A&w2m}wx7*lQE8L^zmp!RVhV63mf>-=PUs|hP^5^H95 zR-ZHND@+|QD3Q7UInM@PR3NjFl1AbgI7;Pc9fFUt$wp#@>+J7;Psql6Bp<{2`aFC9&3iEf-~Oz`@LX68@ztKJX}Nu&JMXL3e2){VRI!WC^|SH)wbn;B_NFm4fwzH_96ZL_MKnm6PC5agx*F8cc}Vvz?CG zy*}yolDV<@#Em~^p)(t7))U-D4>ry}6_i)1S&hJ5*Wkyhr|QzorZFEi!4utlwx?Gc&wWu literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.dot b/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.dot deleted file mode 100644 index 2f48b63..0000000 --- a/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Triangulation::update_boundary_node_geometry" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Triangulation::\lupdate_boundary_node\l_geometry",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Updates the local geometry of a boundary node (for triangulation types that have a boundary)."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmake_global_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1afce8afd92f1b88fb15ce7d9cb31edd",tooltip="Initiates the global geometry of the triangulation."]; -} diff --git a/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.map b/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.map new file mode 100644 index 0000000..9385f00 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.md5 b/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.md5 new file mode 100644 index 0000000..bbde6df --- /dev/null +++ b/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.md5 @@ -0,0 +1 @@ +6e0e449c69207d7c19cfc3e7d17901d3 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.png b/docs/classfp_1_1_triangulation_a6ad51f097deab1674fce1800d2f2cf31_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..530a8a561fac2d3c30a5d2f3313cc87390958727 GIT binary patch literal 7382 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 Ac>n+a literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.dot b/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.dot deleted file mode 100644 index 10629fa..0000000 --- a/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Triangulation::partial_voronoi_area_and_face_normal_of_node_in_a_triangle" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lpartial_voronoi_area\l_and_face_normal_of_node\l_in_a_triangle",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This function is deprecated!"]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; -} diff --git a/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.map b/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.map new file mode 100644 index 0000000..d04f091 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.md5 b/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.md5 new file mode 100644 index 0000000..4e52097 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.md5 @@ -0,0 +1 @@ +12e8e9908124ffeaeb3b24a8bf49ae16 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.png b/docs/classfp_1_1_triangulation_a75e93af077cc8434bb76a1a4a39f3adf_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..729cf4d1e8f935a1a53a90b7ac5f8c057bac4f98 GIT binary patch literal 16245 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.dot b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.dot deleted file mode 100644 index 9556971..0000000 --- a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.dot +++ /dev/null @@ -1,15 +0,0 @@ -digraph "fp::Triangulation::update_diamond_geometry" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lmixed_area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1",tooltip="The node-associated area inside a triangle."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Neighbors::plus_one",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_neighbors.html#a59501864ac7f34bd676aa97d9faf68cc",tooltip=" "]; -} diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.map b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.map new file mode 100644 index 0000000..e5447aa --- /dev/null +++ b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.md5 b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.md5 new file mode 100644 index 0000000..0a60efd --- /dev/null +++ b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.md5 @@ -0,0 +1 @@ +d03d32cfbf4ca02c4e5dde78a9f4d0dd \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.png b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..d0cce0750a57f82dd5ccde03b846c20eff199e3b GIT binary patch literal 25438 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.map b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.map new file mode 100644 index 0000000..a2d6888 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 new file mode 100644 index 0000000..f478dd3 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 @@ -0,0 +1 @@ +7ec4bbe32aecb129a4be071e13910b07 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.png b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..75cfb7387cc3f6cfa1e4b5284bf254ec3cef1432 GIT binary patch literal 16993 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 ZPhD0?a8r&wd}jnoQC3B!K*~7q{{s`e<1PRI literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.map b/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.map new file mode 100644 index 0000000..c7c9513 --- /dev/null +++ b/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.md5 b/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.md5 new file mode 100644 index 0000000..1ed81ff --- /dev/null +++ b/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.md5 @@ -0,0 +1 @@ +baed0e580c2198554391ec7dfc35d0aa \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.png b/docs/classfp_1_1_triangulation_a847fc218cc1807b7027b069a4239c7db_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e6d166404acf2c8cf6b1b3e619babc95e673a2 GIT binary patch literal 4921 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 Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#ad8102adbe7dab80cda3209844a939e30",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lget_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3c660cb2bec69afe055843975698cfd0",tooltip="Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lupdate_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1d7b2a1e57f742d1d401eeb09b057beb",tooltip="Updates the geometric quantities of the center node and its next neighbor nodes."]; -} diff --git a/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.map b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.map new file mode 100644 index 0000000..437a1c6 --- /dev/null +++ b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 new file mode 100644 index 0000000..9b67727 --- /dev/null +++ b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.md5 @@ -0,0 +1 @@ +a216e7bed5220cc85f9331725a7fb5d6 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.png b/docs/classfp_1_1_triangulation_aaef436fe4758c409b21a135b329edc17_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab375832115820c2a4d6958048986a143339833 GIT binary patch literal 7025 zcmZ{JWmJ?=8!alLw1R@PQj*dwp@2Aa>(Dhc5(7vhQYs}iG)Ond&@q70E!|xb0}?~W zJ$&Dfdw+a)v1aC7i<$GD^TdAk-tSjcWjR7TN<1tqEJDaz8FehI+qmGG?>-KAr=d=w z1Rppi3UV@7*EfGZP`S}qSX9gqnOB-_$>&Xo=E`tX1J} z^o#1XG2vDyP3Iw}KK_s)$95(qs&Z!83K$3BkfT)@ZpK4S^49FH>T0hzVUdL#NWGoY z%U8*C$4M{OFhCo#S!Y9N~sU zoz=Eb{6a^($*iq#TyEc;K?jQ~rb(bm4NC3NA0)9|{5g7p1?}g&CTD#nq!kr=Nq3H3 zIjkFRUhNp`y^YH9iDE?OiB)4`a8U+n_d{K(>5hJkZ>>Y3_}gcF?r(-Z_fwfc2Z(?1 z{Mk$sU)MCg$*4J8ZlMw<#+YYlW^S&os=Dw&hDsmHE9FQ?Gq|B=Ym~0|Em@_!suJ zN}JZsFk8$KR{WIhp*+;_2AZ0!>uJ9Id1{&e{yE5N6|IdG>u%51$92&8Qmd$_6b`_1 z2X0T-xb4yJ?d>`5&ZU%@qSOAAeV7$RB9V%;2mk&V^(6}6obT`NpG?nRwHIg={@dS2 zPM3(!)HwQ&8+e92X4hU=UN*(J?;Jv(I%%yGY&mpC2M|k~d@3s9`0VdbQy0$B^B3cB z=pin7eZgmCWz}6}P+F>GkUJb18ym>cLo`_#j70KAMMdT1<^6o`+7-ogad9y4$R5 z>NS~sp( z^;$*ZG(aKl1)W!Ao2yOM4y zUi|ME^wN@vvnUPLty{M$y%4a3t?|<3-Cg^k#>9c!s-hyMxmk*cT3B`KJ;*8uJ72B3S9^>HoRs_O`7~g{AR-?m7LSw%~*AO2MV@1*0)o zWMyq_e=(SDA2V(UU;KU7#MBg`sAx8rA={fG7FSavyh?uj&d|H9&Sfj+Agp@yk9B2l zvPiUaFj1Mq;_Gl4vG!yUcueZb_0_SYfj34A{2uz#=oW}R7Fe0r^T@XGbd73lAZ?(* z{op;yLm)dl8!P#xd(>TgGH#20>ai02p7Y(Nfvd~&Q?P{u5qQr2UE-g{EjUrp(Ke^% z{YOYx4+{s!O3KH%#XsrNE32y%CthcVR%9ISo4aG#6ZkBM#9X(fO2>5%CnJUNIQWd3 zvHDZQZ%X3@|Kn?)7AFRpFaJRkwK4jv^zh5I-XO=RZh82L}WhK;4U><_xS4S%68(X z-;W|GD5D@U-!Gq=>ul(a*y7QJcU5QdqP`G(|QeE7plJF7+ zxi4K!5}7`p_mvzk(O({vqgw^5FaHk2$C2acaM~oR#{34tK4EB2Z|8zev52uqPk}@`ac8`d9VJKUHTEZ(H#1UyR zK)cF119H#8!eRt)$#%9b79_XLK&iW@M@d3i(Bi!HD=CP5x##hRRQENCLl4x_K`i^b zCt|J~x>dG|;23%}4t^-lW ziK$}PGCuCkW##4;o)Pqa&1`l>a6n(T1QA+|7Ch!N?=_ll^u{8f5gl1jD+b#rdSCWA zT{@VOAZKU`<8?SF_j0e56m+Q5S}z5-_sK?XTFie6HjGjr1MJ{%Ydj*&=j>}h05)j- z_5fVce;5pGs=~^7bEJ#ex2VkS8+y8$l$yF1bl5FRaL?tA2n$fu1rq-7C6>I`D+Qfe z77I~}7zqgp{tq+nCqGP8FQ*!x^&ptG;w}bRg+n-Q7z&^}B*B z#|!?%iIsNNSS2^n-CL3cAtyYlw3|k#NM34=TKFA2sAY2+h1O(6tLo@jbKn05dbP6g zONx@KtDxu6_F{INfjW+Axr+7X06%~JF)|tja8Npx?u^qBLHArx5RoYt!KRWNYM&<{mNhCu z^5{{k@AbK%zf(d&!i>wfzP$42_CIrT^C{T$qrN1eQUUI5P`x+*DUiTV4(`;7EbRZy zR7zzA)uz0hs?8|D7WSR!CRK=kl%hIj>pjYc8>;70nPp@}l zICo>VzPjzKjx8MHXXUxNHsJeW{1n>)WiZelMs-UVzD59|W&HO~y40xB$#R6Gb~mN{ zw1T!anNpIV7H!kcRAtD)`haflR%hp1u!FWn@AL1lgcPxlP5^JPz%hb@gYTtzsWW|# z|Ngx>TOrQ23cazBPq0+b1%`#N_ZdIHi@ODH5H~PtZoxL%s^#cR?mNj<9q+2>YTF${ z^F{A*?Iwrb5CjmECBSc1KiICYVh zgY;xv28ud5l%NUMhgBp65~xQj?54FTSol8f=z$rvF;mNznwsk7;lT@Ng2c(fott3? z7Tg%h4pFMA)ZrBOJTluFD+XvZvCtrBH^mLw{pxhUcfXsx^rzdNNuBe?YtXEmW8+$m zMZ}tdW@cqU$*hLmdm6_*{_Q^Wx;`a;u_*bFrj+e0=U(#no;HeL}1(EX_SVh05#4>+9>w%gdP)Bi5DtRzs~T zUix`D?=!Qq0zQ4h0{jVtxZ!jyi2%@_1i07M7$+M$J7GI?!n!^y3mc5?Xw%2?^75Ts zUC&rpzJM)?sC&olCuusH=;IgoKl{s21P7qW-+YwhkX4C z`8!#@{>0NPfSC4WC#WXCarEk(zkld9%O0+#2P7mWf~6tf zzJc!nFjLpo4gwL3jEuY?MsjrCkMeZNN-{EjFU(dJ-{e1xN=UHQBTu_rrH3F zlPj?28_rdcL##euURsjK*Jyd8ILS32YfeZK+vz6%-M{tRiHWX5PGMuMAEZ3dwp6pC zbM!2>uo}M!B0FB!RPU_6P^Z{y9ZEGZv_uZ3;{~SF7dDgyasKY@*{#C7F95hVm+@m5F;*z$A4 zp9Ol!B2MBs%3XRGh6YNwId1rVrZ6gcVRcojwDBJpT{qPS#yhY9fCb7H-3+_re&3QvzPP%*D$->1_OPJ%g2k<^zcvR|YEalGEh$zuEIY=Q(cRuQU zV6!nGm#0_fyR+yw-dVS$qPk+t5W}B{_SDqfykZWC<@;2oU6}=#Vp5=ElQSFp{X3y3 z4N+Wy?C&<}YHG&+0-<_(wyws6C<7G;1X6s7{ z>deJkM<UMPV@SSD$g3P`jL1f>w;Q-{|B!5$QwQ zoDpyHcQ7U2dV3WcP$(#nT+g08!^Xk6nPmn(r?5mpJNam4CAX{7_1OJ2MjHkO2EuMF zZSA2t7aI~%QojNwt9n0_*tAJG1qVp3pcJ!RecuH~NdVcT`tNqAnxjGmyCS^z?4aVL}8W0;8Me3LIN^ zJ@EXF1s;q}g^=y34IMa2XG^~wvOBf|=0ZDQI$fQe3$q{RVIUXD65fg6K>KavhBuNG zxFDKLHXUJ9awaAjLu!f;NP1r0m&KM~c3-&&S|tMm+UF{%X46%6t!-`4!@gvKl0+^L z3X_YIz1~#uBtQ~Vy^o+Uh_0O1DT=)>=nVg&q_K6FGgGOxhojR!C=zXf85P!Xh^PwuhaMN`uX{V(n-#3D*s@m z&=W8OgbWv`FkoK*5)lCO0c-7M9#@l`pd3UO)Mq>x3M)(sjByRVYSB8bT1h}*!a-R8 z&*l`!1$V$5MI4u~0|Ns=RXwDj_zGC3mU^$Xrh>Ys=XmPUqT-~Lr>UjVWzp%y^sw@1 z83j;?qAAK7Sxn5#ydH;^(LCk%;`%=1A>dW-e%H!|ki9(U<@374jDui<0s7!gI5pJf zQ4JphW?Y()k)bn$0wSrhTS$Yq#=7xhUGjP{ zJ(!kPSX+Ng%@F%2ow;(mKoBrf{9nI*-N@sZm`4aMLuG4gHsBJ1GxLBmG>fvD3n)U= z-z^hNZdh-Jr3+xn*ADDe#I)itM@K;D^Dr_qlRSL*t3UKk!=R~5FCQ4-!~SXx5e=6#8gDJjJj zp32JMldsgQ8==b~09t_8g3~cHJWL_%@S~;i{%!~k}f zSy{i{xkq&47~GuIvrNlXhtSjXH>2{8;W_|IZePAF0#3J!!2U)@z$cKiy`tL{vIiO#F;d3yi zYY&ZiUsX+X^n;mhHdBt+=MwV{I2FM51lHLb3i9-u_F#3OLonLhBc=^CD79Gp9f-3V z0e~6MV;DSIvm^LDx5+61!4#~gGHNP3+j6ec+4c1}{QJtui8q9dGsCzg2+&u9NHuMZ<*lhocHo*Z zaW$UM1Di1>Cg$ISX~gK+YN6{T&~FqcWVE#XAbBU_O;>FoI5qAE%!`YQ1Qfh7l|I&j z=KaZ5z6*+~8WN)1+~0ryehtKlG#D*|mi#Y|CQJdx!}ay`eJL&;YZwDWu8^)!*c($V zj=MXVIc9c%5O?f2l`7PKtlG!ajkbfPh%7oegdq3_6WLNUPEj|K5M0(IAx=b^`v@|rUDCaV)=}J zV{3`E!+>`n1K<&q3-%AgCZCwNI8qv#;$&0S(k))Hqtsk70Gw2b#fE@HjQUIuDd(h; zSn^X|fzCTP+bY!+pKH-c&YAte97s^5AS^wa84vacWYeqn@8hkZpf`HDyK6i!Y`{?z zWYwC|xaX-B9q|I#od9lunK<&Ty0&hTL;*hYLVfUP>5HbbzHzCUoueZUsCCc~>h4Ty z@`g@ucr921h~=DDccgI%-<_DSSBGd;peE=a+lAfCi#!Mmm8k-B`C#+)x5>o!6P~Hr zPee0)!YhWs?k8&DxxAkSwe?E=?>@ymZDN~kBdtnO)l^97sIrd?qUFYpES?@68_rK3n z6zTuRm5J+ui4v}fA6CJL_?DPXF~YPXymp$6W2pb<*;F3Y6|t~?_r#NZ(s=L;4GSWxEK~B@ H==1*pV?GP1 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.dot b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.dot deleted file mode 100644 index b97a188..0000000 --- a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "fp::Triangulation::move_node" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lget_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a3c660cb2bec69afe055843975698cfd0",tooltip="Aggregates and Returns the geometric quantities of the center node and its next neighbor nodes."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lupdate_two_ring_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1d7b2a1e57f742d1d401eeb09b057beb",tooltip="Updates the geometric quantities of the center node and its next neighbor nodes."]; -} diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map new file mode 100644 index 0000000..9705e38 --- /dev/null +++ b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 new file mode 100644 index 0000000..8e3ce5b --- /dev/null +++ b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.md5 @@ -0,0 +1 @@ +b209711f81eab7533da1c6b60f6e8acb \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.png b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f66b9275eda492d09b7ca66d87aaec757d30e1 GIT binary patch literal 5753 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.dot b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.dot deleted file mode 100644 index 11e0d4b..0000000 --- a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.dot +++ /dev/null @@ -1,15 +0,0 @@ -digraph "fp::Triangulation::move_node" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Triangulation::\lmove_node",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Move an individual node of the triangulation and update all the geometric quantities of the triangula..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::MonteCarloUpdater\l::move_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#ac3e40c3b93bf2bf6f2b08291357503be",tooltip="Attempt a move Monte Carlo Step."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lscale_node_coordinates",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a692685c96cd6a0cdba72b50adf3fb49b",tooltip="Method for stretching or squeezing the initial triangulation shape."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\ltranslate_all_nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#aaef436fe4758c409b21a135b329edc17",tooltip="Adds the same 3D vector to the positions of each node of the triangulation."]; -} diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.map b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.map new file mode 100644 index 0000000..6dd9e11 --- /dev/null +++ b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.md5 b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.md5 new file mode 100644 index 0000000..e6d6123 --- /dev/null +++ b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.md5 @@ -0,0 +1 @@ +d9494a63ff065a6045923c78e965dbd2 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.png b/docs/classfp_1_1_triangulation_ad8102adbe7dab80cda3209844a939e30_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2e35bf76c858b386c1e7073e2f502735084592 GIT binary patch literal 13794 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lexperimental_load_sphere\l_from_stl",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a62af174bd11d3db03de25587638ffeb4",tooltip="Special constructor that can initialize a triangulation with spherical topology from a binary stl stl..."]; -} diff --git a/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.map b/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.map new file mode 100644 index 0000000..630bc4f --- /dev/null +++ b/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.md5 b/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.md5 new file mode 100644 index 0000000..700c804 --- /dev/null +++ b/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.md5 @@ -0,0 +1 @@ +e3854053a6e1cd1bed4c20c258a5fa9a \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.png b/docs/classfp_1_1_triangulation_aeeb65b7f5974560fc57e20b50cf73b41_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..2e29db93118edf3e6e86a8f8b41ae95c852ec691 GIT binary patch literal 6755 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1implementation_1_1stl_serializer-members.html b/docs/classfp_1_1implementation_1_1stl_serializer-members.html index 2db5e54..1b549d0 100644 --- a/docs/classfp_1_1implementation_1_1stl_serializer-members.html +++ b/docs/classfp_1_1implementation_1_1stl_serializer-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -111,7 +118,7 @@ diff --git a/docs/classfp_1_1implementation_1_1stl_serializer.html b/docs/classfp_1_1implementation_1_1stl_serializer.html index 8c482ad..c4ae100 100644 --- a/docs/classfp_1_1implementation_1_1stl_serializer.html +++ b/docs/classfp_1_1implementation_1_1stl_serializer.html @@ -3,16 +3,18 @@ - + flippy: fp::implementation::stlSerializer< Real, Index > Class Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,7 +116,7 @@

Static Public Member Functions

-static std::vector< stlTriangle< Real, Index > > read_STLSolid_into_triangle_vec (std::filesystem::path const &input_file) +static std::vector< stlTriangle< Real, Index > > read_STLSolid_into_triangle_vec (std::filesystem::path const &input_file)  
The documentation for this class was generated from the following file:
    @@ -121,7 +128,7 @@ diff --git a/docs/classfp_1_1implementation_1_1stl_triangle-members.html b/docs/classfp_1_1implementation_1_1stl_triangle-members.html index aa653bd..9cc6cd7 100644 --- a/docs/classfp_1_1implementation_1_1stl_triangle-members.html +++ b/docs/classfp_1_1implementation_1_1stl_triangle-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -120,7 +127,7 @@ diff --git a/docs/classfp_1_1implementation_1_1stl_triangle.html b/docs/classfp_1_1implementation_1_1stl_triangle.html index 2a21f79..006b33c 100644 --- a/docs/classfp_1_1implementation_1_1stl_triangle.html +++ b/docs/classfp_1_1implementation_1_1stl_triangle.html @@ -3,16 +3,18 @@ - + flippy: fp::implementation::stlTriangle< Real, Index > Class Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -110,30 +117,35 @@ Collaboration diagram for fp::implementation::stlTriangle< Real, Index >:
Collaboration graph
+ + + + +
[legend]
+  +  +  +vec3< float > const &  +rawSTLTriangle  +std::pair< Index, Index >  +stlNode< Real, Index > & 

Public Member Functions

stlTriangle (stlNode< Real, Index > &n1_inp, stlNode< Real, Index > &n2_inp, stlNode< Real, Index > &n3_inp, vec3< float > const &normal_inp)
stlTriangle (stlNode< Real, Index > &n1_inp, stlNode< Real, Index > &n2_inp, stlNode< Real, Index > &n3_inp, vec3< float > const &normal_inp)
 
stlTriangle (stlNode< Real, Index > &n1_inp, stlNode< Real, Index > &n2_inp, stlNode< Real, Index > &n3_inp)
stlTriangle (stlNode< Real, Index > &n1_inp, stlNode< Real, Index > &n2_inp, stlNode< Real, Index > &n3_inp)
 
stlTriangle (rawSTLTriangle const &stl_triangle)
stlTriangle (rawSTLTriangle const &stl_triangle)
 
-vec3< float > constnormal () const
normal () const
 
-rawSTLTriangle to_stl_triangle () const
to_stl_triangle () const
 
-std::pair< Index, Index > other_node_ids (Index loc_node_id)
other_node_ids (Index loc_node_id)
 
-stlNode< Real, Index > & operator[] (Index idx)
operator[] (Index idx)
 

@@ -157,7 +169,7 @@ diff --git a/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.dot b/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.dot deleted file mode 100644 index 215244f..0000000 --- a/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::implementation::stlTriangle< Real, Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::implementation\l::stlTriangle\< Real,\l Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" n1_\nn2_\nn3_",fontcolor="grey" ]; - Node2 [id="Node000002",label="stlNode\< Real, Index \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.map b/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.map new file mode 100644 index 0000000..f4fc363 --- /dev/null +++ b/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.md5 b/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.md5 new file mode 100644 index 0000000..977250d --- /dev/null +++ b/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.md5 @@ -0,0 +1 @@ +375a886decfadca672db58e8c5b24bdf \ No newline at end of file diff --git a/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.png b/docs/classfp_1_1implementation_1_1stl_triangle__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4b108ae23a22f10b5d6dfd2e7d49acb1e4f6d995 GIT binary patch literal 7736 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 F{6DFB - + flippy: Member List + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -112,17 +119,17 @@ norm() constfp::vec3< Real >inline norm_square() constfp::vec3< Real >inline normalize()fp::vec3< Real >inline - operator*fp::vec3< Real >friend - operator*fp::vec3< Real >friend - operator+fp::vec3< Real >friend - operator+=fp::vec3< Real >friend - operator-fp::vec3< Real >friend - operator-fp::vec3< Real >friend - operator-fp::vec3< Real >friend - operator-=fp::vec3< Real >friend - operator/fp::vec3< Real >friend - operator/=fp::vec3< Real >friend - operator<<fp::vec3< Real >friend + operator*(Real const &lhs, vec3< Real > rhs)fp::vec3< Real >friend + operator*(vec3< Real > lhs, Real const &rhs)fp::vec3< Real >friend + operator+(vec3< Real > lhs, vec3< Real > const &rhs)fp::vec3< Real >friend + operator+=(vec3< Real > &lhs, vec3< Real > const &rhs)fp::vec3< Real >friend + operator-(vec3< Real > lhs, vec3< Real > const &rhs)fp::vec3< Real >friend + operator-(vec3< Real > v)fp::vec3< Real >friend + operator-(vec3< Real > &&v)fp::vec3< Real >friend + operator-=(vec3< Real > &lhs, vec3< Real > const &rhs)fp::vec3< Real >friend + operator/(vec3< Real > lhs, Real const &rhs)fp::vec3< Real >friend + operator/=(vec3< Real > &lhs, Real const &rhs)fp::vec3< Real >friend + operator<<(std::ostream &os, const vec3< Real > &obj)fp::vec3< Real >friend operator==(vec3< Real > const &other) const =defaultfp::vec3< Real > operator[](Index idx)fp::vec3< Real >inline operator[](Index idx) constfp::vec3< Real >inline @@ -137,7 +144,7 @@ diff --git a/docs/classfp_1_1vec3.html b/docs/classfp_1_1vec3.html index 5d9d9bf..7f8b510 100644 --- a/docs/classfp_1_1vec3.html +++ b/docs/classfp_1_1vec3.html @@ -3,16 +3,18 @@ - + flippy: fp::vec3< Real > Class Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -110,61 +117,66 @@

Internal implementation of a 3D vector. - More...

+ More...

#include <vec3.hpp>

Collaboration diagram for fp::vec3< Real >:
Collaboration graph
+ + + + +
[legend]
- + - + - + - + - + - + - + - + - + - + - - + - - +

Public Member Functions

void add (vec3< Real > const &v)
void add (vec3< Real > const &v)
 In place addition method.
 
void subtract (vec3< Real > const &v)
void subtract (vec3< Real > const &v)
 In place subtraction method.
 
void scale (Real s)
void scale (Real s)
 Scale the vector by a real number s.
 
Real dot (vec3< Real > const &v) const
Real dot (vec3< Real > const &v) const
 Calculate dot product with another vector.
 
constexpr std::size_t size () const
constexpr std::size_t size () const
 Always returns 3.
 
vec3< Real > cross (vec3< Real > const &other) const
vec3< Real > cross (vec3< Real > const &other) const
 Calculate cross product with another vector.
 
Real norm () const
Real norm () const
 Returns the norm of the vector.
 
Real norm_square () const
Real norm_square () const
 Returns the square of the norm of the vector.
 
vec3< Real > constnormalize ()
vec3< Real > const & normalize ()
 Normalize the vector in place. And return a reference to the new normalized vector.
 
bool operator== (vec3< Real > const &other) const =default
bool operator== (vec3< Real > const &other) const =default
 default equality operator.
 
template<typename Index >
+
template<typename Index >
requires std::is_integral_v<Index>
Real & operator[] (Index idx)
Real & operator[] (Index idx)
 element access operator.
 
template<typename Index >
+
template<typename Index >
requires std::is_integral_v<Index>
const Real & operator[] (Index idx) const
const Real & operator[] (Index idx) const
 element access operator for constant environments.
 
- +

Static Public Member Functions

static vec3< Real > cross (vec3< Real > const &a, vec3< Real > const &b)
static vec3< Real > cross (vec3< Real > const &a, vec3< Real > const &b)
 Calculate cross product between two vectors.
 
@@ -186,37 +198,37 @@ +std::ostream &  - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - +

Friends

-std::ostream & operator<< (std::ostream &os, const vec3< Real > &obj)
operator<< (std::ostream &os, const vec3< Real > &obj)
 Streaming operator for easy printing of the vector.
 
vec3< Real > operator+ (vec3< Real > lhs, vec3< Real > const &rhs)
vec3< Real > operator+ (vec3< Real > lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec2::add.
 
void operator+= (vec3< Real > &lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec3::add.
void operator+= (vec3< Real > &lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec3::add.
 
vec3< Real > operator- (vec3< Real > lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec3::subtract.
vec3< Real > operator- (vec3< Real > lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec3::subtract.
 
void operator-= (vec3< Real > &lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec3::subtract.
void operator-= (vec3< Real > &lhs, vec3< Real > const &rhs)
 Overloaded operator defined in terms of vec3::subtract.
 
vec3< Real > operator* (Real const &lhs, vec3< Real > rhs)
 Overloaded operator defined in terms of vec3::scale.
vec3< Real > operator* (Real const &lhs, vec3< Real > rhs)
 Overloaded operator defined in terms of vec3::scale.
 
vec3< Real > operator* (vec3< Real > lhs, Real const &rhs)
 Overloaded operator defined in terms of vec3::scale.
vec3< Real > operator* (vec3< Real > lhs, Real const &rhs)
 Overloaded operator defined in terms of vec3::scale.
 
void operator/= (vec3< Real > &lhs, Real const &rhs)
 Overloaded operator defined in terms of vec3::scale.
void operator/= (vec3< Real > &lhs, Real const &rhs)
 Overloaded operator defined in terms of vec3::scale.
 
vec3< Real > operator/ (vec3< Real > lhs, Real const &rhs)
 Overloaded operator defined in terms of vec3::scale.
vec3< Real > operator/ (vec3< Real > lhs, Real const &rhs)
 Overloaded operator defined in terms of vec3::scale.
 
vec3< Real > operator- (vec3< Real > v)
vec3< Real > operator- (vec3< Real > v)
 Unary minus operator.
 
vec3< Real > operator- (vec3< Real > &&v)
vec3< Real > operator- (vec3< Real > &&v)
 Unary minus operator for rvalues.
 
@@ -226,16 +238,16 @@

!!! vec3 does not throw !!! This means that if you ask vec3 to divide a vector by 0 or more realistically if you normalize a zero length vector vec3 will not check for the division by zero and will return a nan result! Since vec3 is used everywhere in flippy, including in very expensive calculations, I decided to omit the security check for the sake of speed.

To keep the external dependencies low, flippy implements it's own 3D vector class with basic functionality like dot product and cross product

Example:

++
-
fp::vec3<double> v1{1,0,0};
-
fp::vec3<double> v2{0,0,1};
+
fp::vec3<double> v1{1,0,0};
+
fp::vec3<double> v2{0,0,1};
assert(v1.dot(v2)==0);
assert(v1.cross(v2).norm()==1);
-
assert(((v1-v2)==fp::vec3<double>{1.,0.,-1.}));
-
A helper struct; keeps track of bond flips.
Definition Triangulation.hpp:84
+
assert(((v1-v2)==fp::vec3<double>{1.,0.,-1.}));
+
Internal implementation of a 3D vector.
Definition vec3.hpp:43
Template Parameters
- +
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
@@ -252,10 +264,9 @@

- + - - +
void fp::vec3< Real >::add void fp::vec3< Real >::add (vec3< Real > constv)vec3< Real > const & v)
@@ -268,9 +279,10 @@

++
-
fp::vec3<double> v1{1,0,0};
-
fp::vec3<double> v2{0,0,1};
-
v1.add(v2); // v1 will contain {1, 0, 1}
+
fp::vec3<double> v1{1,0,0};
+
fp::vec3<double> v2{0,0,1};
+
v1.add(v2); // v1 will contain {1, 0, 1}
+
void add(vec3< Real > const &v)
In place addition method.
Definition vec3.hpp:60

Parameters
@@ -292,10 +304,9 @@

vadd this vector elementwise to the vector that is calling the add method.
- + - - +
void fp::vec3< Real >::subtract void fp::vec3< Real >::subtract (vec3< Real > constv)vec3< Real > const & v)
@@ -308,9 +319,10 @@

++
-
fp::vec3<double> v1{2,0,0};
-
fp::vec3<double> v2{1,0,1};
-
v1.subtract(v2); // v1 will contain {1, 0, -1}
+
fp::vec3<double> v1{2,0,0};
+
fp::vec3<double> v2{1,0,1};
+
v1.subtract(v2); // v1 will contain {1, 0, -1}
+
void subtract(vec3< Real > const &v)
In place subtraction method.
Definition vec3.hpp:77

Parameters
@@ -332,10 +344,9 @@

vsubtract this vector elementwise from the vector that is calling the subtract method.
- + - - +
void fp::vec3< Real >::scale void fp::vec3< Real >::scale (Real s)Real s)
@@ -370,8 +381,7 @@

Real fp::vec3< Real >::dot ( - vec3< Real > const &  - v) + vec3< Real > const & v) const @@ -383,10 +393,11 @@

Calculate dot product with another vector.

-

Example:

{c++}
-
fp::vec3<double> v1{1,0,0};
-
fp::vec3<double> v2{2,0,1};
-
double res = v1.dot(v2); // res will contain 2*1 + 0*0 + 0*1=2
+

Example:

{c++}
+
fp::vec3<double> v1{1,0,0};
+
fp::vec3<double> v2{2,0,1};
+
double res = v1.dot(v2); // res will contain 2*1 + 0*0 + 0*1=2
+
Real dot(vec3< Real > const &v) const
Calculate dot product with another vector.
Definition vec3.hpp:106
Parameters
@@ -398,6 +409,35 @@

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -414,15 +454,15 @@

vthe other vec3 vector
- + - +
constexpr std::size_t fp::vec3< Real >::size std::size_t fp::vec3< Real >::size ()) const
-inlineconstexpr +inlinenodiscardconstexpr
@@ -444,21 +484,14 @@

- + - - + - - - - - - - +
static vec3< Real > fp::vec3< Real >::cross static vec3< Real > fp::vec3< Real >::cross (vec3< Real > consta, vec3< Real > const & a,
vec3< Real > constb 
)vec3< Real > const & b )
@@ -469,11 +502,11 @@

Calculate cross product between two vectors.

-

A static method to calculate cross product between two vectors. Example:

{c++}
-
fp::vec3<double> v1{1,0,0};
-
fp::vec3<double> v2{0,1,0};
-
fp::vec3<double> v3 = cross(v1, v2); // v3 will contain {0,0,1}
-
static vec3< Real > cross(vec3< Real > const &a, vec3< Real > const &b)
Calculate cross product between two vectors.
Definition vec3.hpp:133
+

A static method to calculate cross product between two vectors. Example:

{c++}
+
fp::vec3<double> v1{1,0,0};
+
fp::vec3<double> v2{0,1,0};
+
fp::vec3<double> v3 = cross(v1, v2); // v3 will contain {0,0,1}
+
static vec3< Real > cross(vec3< Real > const &a, vec3< Real > const &b)
Calculate cross product between two vectors.
Definition vec3.hpp:133
Parameters
@@ -482,6 +515,28 @@

Returns
result of the cross product between the original vector and v.
+
+Here is the caller graph for this function:
+
+
+ + + + + + + + + + + + + + + + + +
@@ -499,8 +554,7 @@

vec3< Real > fp::vec3< Real >::cross

- - +
afirst vector of the cross product
(vec3< Real > constother)vec3< Real > const & other) const
@@ -512,10 +566,10 @@

Calculate cross product with another vector.

-

Example:

{c++}
-
fp::vec3<double> v1{1,0,0};
-
fp::vec3<double> v2{0,1,0};
-
fp::vec3<double> v3 = v1.cross(v2); // v3 will contain {0,0,1}
+

Example:

{c++}
+
fp::vec3<double> v1{1,0,0};
+
fp::vec3<double> v2{0,1,0};
+
fp::vec3<double> v3 = v1.cross(v2); // v3 will contain {0,0,1}
Parameters
@@ -527,11 +581,19 @@

+ + + +
Here is the caller graph for this function:
+ + + +
@@ -550,7 +612,7 @@

Real fp::vec3< Real >::norm

- +
otherthe other vec3 vector.
()) const
@@ -562,19 +624,44 @@

Returns the norm of the vector.

-

Example:

{c++}
- -
double res = v.norm(); // res will contain 1,4142135624... i.e. sqrt(2)
+

Example:

{c++}
+ +
double res = v.norm(); // res will contain 1,4142135624... i.e. sqrt(2)
+
Real norm() const
Returns the norm of the vector.
Definition vec3.hpp:164
Returns
The euclidian norm of the vector.
Here is the call graph for this function:
+ + + + +
Here is the caller graph for this function:
+ + + + + + + + + + + + + + + + + + +
@@ -593,7 +680,7 @@

Real fp::vec3< Real >::norm_square ( - ) + ) const @@ -605,14 +692,20 @@

Returns the square of the norm of the vector.

-

Example:

{c++}
- -
double res = v.norm_square(); // res will contain 2
+

Example:

{c++}
+ +
double res = v.norm_square(); // res will contain 2
+
Real norm_square() const
Returns the square of the norm of the vector.
Definition vec3.hpp:175
Returns
Square of the euclidian norm of the vector.
Here is the call graph for this function:
+ + + + +
@@ -629,9 +722,9 @@

- + - +
vec3< Real > const & fp::vec3< Real >::normalize vec3< Real > const & fp::vec3< Real >::normalize ())
@@ -649,6 +742,13 @@

+ + + + + + +

@@ -667,8 +767,7 @@

bool fp::vec3< Real >::operator== ( - vec3< Real > const &  - other) + vec3< Real > const & other) const @@ -698,7 +797,7 @@

template<floating_point_number Real>

-template<typename Index >
+template<typename Index >
requires std::is_integral_v<Index>
@@ -707,8 +806,7 @@

Real & fp::vec3< Real >::operator[]

- - +
(Index idx)Index idx)
@@ -745,17 +843,16 @@

template<floating_point_number Real>
-template<typename Index >
+template<typename Index >
requires std::is_integral_v<Index>
@@ -845,21 +935,14 @@

- + - - +
const Real & fp::vec3< Real >::operator[] const Real & fp::vec3< Real >::operator[] (Index idx)Index idx) const
@@ -797,21 +894,14 @@

- + - - + - - - - - - - +
vec3< Real > operator+ vec3< Real > operator+ (vec3< Real > lhs, vec3< Real > lhs,
vec3< Real > constrhs 
)vec3< Real > const & rhs )

- + - - + - - - - - - - +
void operator+= void operator+= (vec3< Real > & lhs, vec3< Real > & lhs,
vec3< Real > constrhs 
)vec3< Real > const & rhs )
@@ -869,7 +952,7 @@

-

Overloaded operator defined in terms of vec3::add.

+

Overloaded operator defined in terms of vec3::add.

Equivalent to lhs.add(rhs).

Parameters
@@ -892,21 +975,14 @@

lhsleft hand side of the += operator
- + - - + - - - - - - - +
vec3< Real > operator- vec3< Real > operator- (vec3< Real > lhs, vec3< Real > lhs,
vec3< Real > constrhs 
)vec3< Real > const & rhs )
@@ -916,7 +992,7 @@

-

Overloaded operator defined in terms of vec3::subtract.

+

Overloaded operator defined in terms of vec3::subtract.

Parameters
@@ -940,21 +1016,14 @@

lhsleft hand side of the - operator
- + - - + - - - - - - - +
void operator-= void operator-= (vec3< Real > & lhs, vec3< Real > & lhs,
vec3< Real > constrhs 
)vec3< Real > const & rhs )
@@ -964,7 +1033,7 @@

-

Overloaded operator defined in terms of vec3::subtract.

+

Overloaded operator defined in terms of vec3::subtract.

Equivalent to lhs.subtract(rhs).

Parameters
@@ -987,21 +1056,14 @@

lhsleft hand side of the -= operator
- + - - + - - - - - - - +
vec3< Real > operator* vec3< Real > operator* (Real constlhs, Real const & lhs,
vec3< Real > rhs 
)vec3< Real > rhs )
@@ -1011,7 +1073,7 @@

-

Overloaded operator defined in terms of vec3::scale.

+

Overloaded operator defined in terms of vec3::scale.

Left multiplication by a scalar s*v.

Parameters
@@ -1035,21 +1097,14 @@

lhsleft hand side of the * operator
- + - - + - - - - - - - +
vec3< Real > operator* vec3< Real > operator* (vec3< Real > lhs, vec3< Real > lhs,
Real constrhs 
)Real const & rhs )
@@ -1059,7 +1114,7 @@

-

Overloaded operator defined in terms of vec3::scale.

+

Overloaded operator defined in terms of vec3::scale.

Right multiplication by a scalar v*s.

Parameters
@@ -1083,21 +1138,14 @@

lhsleft hand side of the * operator
- + - - + - - - - - - - +
void operator/= void operator/= (vec3< Real > & lhs, vec3< Real > & lhs,
Real constrhs 
)Real const & rhs )
@@ -1107,7 +1155,7 @@

-

Overloaded operator defined in terms of vec3::scale.

+

Overloaded operator defined in terms of vec3::scale.

In place division by a scalar v/s, equivalent to lhs.scale(1/rhs).

Parameters
@@ -1131,21 +1179,14 @@

lhsleft hand side of the /= operator
- + - - + - - - - - - - +
vec3< Real > operator/ vec3< Real > operator/ (vec3< Real > lhs, vec3< Real > lhs,
Real constrhs 
)Real const & rhs )
@@ -1155,7 +1196,7 @@

-

Overloaded operator defined in terms of vec3::scale.

+

Overloaded operator defined in terms of vec3::scale.

Division by a scalar v/s.

Parameters
@@ -1180,10 +1221,9 @@

lhsleft hand side of the / operator
- + - - +
vec3< Real > operator- vec3< Real > operator- (vec3< Real > v)vec3< Real > v)
@@ -1217,10 +1257,9 @@

- + - - +
vec3< Real > operator- vec3< Real > operator- (vec3< Real > && v)vec3< Real > && v)
@@ -1251,7 +1290,7 @@

    - +
diff --git a/docs/classfp_1_1vec3__coll__graph.dot b/docs/classfp_1_1vec3__coll__graph.dot deleted file mode 100644 index f002960..0000000 --- a/docs/classfp_1_1vec3__coll__graph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::vec3< Real >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::vec3\< Real \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Internal implementation of a 3D vector."]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" x\ny\nz",fontcolor="grey" ]; - Node2 [id="Node000002",label="Real",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/classfp_1_1vec3__coll__graph.map b/docs/classfp_1_1vec3__coll__graph.map new file mode 100644 index 0000000..b44e155 --- /dev/null +++ b/docs/classfp_1_1vec3__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1vec3__coll__graph.md5 b/docs/classfp_1_1vec3__coll__graph.md5 new file mode 100644 index 0000000..3ab0100 --- /dev/null +++ b/docs/classfp_1_1vec3__coll__graph.md5 @@ -0,0 +1 @@ +902a58fd7428dbd1747163f5e9d8599c \ No newline at end of file diff --git a/docs/classfp_1_1vec3__coll__graph.png b/docs/classfp_1_1vec3__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a3e8f9e523143c182eccfd2c352db8b0a4e9bf GIT binary patch literal 4222 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.dot b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.dot deleted file mode 100644 index 57ea79d..0000000 --- a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::vec3::cross" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::vec3::cross",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Calculate cross product with another vector."]; - Node1 -> Node1 [id="edge1_Node000001_Node000001",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.map b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.map new file mode 100644 index 0000000..da3557f --- /dev/null +++ b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.md5 b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.md5 new file mode 100644 index 0000000..54ed7a4 --- /dev/null +++ b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.md5 @@ -0,0 +1 @@ +d68abc63d04c32a1c1e2bde2b0d6400d \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.png b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec73ecbfd83e1c272a4a1f977ad539ad4c55bc0 GIT binary patch literal 2928 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 afd2z6|FN|xMJQDO0000 Node1 [id="edge1_Node000001_Node000001",dir="back",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.map b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.map new file mode 100644 index 0000000..e56edf2 --- /dev/null +++ b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.md5 b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.md5 new file mode 100644 index 0000000..698ca45 --- /dev/null +++ b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.md5 @@ -0,0 +1 @@ +8a6b1763b5176887fa93578a576b4631 \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.png b/docs/classfp_1_1vec3_a2522af9d50779abf605b8be03e146a5f_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..0574ec5f824b561f9ed3eb55b415a465464800ad GIT binary patch literal 2931 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.dot b/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.dot deleted file mode 100644 index 672f126..0000000 --- a/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.dot +++ /dev/null @@ -1,15 +0,0 @@ -digraph "fp::vec3::dot" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::vec3::dot",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Calculate dot product with another vector."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::vec3::norm",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a8568d337f067bd43b63508174f047df2",tooltip="Returns the norm of the vector."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::vec3::normalize",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a3484a50de6cbbadfa7b04d4352410a10",tooltip="Normalize the vector in place. And return a reference to the new normalized vector."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::vec3::norm_square",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a8f4f85470de85d92876fe2c93ea0f425",tooltip="Returns the square of the norm of the vector."]; -} diff --git a/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.map b/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.map new file mode 100644 index 0000000..a405ada --- /dev/null +++ b/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.map @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.md5 b/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.md5 new file mode 100644 index 0000000..7cf0bc5 --- /dev/null +++ b/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.md5 @@ -0,0 +1 @@ +6c9d340be4133e1f691ad0560bad9279 \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.png b/docs/classfp_1_1vec3_a3097ff5c62f8bb0da1c5e87fb9384da9_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..202698a4359545a64db7f3b3ade9b73deb1ecdec GIT binary patch literal 51538 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⁣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 Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::vec3::norm",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a8568d337f067bd43b63508174f047df2",tooltip="Returns the norm of the vector."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::vec3::dot",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a3097ff5c62f8bb0da1c5e87fb9384da9",tooltip="Calculate dot product with another vector."]; -} diff --git a/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.map b/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.map new file mode 100644 index 0000000..62ec2af --- /dev/null +++ b/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.md5 b/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.md5 new file mode 100644 index 0000000..8ced824 --- /dev/null +++ b/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.md5 @@ -0,0 +1 @@ +8225155e5f626203d4f73546d74cb453 \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.png b/docs/classfp_1_1vec3_a3484a50de6cbbadfa7b04d4352410a10_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..8686f05c1f456231a8852ce45c3d1c19a4571743 GIT binary patch literal 5007 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.dot b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.dot deleted file mode 100644 index 2456946..0000000 --- a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::vec3::norm" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::vec3::norm",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Returns the norm of the vector."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::vec3::dot",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a3097ff5c62f8bb0da1c5e87fb9384da9",tooltip="Calculate dot product with another vector."]; -} diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.map b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.map new file mode 100644 index 0000000..806c02a --- /dev/null +++ b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.md5 b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.md5 new file mode 100644 index 0000000..280dbc9 --- /dev/null +++ b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.md5 @@ -0,0 +1 @@ +86623068f1886419e1aa5cef118937ef \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.png b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9eb93c4d03f3cea75a3dee10f86d44d6c90eb9 GIT binary patch literal 3864 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::vec3::normalize",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a3484a50de6cbbadfa7b04d4352410a10",tooltip="Normalize the vector in place. And return a reference to the new normalized vector."]; -} diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.map b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.map new file mode 100644 index 0000000..258b285 --- /dev/null +++ b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.map @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.md5 b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.md5 new file mode 100644 index 0000000..4a0b59f --- /dev/null +++ b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.md5 @@ -0,0 +1 @@ +d78891f870e99d148881c60fae0b0f7d \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.png b/docs/classfp_1_1vec3_a8568d337f067bd43b63508174f047df2_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0f6dbb24b15bf3c5f79fc65c786c245411fd0a GIT binary patch literal 37245 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 R;}pJjZP(MxRX-T;e*n>g-_`&C literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.dot b/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.dot deleted file mode 100644 index 60d600c..0000000 --- a/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::vec3::norm_square" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::vec3::norm_square",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Returns the square of the norm of the vector."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::vec3::dot",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1vec3.html#a3097ff5c62f8bb0da1c5e87fb9384da9",tooltip="Calculate dot product with another vector."]; -} diff --git a/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.map b/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.map new file mode 100644 index 0000000..d98b91d --- /dev/null +++ b/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.md5 b/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.md5 new file mode 100644 index 0000000..8266fb3 --- /dev/null +++ b/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.md5 @@ -0,0 +1 @@ +4f12db332bcc50d8a4c4d2babce4e094 \ No newline at end of file diff --git a/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.png b/docs/classfp_1_1vec3_a8f4f85470de85d92876fe2c93ea0f425_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..d916a33036ff4480d2acdcbb58eb0903529a0a39 GIT binary patch literal 4594 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 literal 0 HcmV?d00001 diff --git a/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.map b/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.map new file mode 100644 index 0000000..4e69a2a --- /dev/null +++ b/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.md5 b/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.md5 new file mode 100644 index 0000000..334fedb --- /dev/null +++ b/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.md5 @@ -0,0 +1 @@ +d46d6f4c817a89fe978126808cab04f2 \ No newline at end of file diff --git a/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.png b/docs/classfp_1_1vec3_ae64d6fa0ceec87d5a26cac17560f1d7c_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..5fefe6326a72d9f06220a555584f8400d5a77d29 GIT binary patch literal 32670 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 TE-~3i;n#KzJ@uPg?0o+R-D4` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/conceptfp_1_1floating__point__number.html b/docs/conceptfp_1_1floating__point__number.html index 086606f..033f7cc 100644 --- a/docs/conceptfp_1_1floating__point__number.html +++ b/docs/conceptfp_1_1floating__point__number.html @@ -3,16 +3,18 @@ - + flippy: fp::floating_point_number Concept Reference + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -104,7 +111,7 @@

Here we implement the concepts of a floating point number. -More...

+More...

#include <custom_concepts.hpp>

Concept definition

@@ -125,7 +132,7 @@

Concept definition

diff --git a/docs/conceptfp_1_1indexing__number.html b/docs/conceptfp_1_1indexing__number.html index bde3015..8495068 100644 --- a/docs/conceptfp_1_1indexing__number.html +++ b/docs/conceptfp_1_1indexing__number.html @@ -3,16 +3,18 @@ - + flippy: fp::indexing_number Concept Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -104,7 +111,7 @@

Here we implement the concepts of a positive integer number that is used throughout the code for indexing. -More...

+More...

#include <custom_concepts.hpp>

Concept definition

@@ -125,7 +132,7 @@

Concept definition

diff --git a/docs/concepts.html b/docs/concepts.html index fd4a0c1..81a6a40 100644 --- a/docs/concepts.html +++ b/docs/concepts.html @@ -3,16 +3,18 @@ - + flippy: Concepts + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -103,8 +110,8 @@
Here is a list of all documented concepts with brief descriptions:
-
[detail level 12]
- +
[detail level 12]
 Nfp
+
 Nfp
 Rfloating_point_numberHere we implement the concepts of a floating point number
 Rindexing_numberHere we implement the concepts of a positive integer number that is used throughout the code for indexing
@@ -114,7 +121,7 @@ diff --git a/docs/cookie.js b/docs/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/custom__concepts_8hpp.html b/docs/custom__concepts_8hpp.html index 8b8c7f8..54b5912 100644 --- a/docs/custom__concepts_8hpp.html +++ b/docs/custom__concepts_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/custom_concepts.hpp File Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -113,18 +120,53 @@ Include dependency graph for custom_concepts.hpp:
+ + + + +
This graph shows which files directly or indirectly include this file:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Go to the source code of this file.

- +

Namespaces

namespace  fp
namespace  fp
 

@@ -144,7 +186,7 @@ diff --git a/docs/custom__concepts_8hpp__dep__incl.dot b/docs/custom__concepts_8hpp__dep__incl.dot deleted file mode 100644 index 42f6f7c..0000000 --- a/docs/custom__concepts_8hpp__dep__incl.dot +++ /dev/null @@ -1,31 +0,0 @@ -digraph "flippy/custom_concepts.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/custom_concepts.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="flippy/MonteCarloUpdater.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_monte_carlo_updater_8hpp.html",tooltip="This file contains the MonteCarloUpdater class template. Together with Triangulation...."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="flippy/Triangulator.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulator_8hpp.html",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node4 -> Node2 [id="edge4_Node000004_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 -> Node5 [id="edge5_Node000004_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="flippy/flippy.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$flippy_8hpp.html",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; - Node1 -> Node5 [id="edge6_Node000001_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node6 [id="edge7_Node000001_Node000006",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="flippy/vec3.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$vec3_8hpp.html",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node6 -> Node7 [id="edge8_Node000006_Node000007",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="flippy/Nodes.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_nodes_8hpp.html",tooltip="This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o..."]; - Node7 -> Node2 [id="edge9_Node000007_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node7 -> Node4 [id="edge10_Node000007_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node7 -> Node5 [id="edge11_Node000007_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 -> Node4 [id="edge12_Node000006_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 -> Node3 [id="edge13_Node000006_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 -> Node5 [id="edge14_Node000006_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 -> Node8 [id="edge15_Node000006_Node000008",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="flippy/stlSerializer.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$stl_serializer_8hpp_source.html",tooltip=" "]; - Node8 -> Node4 [id="edge16_Node000008_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/custom__concepts_8hpp__dep__incl.map b/docs/custom__concepts_8hpp__dep__incl.map new file mode 100644 index 0000000..ee2195b --- /dev/null +++ b/docs/custom__concepts_8hpp__dep__incl.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/custom__concepts_8hpp__dep__incl.md5 b/docs/custom__concepts_8hpp__dep__incl.md5 new file mode 100644 index 0000000..08f6013 --- /dev/null +++ b/docs/custom__concepts_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +a4fd2826d3519f1923a5b6e95a4b43bd \ No newline at end of file diff --git a/docs/custom__concepts_8hpp__dep__incl.png b/docs/custom__concepts_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..033ff8554a1130eba7e04a467e950a3bd5341375 GIT binary patch literal 58697 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 literal 0 HcmV?d00001 diff --git a/docs/custom__concepts_8hpp__incl.dot b/docs/custom__concepts_8hpp__incl.dot deleted file mode 100644 index 71c9546..0000000 --- a/docs/custom__concepts_8hpp__incl.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "flippy/custom_concepts.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/custom_concepts.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; -} diff --git a/docs/custom__concepts_8hpp__incl.map b/docs/custom__concepts_8hpp__incl.map new file mode 100644 index 0000000..672ccf6 --- /dev/null +++ b/docs/custom__concepts_8hpp__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/custom__concepts_8hpp__incl.md5 b/docs/custom__concepts_8hpp__incl.md5 new file mode 100644 index 0000000..4f66671 --- /dev/null +++ b/docs/custom__concepts_8hpp__incl.md5 @@ -0,0 +1 @@ +212003c4ca5ff20197d01facfe7f53c6 \ No newline at end of file diff --git a/docs/custom__concepts_8hpp__incl.png b/docs/custom__concepts_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..c7110ca2624354196f3416f3e9ccbca2ba66c962 GIT binary patch literal 4357 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 Qz6L}~O;5E%`9=7D0F48b00000 literal 0 HcmV?d00001 diff --git a/docs/custom__concepts_8hpp_source.html b/docs/custom__concepts_8hpp_source.html index d8bca5b..c3aeb37 100644 --- a/docs/custom__concepts_8hpp_source.html +++ b/docs/custom__concepts_8hpp_source.html @@ -3,16 +3,18 @@ - + flippy: flippy/custom_concepts.hpp Source File + - + + @@ -43,28 +45,28 @@

- + + -
@@ -129,7 +131,7 @@ diff --git a/docs/dir_000001_000003.html b/docs/dir_000001_000003.html index dd8412a..efad9c3 100644 --- a/docs/dir_000001_000003.html +++ b/docs/dir_000001_000003.html @@ -3,16 +3,18 @@ - + flippy: flippy -> utilities Relation + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -105,7 +112,7 @@

flippy → utilities Relation

    - +
diff --git a/docs/dir_34e9a5f624ac092a9ae2401c28d616d7.html b/docs/dir_34e9a5f624ac092a9ae2401c28d616d7.html index 2534e0f..b699a66 100644 --- a/docs/dir_34e9a5f624ac092a9ae2401c28d616d7.html +++ b/docs/dir_34e9a5f624ac092a9ae2401c28d616d7.html @@ -3,16 +3,18 @@ - +flippy: assets Directory Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -108,7 +115,7 @@ diff --git a/docs/dir_4f4e61201b043a278e63eb62d89bbefb.html b/docs/dir_4f4e61201b043a278e63eb62d89bbefb.html index a205754..7208a56 100644 --- a/docs/dir_4f4e61201b043a278e63eb62d89bbefb.html +++ b/docs/dir_4f4e61201b043a278e63eb62d89bbefb.html @@ -3,16 +3,18 @@ - + flippy: assets/markdown_files Directory Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -106,6 +113,10 @@ Directory dependency graph for markdown_files:
assets/markdown_files
+ + + +
@@ -113,7 +124,7 @@ diff --git a/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.dot b/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.dot deleted file mode 100644 index 5f4cc59..0000000 --- a/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph "assets/markdown_files" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - compound=true - subgraph clusterdir_34e9a5f624ac092a9ae2401c28d616d7 { - graph [ bgcolor="#edf0f7", pencolor="grey25", label="assets", fontname=Helvetica,fontsize=10 style="filled,dashed", URL="dir_34e9a5f624ac092a9ae2401c28d616d7.html",tooltip=""] - dir_4f4e61201b043a278e63eb62d89bbefb [label="markdown_files", fillcolor="#edf0f7", color="grey25", style="filled,bold", URL="dir_4f4e61201b043a278e63eb62d89bbefb.html",tooltip=""]; - } -} diff --git a/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.map b/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.map new file mode 100644 index 0000000..b1685de --- /dev/null +++ b/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.md5 b/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.md5 new file mode 100644 index 0000000..df761a1 --- /dev/null +++ b/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.md5 @@ -0,0 +1 @@ +fb1e8012c9d44f45c346bcb6417b4ec7 \ No newline at end of file diff --git a/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.png b/docs/dir_4f4e61201b043a278e63eb62d89bbefb_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..18a6b23e4aa446f158a50b882178945b8a8bdc45 GIT binary patch literal 3028 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 literal 0 HcmV?d00001 diff --git a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.html b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.html index 07bba42..dc69738 100644 --- a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.html +++ b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.html @@ -3,16 +3,18 @@ - + flippy: flippy Directory Reference + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -106,6 +113,12 @@ Directory dependency graph for flippy:
flippy
+ + + + + +
+ + @@ -145,7 +160,7 @@ diff --git a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.js b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.js index 2e45db6..ee14f97 100644 --- a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.js +++ b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.js @@ -3,6 +3,7 @@ var dir_6b186b4a3fa96a5ae1faf2feaa17366f = [ "utilities", "dir_8d6e340cbd427aa421517bf60c41f005.html", "dir_8d6e340cbd427aa421517bf60c41f005" ], [ "custom_concepts.hpp", "custom__concepts_8hpp.html", null ], [ "flippy.hpp", "flippy_8hpp.html", null ], + [ "GradientDescentUpdater.h", "_gradient_descent_updater_8h_source.html", null ], [ "MonteCarloUpdater.hpp", "_monte_carlo_updater_8hpp.html", "_monte_carlo_updater_8hpp" ], [ "Nodes.hpp", "_nodes_8hpp.html", "_nodes_8hpp" ], [ "stlSerializer.hpp", "stl_serializer_8hpp_source.html", null ], diff --git a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.dot b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.dot deleted file mode 100644 index e8271fa..0000000 --- a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.dot +++ /dev/null @@ -1,14 +0,0 @@ -digraph "flippy" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - compound=true - subgraph clusterdir_6b186b4a3fa96a5ae1faf2feaa17366f { - graph [ bgcolor="#edf0f7", pencolor="grey25", label="", fontname=Helvetica,fontsize=10 style="filled,bold", URL="dir_6b186b4a3fa96a5ae1faf2feaa17366f.html",tooltip=""] - dir_6b186b4a3fa96a5ae1faf2feaa17366f [shape=plaintext, label="flippy"]; - dir_8d6e340cbd427aa421517bf60c41f005 [label="utilities", fillcolor="#a2b4d6", color="grey25", style="filled", URL="dir_8d6e340cbd427aa421517bf60c41f005.html",tooltip=""]; - } - dir_6b186b4a3fa96a5ae1faf2feaa17366f->dir_8d6e340cbd427aa421517bf60c41f005 [headlabel="2", labeldistance=1.5 headhref="dir_000001_000003.html" href="dir_000001_000003.html" color="steelblue1" fontcolor="steelblue1"]; -} diff --git a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.map b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.map new file mode 100644 index 0000000..daa2fd0 --- /dev/null +++ b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.md5 b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.md5 new file mode 100644 index 0000000..babb7a1 --- /dev/null +++ b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.md5 @@ -0,0 +1 @@ +e2d957d9faa1e6d25a2bf7c71752fc31 \ No newline at end of file diff --git a/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.png b/docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c835ef785519116c78f9710ea2a18cc5e20c83 GIT binary patch literal 2690 zcmaKuX*3ji8^Gt5ENN7hjBQeuY>mVWBTHFgVvt>7FqRt=xt45EOa`HmH~U`35ZM}I zUqeM?Hx06e8H4Q0;C0V?KivDC^S3ySm!yG?+xg^TzeledM#oBNPA9MTW ztU2!`eRdEpANMOmZr28~JRVyn?tDG9TW$TQ{?4*uFRW>79#YAIJ*UNf>2GQK!Lp_B z4S!6%BS=gQ4(ih%_^_6jm&aHh1pYxbYrA&)_q3{>@x8pjG(rg*q1tR@cB-8H;^bCV zP*rrQjkpAADw=R&qGCS#p^p%l11i0Hx?k~jU|!)<^3rY<`BGPDxVZT#1o8AM6F%`= z8GS7aJhn)b!{Qcq(LWlWO10EYDzf#!joI~Mm?|%M*Uh3PfXUsvEqSNTqAMw?0ocZt zQmrS`zjTG+wzrQy>THGng4e)>0ACl&7)}D#3bV;o6 zbVY}9ap6ureRz@AyXcU21f@Aa_jxGW#6co~?aET{_;W#9OYN~XmC{n9V;IWLFP=xL zc9{Jf_NT{Fl5{n?tRz<);X0`yp&b_!BMF05O>Iv!%n*x-zgNjA$;Eb~ToaPh;|3O; z2RdvCh7Ch>^frrxc1a1zft2OG^JL`8jhbSV)(aOi!o-)K$Ur8Uh%YNMa*h>dj6VyG zdX-D7?V)?vpUT;ow5qRk5gR!Sv3=pPDDZ|I2%ITz=S)$XyI?4J6cWVr8N9kM2G1yY zzM`Nc5#1+NI#u+p)UjtQ@M==3p`>S)+Ur*b`_&Aq$Nsat-#?12>~AKCWQPo|u6Ns1 zroug701l3WLZZ8^X+(HXkyF`2Q^bPssmj%xP@?j910o4$QnAC9sF3v+VC?2Q}krXV?^La1o0X z#C-LTjt;(MJc6Nv1Bs|Bkx%&&xkM_u!c(&_SKzlhbK4A1*ot*F#hK|$5p^~4?ylAV zOpk8p%XM8p9)6(vxdsFs>Bk&U;2_2eR*6@yBg};bKsgk17@X)h2?sZS? zLwhY<70MfxQc})Ed|2i#LRHp?7RaR>SV(rX-w@~;i~=sGle(Q+Y2kChTIraTamr+) z?7{Z_&g(OqZ;>-vKL{xLAh8U({9N0~&UwRk??B|OkF)?Svclm`QID|#N8h}seAEbT07+;A zp>1=0knXQ69xqkoI*SoMm z(Sb#SB+jcXmyTy(JC-;vVXbVJ0~iC<%0hw&@1_i zA3t`>m2S+DOk`z@R=t1WHVg!pOCUm-D%c0jg3N# zYYST&t_ZNd0JY$gL;WF7o#^_xv#nPXOoLjNY$Cs_1P2@VaV3X-Zmmh}ZbF~&@f2uj z8flDj%xHAWSpRtkoT3n~=W0AjejGp7oLtwityA6NrVTwaQ$LeAuy}LCPVHbGljr1A zb5zb3TMOaTRwkBKX8h=|p{Bn>lZMw@&3vk5W`ZmmZMqd@|B#xfO~?!1WIig+2p?-& z?~W0+JgiLdP9?7or@1hWSUx=Kjie##$o$j3Dj>}Vf{~8r&I`0fDe#P1Fu|;>FuHWi z>4^?gpI1U&X`fr&MtnE$>2p>q-yXxM^J4p*O|qTtC2oD{NH4Jt6buh;*jr0y%bLkt z8VU6HYC65gHA$e(C%~p_{RLiJ*})Lg{P$jC?7Y+->>iGeF#4^`edW$4^vR*jM!$I> zEhJ#~)h%9kA_V`{VXSA|Y-)#?O7bfXTtq~^jZ<3@@3PuiTBA1T3AbOgv$1-bIamrPa2@Mt9s*{YcOd+Yjg4t`Sv2WAlxBT=&`1;USOYyOO)}drXne zzE+X;P(kf&#!L5|r7S^V?k_-_0h@z@b|#&aFMdY28$Xx;oU?k#JoV1rI%;6i;pW;m z1NU_&zuN66w_&D4ebqF_@WDg)ki`}Ki#HO4DhTN7sh`4vq3g>aWH#2B=Kd~KjiHe} zZjjsl^1R(xiUL~FBdv;SvIWPVkfl&W>EsXl5a-gX*%gbktSZXhQ{{vtCw?MA_~kf( z^jHeU(;}Gv9lA1Wn!0A1SLa*cK?Vb&Q#-H@#m znXxPXB - + flippy: flippy/utilities Directory Reference + - + + @@ -43,19 +45,24 @@

@@ -121,6 +134,8 @@

 flippy.hpp
 This header file exists for convenience. Including this header will automatically include all parts of flippy in the project.
 
 GradientDescentUpdater.h
 
 MonteCarloUpdater.hpp
 This file contains the MonteCarloUpdater class template. Together with Triangulation.hpp, this file contains flippy's most important high-level interfaces.
 
- + + @@ -73,7 +80,7 @@
@@ -106,6 +113,10 @@ Directory dependency graph for utilities:
flippy/utilities
+ + + +

@@ -120,7 +131,7 @@ diff --git a/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.dot b/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.dot deleted file mode 100644 index 9e01874..0000000 --- a/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph "flippy/utilities" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - compound=true - subgraph clusterdir_6b186b4a3fa96a5ae1faf2feaa17366f { - graph [ bgcolor="#edf0f7", pencolor="grey25", label="flippy", fontname=Helvetica,fontsize=10 style="filled,dashed", URL="dir_6b186b4a3fa96a5ae1faf2feaa17366f.html",tooltip=""] - dir_8d6e340cbd427aa421517bf60c41f005 [label="utilities", fillcolor="#edf0f7", color="grey25", style="filled,bold", URL="dir_8d6e340cbd427aa421517bf60c41f005.html",tooltip=""]; - } -} diff --git a/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.map b/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.map new file mode 100644 index 0000000..78c0d45 --- /dev/null +++ b/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.md5 b/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.md5 new file mode 100644 index 0000000..94ebbbc --- /dev/null +++ b/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.md5 @@ -0,0 +1 @@ +ecd4a1cc2a541449ea868653eac8ab1c \ No newline at end of file diff --git a/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.png b/docs/dir_8d6e340cbd427aa421517bf60c41f005_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..950435c6f0693855dc0b3f84b2724de090bfa9bc GIT binary patch literal 2110 zcmV-E2*LM>P)7c=P30OOV2$!+O-t$%}w)curL!Zw5$+ zx%-3Dj1+T0l3XsA-{&v5zx&+#Tz))H5}td10E7@i2qAQuHw)og= z&m_w{+*p4Z*w{5vl}e>LA~HIOEvaNU>`SVPBfCQEr_;3{FL!r@J;$J=@=R^b6`VeO za;rVZpri^AB~^e%RZ{C}Yw%j;RumTGqpGSB`}geu0O)i&WM^fhK34Z?mxcsm0QJ^^n05BR2xOm|_7{)xpJ>&4r3i!ZH3Xy{C< z?Ng^JP;&ANB$Dw~+l@veIy*b=dn~rtXg6v`YQo|;G&MG0ecD=ll)Kw1cK!M_`2O4z zdi`B|cdi;?b3(B_Ckr!z{o(JUKXnw$TFtZf;1`Q>$pkAK>kU1a5m^;E%))R2%FIHoBXR_sh^ zg)_T0B>mP?GlqK%!HrZxNfjhYssK?^1<0;9N?NT}HQ0TxgnKkn1&ET$GmcnKwd)Rj z0MNB{)AZ|bbca6q2}-H}QBnnnk}5!UCH2SkRKhPbQU!>!rMJq8a;{FrTLFPVkjdn% z`{;BnP#-=N0btl4X*f&j`|s}L>Qub-YGyVfqvo^jL+h#JzBs@0As{da&m<&recBOI zS9=9Th54MGlk=p?Wb#3$AmQOQsWklx5Ur;Q5RFs;5=2t_*L>*cXh(KdCVG0hS!+S? zwNAvCem*sF-W+^WUIxIr=7V0Z$KJdTVK5j6)Pk_phEK-y^Qo<^cVILc0obnj@YC%> zY17``4zqb+qRnPAZr!};j7xDi-X^uKwg!qR9#+%i%9Q2UmzRr}=y2S=bqmj}QsMK@ z{$W+~p}+py2WxZb;sr#_n~UH8Up(roz|I|Sf?@jJ1HSvtPRyPeh$q5kA|%icRaKST z{UC;cw@GCfX29#6(P+dyvl(UIe2YnwC*#x4)L6Odd8?Wa{q^6@)<&z-jV@L;mMKiGOJOwp88|u6i2&$tqFR) z9?=nV5gs-R;bF7z#pj105{cmJ=a1Yy`=QDI5+Ol;m>>B#zB+x%DgAI1-ahpv67}8a zXg1%oY`fOf=#+EGCryIKBah(H<$B9`TW;TmzDtjrKm34s5s_H_tO_kHEjV~!KQgv% z#Dax!1Kwou1#hQcZ*L!n#bRjkj{*P+G{SSpeQF`v+S;H# zau^K5ptn6+!osO{CAqWl*Mf%1q zSQz(9jCXTGaDWdM#71GwORJHy{Vk`BQb*MLxXID@P8 zb?7k|5E?qeGDY(huagS&6|=I%-Q9LY@QHBxvx{gUCM zqzVwNrwR~_Q~{!-^30fCPZcUhtfzARk*2bu9F-Nn;`+2>3XN0&;%uajy?cEJlFKJ? zavrMrz)K@o^MRgEA0KLKuAr#!n9X=V zU@#Jv*nWbX+V{2B=~`^=GgJ<{*(N3?CPE|<*(^T6Fid4xS=nEx{m|NLwOW;}eF-6i o5JCtcgb+dqA%qY@2qB#KA3dMEwT5-iApigX07*qoM6N<$g7SwA&;S4c literal 0 HcmV?d00001 diff --git a/docs/doxygen.css b/docs/doxygen.css index eeadba5..e2ac1b7 100644 --- a/docs/doxygen.css +++ b/docs/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.9.8*/ +/* The standard CSS for doxygen 1.11.0*/ html { /* page base colors */ @@ -145,6 +145,7 @@ html { --fragment-lineno-link-bg-color: #D8D8D8; --fragment-lineno-link-hover-fg-color: #4665A2; --fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; --tooltip-foreground-color: black; --tooltip-background-color: white; --tooltip-border-color: gray; @@ -168,6 +169,28 @@ html { --font-family-icon: Arial,Helvetica; --font-family-tooltip: Roboto,sans-serif; +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; } @media (prefers-color-scheme: dark) { @@ -309,7 +332,7 @@ html { --code-link-color: #79C0FF; --code-external-link-color: #79C0FF; --fragment-foreground-color: #C9D1D9; ---fragment-background-color: black; +--fragment-background-color: #090D16; --fragment-border-color: #30363D; --fragment-lineno-border-color: #30363D; --fragment-lineno-background-color: black; @@ -318,6 +341,7 @@ html { --fragment-lineno-link-bg-color: #303030; --fragment-lineno-link-hover-fg-color: #8E96A1; --fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; --tooltip-foreground-color: #C9D1D9; --tooltip-background-color: #202020; --tooltip-border-color: #C9D1D9; @@ -341,6 +365,28 @@ html { --font-family-icon: Arial,Helvetica; --font-family-tooltip: Roboto,sans-serif; +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; }} body { background-color: var(--page-background-color); @@ -357,8 +403,6 @@ body, table, div, p, dl { /* @group Heading Levels */ .title { - font-weight: 400; - font-size: 14px; font-family: var(--font-family-normal); line-height: 28px; font-size: 150%; @@ -556,7 +600,13 @@ a { } a:hover { - text-decoration: underline; + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); } a.el { @@ -607,7 +657,24 @@ dl.el { margin-left: -1cm; } +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + ul { + text-indent: 0px; overflow: visible; } @@ -632,30 +699,63 @@ ul.multicol { .fragment { text-align: left; direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-x: auto; overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); } pre.fragment { - border: 1px solid var(--fragment-border-color); - background-color: var(--fragment-background-color); - color: var(--fragment-foreground-color); - padding: 4px 6px; - margin: 4px 8px 4px 2px; + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: var(--font-family-monospace); - font-size: 105%; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; } -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - color: var(--fragment-foreground-color); - background-color: var(--fragment-background-color); - border: 1px solid var(--fragment-border-color); +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); } div.line { @@ -778,10 +878,6 @@ img.light-mode-visible { display: none; } -img.formulaDsp { - -} - img.formulaInl, img.inline { vertical-align: middle; } @@ -1081,17 +1177,25 @@ dl.reflist dd { .paramtype { white-space: nowrap; + padding: 0px; + padding-bottom: 1px; } .paramname { - color: var(--memdef-param-name-color); white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; } + .paramname em { + color: var(--memdef-param-name-color); font-style: normal; + margin-right: 1px; } -.paramname code { - line-height: 14px; + +.paramname .paramdefval { + font-family: var(--font-family-monospace); } .params, .retval, .exception, .tparams { @@ -1425,7 +1529,6 @@ table.fieldtable { { height:32px; display:block; - text-decoration: none; outline: none; color: var(--nav-text-normal-color); font-family: var(--font-family-nav); @@ -1514,7 +1617,8 @@ dl { padding: 0 0 0 0; } -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +/* + dl.section { margin-left: 0px; padding-left: 0px; @@ -1527,7 +1631,7 @@ dl.note { border-color: #D0C000; } -dl.warning, dl.attention { +dl.warning, dl.attention, dl.important { margin-left: -7px; padding-left: 3px; border-left: 4px solid; @@ -1569,8 +1673,103 @@ dl.bug { border-color: #C08050; } +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + dl.section dd { - margin-bottom: 6px; + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); } @@ -1585,12 +1784,12 @@ dl.section dd { vertical-align: bottom; border-collapse: separate; } - + #projectlogo img -{ +{ border: 0px none; } - + #projectalign { vertical-align: middle; diff --git a/docs/doxygen_crawl.html b/docs/doxygen_crawl.html new file mode 100644 index 0000000..e8e9618 --- /dev/null +++ b/docs/doxygen_crawl.html @@ -0,0 +1,362 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/dynsections.js b/docs/dynsections.js index b73c828..b05f4c8 100644 --- a/docs/dynsections.js +++ b/docs/dynsections.js @@ -22,171 +22,177 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); - $('table.directory tr'). - removeClass('odd').filter(':visible:odd').addClass('odd'); +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); } -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l'); - // add vertical lines to other rows - $('span[class=lineno]').not(':eq(0)').append(''); - // add toggle controls to lines with fold divs - $('div[class=foldopen]').each(function() { - // extract specific id to use - var id = $(this).attr('id').replace('foldopen',''); - // extract start and end foldable fragment attributes - var start = $(this).attr('data-start'); - var end = $(this).attr('data-end'); - // replace normal fold span with controls for the first line of a foldable fragment - $(this).find('span[class=fold]:first').replaceWith(''); - // append div for folded (closed) representation - $(this).after(''); - // extract the first line from the "open" section to represent closed content - var line = $(this).children().first().clone(); - // remove any glow that might still be active on the original line - $(line).removeClass('glow'); - if (start) { - // if line already ends with a start marker (e.g. trailing {), remove it - $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + this.updateStripes(); + }, + + toggleFolder : function(id) { + // the clicked row + const currentRow = $('#row_'+id); + + // all rows after the clicked row + const rows = currentRow.nextAll("tr"); + + const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub + + // only match elements AFTER this one (can't hide elements before) + const childRows = rows.filter(function() { return this.id.match(re); }); + + // first row is visible we are HIDING + if (childRows.filter(':first').is(':visible')===true) { + // replace down arrow by right arrow for current row + const currentRowSpans = currentRow.find("span"); + currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); + currentRowSpans.filter(".arrow").html('►'); + rows.filter("[id^=row_"+id+"]").hide(); // hide all children + } else { // we are SHOWING + // replace right arrow by down arrow for current row + const currentRowSpans = currentRow.find("span"); + currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen"); + currentRowSpans.filter(".arrow").html('▼'); + // replace down arrows by right arrows for child rows + const childRowsSpans = childRows.find("span"); + childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); + childRowsSpans.filter(".arrow").html('►'); + childRows.show(); //show all children } - // replace minus with plus symbol - $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); - // append ellipsis - $(line).append(' '+start+''+end); - // insert constructed line into closed div - $('#foldclosed'+id).html(line); - }); -} - + this.updateStripes(); + }, + + toggleInherit : function(id) { + const rows = $('tr.inherit.'+id); + const img = $('tr.inherit_header.'+id+' img'); + const src = $(img).attr('src'); + if (rows.filter(':first').is(':visible')===true) { + rows.css('display','none'); + $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + rows.css('display','table-row'); // using show() causes jump in firefox + $(img).attr('src',src.substring(0,src.length-10)+'open.png'); + } + }, +}; + +let codefold = { + opened : true, + + // in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes + plusImg: [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ], + minusImg: [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ], + + // toggle all folding blocks + toggle_all : function(relPath) { + if (this.opened) { + $('#fold_all').css('background-image',this.plusImg[relPath]); + $('div[id^=foldopen]').hide(); + $('div[id^=foldclosed]').show(); + } else { + $('#fold_all').css('background-image',this.minusImg[relPath]); + $('div[id^=foldopen]').show(); + $('div[id^=foldclosed]').hide(); + } + this.opened=!this.opened; + }, + + // toggle single folding block + toggle : function(id) { + $('#foldopen'+id).toggle(); + $('#foldclosed'+id).toggle(); + }, + + init : function(relPath) { + $('span[class=lineno]').css({ + 'padding-right':'4px', + 'margin-right':'2px', + 'display':'inline-block', + 'width':'54px', + 'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%' + }); + // add global toggle to first line + $('span[class=lineno]:first').append(''); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; /* @license-end */ diff --git a/docs/files.html b/docs/files.html index 7fea4b6..fc93b14 100644 --- a/docs/files.html +++ b/docs/files.html @@ -3,16 +3,18 @@ - + flippy: File List + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -103,18 +110,19 @@
Here is a list of all documented files with brief descriptions:
-
[detail level 123]
- - +
[detail level 123]
  flippy
  utilities
+ + - - - - - - + + + + + + +
  flippy
  utilities
 utils.hppThis file contains helper functions that are used throughout flippy, but are not specific to any given class
 custom_concepts.hppThis file contains the concepts that are costomly defined for the flippy class templates
 flippy.hppThis header file exists for convenience. Including this header will automatically include all parts of flippy in the project
 MonteCarloUpdater.hppThis file contains the MonteCarloUpdater class template. Together with Triangulation.hpp, this file contains flippy's most important high-level interfaces
 Nodes.hppThis file contains the fp::Node and fp::Nodes classes, data structures that represent a single node of the triangulation and the collection of all nodes of the triangulation, respectively
 stlSerializer.hpp
 Triangulation.hppThis file contains the fp::Triangulation class and several related helper classes. This is the core of flippy
 Triangulator.hppThis file contains internal implementation details and is not part of the stable public api. The classes and methods implemented here are responsible for creating the intitial triangulations
 vec3.hppHeader file containing the definition and implementation a 3 dimensional vector class, with useful mathematical operations like cross and dot products as member methods
 GradientDescentUpdater.h
 MonteCarloUpdater.hppThis file contains the MonteCarloUpdater class template. Together with Triangulation.hpp, this file contains flippy's most important high-level interfaces
 Nodes.hppThis file contains the fp::Node and fp::Nodes classes, data structures that represent a single node of the triangulation and the collection of all nodes of the triangulation, respectively
 stlSerializer.hpp
 Triangulation.hppThis file contains the fp::Triangulation class and several related helper classes. This is the core of flippy
 Triangulator.hppThis file contains internal implementation details and is not part of the stable public api. The classes and methods implemented here are responsible for creating the intitial triangulations
 vec3.hppHeader file containing the definition and implementation a 3 dimensional vector class, with useful mathematical operations like cross and dot products as member methods
@@ -122,7 +130,7 @@ diff --git a/docs/flippy_8hpp.html b/docs/flippy_8hpp.html index 70de73a..a55f7b8 100644 --- a/docs/flippy_8hpp.html +++ b/docs/flippy_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/flippy.hpp File Reference + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -111,10 +118,81 @@ #include "utilities/utils.hpp"
#include "Nodes.hpp"
#include "Triangulation.hpp"
+#include "MonteCarloUpdater.hpp"
Include dependency graph for flippy.hpp:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Go to the source code of this file.

@@ -126,7 +204,7 @@ diff --git a/docs/flippy_8hpp__incl.dot b/docs/flippy_8hpp__incl.dot deleted file mode 100644 index ba8f338..0000000 --- a/docs/flippy_8hpp__incl.dot +++ /dev/null @@ -1,66 +0,0 @@ -digraph "flippy/flippy.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/flippy.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="external/json.hpp",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="custom_concepts.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$custom__concepts_8hpp.html",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node3 -> Node4 [id="edge3_Node000003_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="vec3.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$vec3_8hpp.html",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="ostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node7 [id="edge6_Node000005_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node8 [id="edge7_Node000005_Node000008",color="steelblue1",style="solid",tooltip=" "]; - Node8 [id="Node000008",label="cmath",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node5 -> Node3 [id="edge8_Node000005_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node9 [id="edge9_Node000001_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node9 [id="Node000009",label="utilities/utils.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$utils_8hpp.html",tooltip="This file contains helper functions that are used throughout flippy, but are not specific to any give..."]; - Node9 -> Node7 [id="edge10_Node000009_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node9 -> Node10 [id="edge11_Node000009_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node10 [id="Node000010",label="fstream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node9 -> Node11 [id="edge12_Node000009_Node000011",color="steelblue1",style="solid",tooltip=" "]; - Node11 [id="Node000011",label="utility",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node9 -> Node12 [id="edge13_Node000009_Node000012",color="steelblue1",style="solid",tooltip=" "]; - Node12 [id="Node000012",label="filesystem",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node9 -> Node13 [id="edge14_Node000009_Node000013",color="steelblue1",style="solid",tooltip=" "]; - Node13 [id="Node000013",label="type_traits",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node14 [id="edge15_Node000001_Node000014",color="steelblue1",style="solid",tooltip=" "]; - Node14 [id="Node000014",label="Nodes.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_nodes_8hpp.html",tooltip="This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o..."]; - Node14 -> Node15 [id="edge16_Node000014_Node000015",color="steelblue1",style="solid",tooltip=" "]; - Node15 [id="Node000015",label="vector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node14 -> Node16 [id="edge17_Node000014_Node000016",color="steelblue1",style="solid",tooltip=" "]; - Node16 [id="Node000016",label="unordered_set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node14 -> Node2 [id="edge18_Node000014_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node14 -> Node5 [id="edge19_Node000014_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node17 [id="edge20_Node000001_Node000017",color="steelblue1",style="solid",tooltip=" "]; - Node17 [id="Node000017",label="Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node17 -> Node18 [id="edge21_Node000017_Node000018",color="steelblue1",style="solid",tooltip=" "]; - Node18 [id="Node000018",label="optional",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node17 -> Node19 [id="edge22_Node000017_Node000019",color="steelblue1",style="solid",tooltip=" "]; - Node19 [id="Node000019",label="set",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node17 -> Node14 [id="edge23_Node000017_Node000014",color="steelblue1",style="solid",tooltip=" "]; - Node17 -> Node5 [id="edge24_Node000017_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node17 -> Node9 [id="edge25_Node000017_Node000009",color="steelblue1",style="solid",tooltip=" "]; - Node17 -> Node20 [id="edge26_Node000017_Node000020",color="steelblue1",style="solid",tooltip=" "]; - Node20 [id="Node000020",label="Triangulator.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulator_8hpp.html",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node20 -> Node21 [id="edge27_Node000020_Node000021",color="steelblue1",style="solid",tooltip=" "]; - Node21 [id="Node000021",label="array",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node20 -> Node15 [id="edge28_Node000020_Node000015",color="steelblue1",style="solid",tooltip=" "]; - Node20 -> Node16 [id="edge29_Node000020_Node000016",color="steelblue1",style="solid",tooltip=" "]; - Node20 -> Node22 [id="edge30_Node000020_Node000022",color="steelblue1",style="solid",tooltip=" "]; - Node22 [id="Node000022",label="unordered_map",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node20 -> Node3 [id="edge31_Node000020_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node20 -> Node5 [id="edge32_Node000020_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node17 -> Node23 [id="edge33_Node000017_Node000023",color="steelblue1",style="solid",tooltip=" "]; - Node23 [id="Node000023",label="stlSerializer.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$stl_serializer_8hpp_source.html",tooltip=" "]; - Node23 -> Node10 [id="edge34_Node000023_Node000010",color="steelblue1",style="solid",tooltip=" "]; - Node23 -> Node15 [id="edge35_Node000023_Node000015",color="steelblue1",style="solid",tooltip=" "]; - Node23 -> Node5 [id="edge36_Node000023_Node000005",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/flippy_8hpp__incl.map b/docs/flippy_8hpp__incl.map new file mode 100644 index 0000000..a2c8b07 --- /dev/null +++ b/docs/flippy_8hpp__incl.map @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/flippy_8hpp__incl.md5 b/docs/flippy_8hpp__incl.md5 new file mode 100644 index 0000000..b1db865 --- /dev/null +++ b/docs/flippy_8hpp__incl.md5 @@ -0,0 +1 @@ +0cecaf612c5444b188b043dcb7a287ac \ No newline at end of file diff --git a/docs/flippy_8hpp__incl.png b/docs/flippy_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..bec42a167961ef591ba414b06e60b9f19a3a866a GIT binary patch literal 107714 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

I!+u`MeeVT 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 literal 0 HcmV?d00001 diff --git a/docs/flippy_8hpp_source.html b/docs/flippy_8hpp_source.html index 6d304e4..46cfc9f 100644 --- a/docs/flippy_8hpp_source.html +++ b/docs/flippy_8hpp_source.html @@ -3,16 +3,18 @@ - + flippy: flippy/flippy.hpp Source File + - + + @@ -43,28 +45,28 @@ - + +

-
@@ -174,7 +176,7 @@ diff --git a/docs/functions.html b/docs/functions.html index 5398319..486a1c7 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -3,16 +3,18 @@ - + flippy: Class Members + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -291,7 +298,7 @@

- z -

    diff --git a/docs/functions_func.html b/docs/functions_func.html index 3ae4cc6..7f225d2 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -3,16 +3,18 @@ - + flippy: Class Members - Functions + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -253,7 +260,7 @@

- v -

    diff --git a/docs/functions_rela.html b/docs/functions_rela.html index 93dd395..79092c1 100644 --- a/docs/functions_rela.html +++ b/docs/functions_rela.html @@ -3,16 +3,18 @@ - + flippy: Class Members - Related Symbols + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -114,7 +121,7 @@ diff --git a/docs/functions_vars.html b/docs/functions_vars.html index da6fd2e..52843a4 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -3,16 +3,18 @@ - + flippy: Class Members - Variables + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -124,7 +131,7 @@ diff --git a/docs/globals.html b/docs/globals.html index be5a9be..3540ea7 100644 --- a/docs/globals.html +++ b/docs/globals.html @@ -3,16 +3,18 @@ - + flippy: File Members + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,7 +116,7 @@ diff --git a/docs/globals_defs.html b/docs/globals_defs.html index 629da5f..19717a6 100644 --- a/docs/globals_defs.html +++ b/docs/globals_defs.html @@ -3,16 +3,18 @@ - + flippy: File Members + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,7 +116,7 @@ diff --git a/docs/graph_legend.dot b/docs/graph_legend.dot deleted file mode 100644 index 97a6d61..0000000 --- a/docs/graph_legend.dot +++ /dev/null @@ -1,24 +0,0 @@ -digraph "Graph Legend" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node9 [id="Node000009",label="Inherited",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node10 -> Node9 [dir="back",color="steelblue1",style="solid" tooltip=" "]; - Node10 [id="Node000010",label="PublicBase",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",tooltip=" "]; - Node11 -> Node10 [dir="back",color="steelblue1",style="solid" tooltip=" "]; - Node11 [id="Node000011",label="Truncated",height=0.2,width=0.4,color="red", fillcolor="#FFF0F0", style="filled",tooltip=" "]; - Node13 -> Node9 [dir="back",color="darkgreen",style="solid" tooltip=" "]; - Node13 [label="ProtectedBase",color="gray40",fillcolor="white",style="filled" tooltip=" "]; - Node14 -> Node9 [dir="back",color="firebrick4",style="solid" tooltip=" "]; - Node14 [label="PrivateBase",color="gray40",fillcolor="white",style="filled" tooltip=" "]; - Node15 -> Node9 [dir="back",color="steelblue1",style="solid" tooltip=" "]; - Node15 [id="Node000015",label="Undocumented",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node16 -> Node9 [dir="back",color="steelblue1",style="solid" tooltip=" "]; - Node16 [label="Templ\< int \>",color="gray40",fillcolor="white",style="filled" tooltip=" "]; - Node17 -> Node16 [dir="back",color="orange",style="dashed",label="< int >",fontcolor="grey" tooltip=" "]; - Node17 [label="Templ\< T \>",color="gray40",fillcolor="white",style="filled" tooltip=" "]; - Node18 -> Node9 [dir="back",color="darkorchid3",style="dashed",label="m_usedClass",fontcolor="grey" tooltip=" "]; - Node18 [label="Used",color="gray40",fillcolor="white",style="filled" tooltip=" "]; -} diff --git a/docs/graph_legend.html b/docs/graph_legend.html index 6e522e2..ccd6973 100644 --- a/docs/graph_legend.html +++ b/docs/graph_legend.html @@ -3,16 +3,18 @@ - + flippy: Graph Legend + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -167,7 +174,7 @@ diff --git a/docs/graph_legend.md5 b/docs/graph_legend.md5 new file mode 100644 index 0000000..da515da --- /dev/null +++ b/docs/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/docs/graph_legend.png b/docs/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..91e0c3151d97014b37235552569f80238ba41211 GIT binary patch literal 22211 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 QS6UVmBZ~{K3|%At1GYMOQvd(} literal 0 HcmV?d00001 diff --git a/docs/group___globals.html b/docs/group___globals.html index 95c0e45..a89106e 100644 --- a/docs/group___globals.html +++ b/docs/group___globals.html @@ -3,16 +3,18 @@ - + flippy: Globally defined functions constants and such + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -118,7 +125,7 @@ #define LONG_LONG_MAX   9223372036854775807LL  Redefinition of the LONG_LONG_MAX macro in case a specific compiler does not implement it. The largest number that fits in the long long type.
  -#define VERY_LARGE_NUMBER_   LONG_LONG_MAX +#define VERY_LARGE_NUMBER_   LONG_LONG_MAX  Literal for a very large integral number.
  @@ -128,36 +135,36 @@ - - - + + +

Typedefs

-using fp::Json = nlohmann::json
 shortening of the nlohmann::json namespace, which is an external open source library bundled by flippy.
 
+using fp::Json = nlohmann::json
 shortening of the nlohmann::json namespace, which is an external open source library bundled by flippy.
 
- - +

Enumerations

enum  fp::TriangulationType { fp::SPHERICAL_TRIANGULATION -, fp::EXPERIMENTAL_PLANAR_TRIANGULATION +
enum  fp::TriangulationType { fp::SPHERICAL_TRIANGULATION +, fp::EXPERIMENTAL_PLANAR_TRIANGULATION }
 This enum defines named types of triangulations that are implemented in flippy. More...
 This enum defines named types of triangulations that are implemented in flippy. More...
 
- + - + - - + +

Functions

static void fp::json_dump (std::string const &file_name, const Json &data)
static void fp::json_dump (std::string const &file_name, const Json &data)
 Simple wrapper function around Json objects built in dump() method.
 
static Json fp::json_read (std::string file_name)
static Json fp::json_read (std::string file_name)
 Simple wrapper function that reads the content of a text file into a json object.
 
template<typename T >
static bool fp::is_member (std::vector< T > const &v, T const &el)
template<typename T >
static bool fp::is_member (std::vector< T > const &v, T const &el)
 Convenient wrapper around std::find, which only works for std::vectors.
 
+static constexpr int 

Variables

-static constexpr int fp::BOND_DONATION_CUTOFF = 4
fp::BOND_DONATION_CUTOFF = 4
 a node needs to have more than the cutoff number of bonds to be allowed to donate one
 
@@ -171,7 +178,7 @@

- +
#define VERY_LARGE_NUMBER_   LONG_LONG_MAX#define VERY_LARGE_NUMBER_   LONG_LONG_MAX

@@ -216,21 +223,14 @@

- + - - + - - - - - - - +
static void fp::json_dump static void fp::json_dump (std::string constfile_name, std::string const & file_name,
const Jsondata 
)const Json & data )
@@ -261,10 +261,9 @@

- + - - +
static Json fp::json_read static Json fp::json_read (std::string file_name)std::string file_name)
@@ -293,27 +292,20 @@

+template<typename T >
@@ -342,6 +334,11 @@

+ + + + + @@ -351,7 +348,7 @@

diff --git a/docs/group___globals.js b/docs/group___globals.js index a0e29d3..4eacd82 100644 --- a/docs/group___globals.js +++ b/docs/group___globals.js @@ -3,7 +3,7 @@ var group___globals = [ "LONG_LONG_MAX", "group___globals.html#ga383fc2c0c24436c812cc22289504a151", null ], [ "VERY_LARGE_NUMBER_", "group___globals.html#ga4fcd71172083b7ac36f8a59485826cc1", null ], [ "M_PI", "group___globals.html#gae71449b1cc6e6250b91f539153a7a0d3", null ], - [ "fp::Json", "group___globals.html#ga0527b166a9415a6e07381ef4e11ed318", null ], + [ "fp::Json", "group___globals.html#ga7bd3848f67a3e8464cd2db3d7b255c04", null ], [ "fp::TriangulationType", "group___globals.html#ga6ac3c08b4c402e40a3f270818345078a", [ [ "fp::SPHERICAL_TRIANGULATION", "group___globals.html#gga6ac3c08b4c402e40a3f270818345078aa4818fa0ff44979ed665568888d681703", null ], [ "fp::EXPERIMENTAL_PLANAR_TRIANGULATION", "group___globals.html#gga6ac3c08b4c402e40a3f270818345078aafb3c1a4934975221c03cd6b957b3e089", null ] diff --git a/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.dot b/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.dot deleted file mode 100644 index 00cae11..0000000 --- a/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::is_member" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::is_member",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Convenient wrapper around std::find, which only works for std::vectors."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lexperimental_load_sphere\l_from_stl",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a62af174bd11d3db03de25587638ffeb4",tooltip="Special constructor that can initialize a triangulation with spherical topology from a binary stl stl..."]; -} diff --git a/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.map b/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.map new file mode 100644 index 0000000..ba2cb25 --- /dev/null +++ b/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.md5 b/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.md5 new file mode 100644 index 0000000..6891630 --- /dev/null +++ b/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.md5 @@ -0,0 +1 @@ +7f7d2bd420783cdc71271b769cdb0826 \ No newline at end of file diff --git a/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.png b/docs/group___globals_ga42171e60ff447e5c0776969445616702_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..7da87f3eef4ef4f59decfdd7f9684dbf22259959 GIT binary patch literal 5582 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 - + flippy: Special concepts + - + + @@ -43,19 +45,24 @@

- + - - + - - - - - - - +
static bool fp::is_member static bool fp::is_member (std::vector< T > constv, std::vector< T > const & v,
T constel 
)T const & el )

- + + @@ -73,7 +80,7 @@
@@ -124,7 +131,7 @@ diff --git a/docs/index.html b/docs/index.html index c8272c4..908c15e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,16 +3,18 @@ - + flippy: Documentation overview + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -131,12 +138,13 @@

[experimental]_ this method data member etc. Is at this point an experimental feature. This means that it is not thoroughly tested and it is not a stable part of the API.

+ diff --git a/docs/menu.js b/docs/menu.js index b0b2693..0fd1e99 100644 --- a/docs/menu.js +++ b/docs/menu.js @@ -22,15 +22,14 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { function makeTree(data,relPath) { - var result=''; + let result=''; if ('children' in data) { result+='
    '; - for (var i in data.children) { - var url; - var link; - link = data.children[i].url; + for (let i in data.children) { + let url; + const link = data.children[i].url; if (link.substring(0,1)=='^') { url = link.substring(1); } else { @@ -44,7 +43,7 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { } return result; } - var searchBoxHtml; + let searchBoxHtml; if (searchEnabled) { if (serverSide) { searchBoxHtml='
    '+ @@ -88,29 +87,28 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { if (searchBoxHtml) { $('#main-menu').append('
  • '); } - var $mainMenuState = $('#main-menu-state'); - var prevWidth = 0; + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; if ($mainMenuState.length) { - function initResizableIfExists() { - if (typeof initResizable==='function') initResizable(); + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); } // animate mobile menu - $mainMenuState.change(function(e) { - var $menu = $('#main-menu'); - var options = { duration: 250, step: initResizableIfExists }; + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; if (this.checked) { - options['complete'] = function() { $menu.css('display', 'block') }; + options['complete'] = () => $menu.css('display', 'block'); $menu.hide().slideDown(options); } else { - options['complete'] = function() { $menu.css('display', 'none') }; + options['complete'] = () => $menu.css('display', 'none'); $menu.show().slideUp(options); } }); // set default menu visibility - function resetState() { - var $menu = $('#main-menu'); - var $mainMenuState = $('#main-menu-state'); - var newWidth = $(window).outerWidth(); + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); if (newWidth!=prevWidth) { if ($(window).outerWidth()<768) { $mainMenuState.prop('checked',false); $menu.hide(); diff --git a/docs/namespacefp.html b/docs/namespacefp.html index c0d8e75..71ec009 100644 --- a/docs/namespacefp.html +++ b/docs/namespacefp.html @@ -3,16 +3,18 @@ - + flippy: fp Namespace Reference + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -113,7 +120,7 @@ - +

    Namespaces

    namespace  implementation
    namespace  implementation
     
    + + @@ -153,10 +162,10 @@

    @@ -124,6 +131,8 @@

    struct  Geometry
     A helper struct. Used by the triangulation class to pass data around in one convenient package. More...
     
    class  GradientDecentUpdater
     
    class  MonteCarloUpdater
     A helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations. More...
     
    - - - + + +

    Typedefs

    -using Json = nlohmann::json
     shortening of the nlohmann::json namespace, which is an external open source library bundled by flippy.
     
    +using Json = nlohmann::json
     shortening of the nlohmann::json namespace, which is an external open source library bundled by flippy.
     
    @@ -168,21 +177,21 @@

    Enumerations

    - + - + - - + +

    Functions

    static void json_dump (std::string const &file_name, const Json &data)
    static void json_dump (std::string const &file_name, const Json &data)
     Simple wrapper function around Json objects built in dump() method.
     
    static Json json_read (std::string file_name)
    static Json json_read (std::string file_name)
     Simple wrapper function that reads the content of a text file into a json object.
     
    template<typename T >
    static bool is_member (std::vector< T > const &v, T const &el)
    template<typename T >
    static bool is_member (std::vector< T > const &v, T const &el)
     Convenient wrapper around std::find, which only works for std::vectors.
     
    +static constexpr int 

    Variables

    -static constexpr int BOND_DONATION_CUTOFF = 4
    BOND_DONATION_CUTOFF = 4
     a node needs to have more than the cutoff number of bonds to be allowed to donate one
     
    @@ -194,7 +203,7 @@ diff --git a/docs/namespacefp.js b/docs/namespacefp.js index a5464a1..276b9d8 100644 --- a/docs/namespacefp.js +++ b/docs/namespacefp.js @@ -3,6 +3,7 @@ var namespacefp = [ "implementation", "namespacefp_1_1implementation.html", "namespacefp_1_1implementation" ], [ "BondFlipData", "structfp_1_1_bond_flip_data.html", "structfp_1_1_bond_flip_data" ], [ "Geometry", "structfp_1_1_geometry.html", "structfp_1_1_geometry" ], + [ "GradientDecentUpdater", "classfp_1_1_gradient_decent_updater.html", null ], [ "MonteCarloUpdater", "classfp_1_1_monte_carlo_updater.html", "classfp_1_1_monte_carlo_updater" ], [ "Neighbors", "structfp_1_1_neighbors.html", "structfp_1_1_neighbors" ], [ "Node", "structfp_1_1_node.html", "structfp_1_1_node" ], @@ -11,7 +12,7 @@ var namespacefp = [ "vec3", "classfp_1_1vec3.html", "classfp_1_1vec3" ], [ "floating_point_number", "conceptfp_1_1floating__point__number.html", null ], [ "indexing_number", "conceptfp_1_1indexing__number.html", null ], - [ "Json", "group___globals.html#ga0527b166a9415a6e07381ef4e11ed318", null ], + [ "Json", "group___globals.html#ga7bd3848f67a3e8464cd2db3d7b255c04", null ], [ "TriangulationType", "group___globals.html#ga6ac3c08b4c402e40a3f270818345078a", [ [ "SPHERICAL_TRIANGULATION", "group___globals.html#gga6ac3c08b4c402e40a3f270818345078aa4818fa0ff44979ed665568888d681703", null ], [ "EXPERIMENTAL_PLANAR_TRIANGULATION", "group___globals.html#gga6ac3c08b4c402e40a3f270818345078aafb3c1a4934975221c03cd6b957b3e089", null ] diff --git a/docs/namespacefp_1_1implementation.html b/docs/namespacefp_1_1implementation.html index 9506db6..37fa289 100644 --- a/docs/namespacefp_1_1implementation.html +++ b/docs/namespacefp_1_1implementation.html @@ -3,16 +3,18 @@ - + flippy: fp::implementation Namespace Reference + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -122,13 +129,13 @@

    Functions

    -static void printSTLTriangle (rawSTLTriangle const &triangle, std::optional< std::string > const &name=std::nullopt) +static void printSTLTriangle (rawSTLTriangle const &triangle, std::optional< std::string > const &name=std::nullopt)   -static rawSTLTriangle loadSTLTriangle (std::ifstream &inp) +static rawSTLTriangle loadSTLTriangle (std::ifstream &inp)   -static rawSTLSolid loadSTLSolid (std::ifstream &inp) +static rawSTLSolid loadSTLSolid (std::ifstream &inp)  

    Detailed Description

    @@ -139,7 +146,7 @@ diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html index 5a62edd..486178a 100644 --- a/docs/namespacemembers.html +++ b/docs/namespacemembers.html @@ -3,16 +3,18 @@ - + flippy: Namespace Members + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -103,7 +110,7 @@
  • BOND_DONATION_CUTOFF : fp
  • EXPERIMENTAL_PLANAR_TRIANGULATION : fp
  • is_member() : fp
  • -
  • Json : fp
  • +
  • Json : fp
  • json_dump() : fp
  • json_read() : fp
  • SPHERICAL_TRIANGULATION : fp
  • @@ -114,7 +121,7 @@ diff --git a/docs/namespacemembers_enum.html b/docs/namespacemembers_enum.html index b602201..14c4641 100644 --- a/docs/namespacemembers_enum.html +++ b/docs/namespacemembers_enum.html @@ -3,16 +3,18 @@ - + flippy: Namespace Members + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -107,7 +114,7 @@ diff --git a/docs/namespacemembers_eval.html b/docs/namespacemembers_eval.html index 85f36fe..9e1d31e 100644 --- a/docs/namespacemembers_eval.html +++ b/docs/namespacemembers_eval.html @@ -3,16 +3,18 @@ - + flippy: Namespace Members + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -108,7 +115,7 @@ diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html index 6b036b6..d2fbf6d 100644 --- a/docs/namespacemembers_func.html +++ b/docs/namespacemembers_func.html @@ -3,16 +3,18 @@ - + flippy: Namespace Members + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -109,7 +116,7 @@ diff --git a/docs/namespacemembers_type.html b/docs/namespacemembers_type.html index da6b323..abf58ad 100644 --- a/docs/namespacemembers_type.html +++ b/docs/namespacemembers_type.html @@ -3,16 +3,18 @@ - + flippy: Namespace Members + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -100,14 +107,14 @@
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
      -
    • Json : fp
    • +
    • Json : fp
    diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html index 1a3264c..3b07777 100644 --- a/docs/namespacemembers_vars.html +++ b/docs/namespacemembers_vars.html @@ -3,16 +3,18 @@ - + flippy: Namespace Members + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
    @@ -107,7 +114,7 @@ diff --git a/docs/namespaces.html b/docs/namespaces.html index 95927b8..fbacb0a 100644 --- a/docs/namespaces.html +++ b/docs/namespaces.html @@ -3,16 +3,18 @@ - + flippy: Namespace List + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -103,9 +110,9 @@
    Here is a list of all documented namespaces with brief descriptions:
    -
    [detail level 123]
    - - +
    [detail level 123]
     Nfp
     Nimplementation
    + + @@ -113,14 +120,15 @@ - - - - - - - - + + + + + + + + +
     Nfp
     Nimplementation
     CrawSTLSolid
     CrawSTLTriangle
     CstlNode
     CstlTriangle
     CBondFlipDataA helper struct; keeps track of bond flips
     CGeometryA helper struct. Used by the triangulation class to pass data around in one convenient package
     CMonteCarloUpdaterA helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations
     CNeighbors
     CNodeA data structure containing all geometric and topological information associated with a node
     CNodesData structure containing all nodes of the Triangulation
     CTriangulationImplementation of Triangulation of two-dimensional surfaces in 3D
     Cvec3Internal implementation of a 3D vector
     Rfloating_point_numberHere we implement the concepts of a floating point number
     Rindexing_numberHere we implement the concepts of a positive integer number that is used throughout the code for indexing
     CGradientDecentUpdater
     CMonteCarloUpdaterA helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations
     CNeighbors
     CNodeA data structure containing all geometric and topological information associated with a node
     CNodesData structure containing all nodes of the Triangulation
     CTriangulationImplementation of Triangulation of two-dimensional surfaces in 3D
     Cvec3Internal implementation of a 3D vector
     Rfloating_point_numberHere we implement the concepts of a floating point number
     Rindexing_numberHere we implement the concepts of a positive integer number that is used throughout the code for indexing
    @@ -128,7 +136,7 @@ diff --git a/docs/navtree.js b/docs/navtree.js index 93dd3d4..9027ce6 100644 --- a/docs/navtree.js +++ b/docs/navtree.js @@ -22,538 +22,462 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -var navTreeSubIndices = new Array(); -var arrowDown = '▼'; -var arrowRight = '►'; - -function getData(varName) -{ - var i = varName.lastIndexOf('/'); - var n = i>=0 ? varName.substring(i+1) : varName; - return eval(n.replace(/\-/g,'_')); -} -function stripPath(uri) -{ - return uri.substring(uri.lastIndexOf('/')+1); -} +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; -function stripPath2(uri) -{ - var i = uri.lastIndexOf('/'); - var s = uri.substring(i+1); - var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); - return m ? uri.substring(i-6) : s; -} + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } -function hashValue() -{ - return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); -} + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } -function hashUrl() -{ - return '#'+hashValue(); -} + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } -function pathName() -{ - return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); -} + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } -function localStorageSupported() -{ - try { - return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + const hashUrl = function() { + return '#'+hashValue(); } - catch(e) { - return false; + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); } -} -function storeLink(link) -{ - if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { - window.localStorage.setItem('navpath',link); + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } } -} -function deleteLink() -{ - if (localStorageSupported()) { - window.localStorage.setItem('navpath',''); + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); } -} -function cachedLink() -{ - if (localStorageSupported()) { - return window.localStorage.getItem('navpath'); - } else { - return ''; + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); } -} -function getScript(scriptName,func) -{ - var head = document.getElementsByTagName("head")[0]; - var script = document.createElement('script'); - script.id = scriptName; - script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - head.appendChild(script); -} + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } -function createIndent(o,domNode,node,level) -{ - var level=-1; - var n = node; - while (n.parentNode) { level++; n=n.parentNode; } - if (node.childrenData) { - var imgNode = document.createElement("span"); - imgNode.className = 'arrow'; - imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.innerHTML=arrowRight; - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() { - if (node.expanded) { - $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.innerHTML=arrowRight; - node.expanded = false; - } else { - expandNode(o, node, false, true); + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } else { - var span = document.createElement("span"); - span.className = 'arrow'; - span.style.width = 16*(level+1)+'px'; - span.innerHTML = ' '; - domNode.appendChild(span); - } -} - -var animationInProgress = false; - -function gotoAnchor(anchor,aname,updateLocation) -{ - var pos, docContent = $('#doc-content'); - var ancParent = $(anchor.parent()); - if (ancParent.hasClass('memItemLeft') || - ancParent.hasClass('memtitle') || - ancParent.hasClass('fieldname') || - ancParent.hasClass('fieldtype') || - ancParent.is(':header')) - { - pos = ancParent.position().top; - } else if (anchor.position()) { - pos = anchor.position().top; } - if (pos) { - var dist = Math.abs(Math.min( - pos-docContent.offset().top, - docContent[0].scrollHeight- - docContent.height()-docContent.scrollTop())); - animationInProgress=true; - docContent.animate({ - scrollTop: pos + docContent.scrollTop() - docContent.offset().top - },Math.max(50,Math.min(500,dist)),function(){ - if (updateLocation) window.location.href=aname; - animationInProgress=false; - }); - } -} -function newNode(o, po, text, link, childrenData, lastNode) -{ - var node = new Object(); - node.children = Array(); - node.childrenData = childrenData; - node.depth = po.depth + 1; - node.relpath = po.relpath; - node.isLast = lastNode; - - node.li = document.createElement("li"); - po.getChildrenUL().appendChild(node.li); - node.parentNode = po; - - node.itemDiv = document.createElement("div"); - node.itemDiv.className = "item"; - - node.labelSpan = document.createElement("span"); - node.labelSpan.className = "label"; - - createIndent(o,node.itemDiv,node,0); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - var a = document.createElement("a"); - node.labelSpan.appendChild(a); - node.label = document.createTextNode(text); - node.expanded = false; - a.appendChild(node.label); - if (link) { - var url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - link = url; - } else { - url = node.relpath+link; + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; } - a.className = stripPath(link.replace('#',':')); - if (link.indexOf('#')!=-1) { - var aname = '#'+link.split('#')[1]; - var srcPage = stripPath(pathName()); - var targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : "javascript:void(0)"; - a.onclick = function(){ - storeLink(link); - if (!$(a).parent().parent().hasClass('selected')) - { - $('.item').removeClass('selected'); - $('.item').removeAttr('id'); - $(a).parent().parent().addClass('selected'); - $(a).parent().parent().attr('id','selected'); + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member } - var anchor = $(aname); - gotoAnchor(anchor,aname,true); - }; - } else { - a.href = url; - a.onclick = function() { storeLink(link); } + }); } - } else { - if (childrenData != null) - { + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { a.className = "nolink"; a.href = "javascript:void(0)"; a.onclick = node.expandToggle.onclick; } + return node; } - node.childrenUL = null; - node.getChildrenUL = function() { - if (!node.childrenUL) { - node.childrenUL = document.createElement("ul"); - node.childrenUL.className = "children_ul"; - node.childrenUL.style.display = "none"; - node.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }; - - return node; -} - -function showRoot() -{ - var headerHeight = $("#top").height(); - var footerHeight = $("#nav-path").height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - (function (){ // retry until we can scroll to the selected item - try { - var navtree=$('#nav-tree'); - navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); - } catch (err) { - setTimeout(arguments.callee, 0); - } - })(); -} - -function expandNode(o, node, imm, setFocus) -{ - if (node.childrenData && !node.expanded) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - expandNode(o, node, imm, setFocus); - }); - } else { - if (!node.childrenVisited) { - getNode(o, node); + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); } - $(node.getChildrenUL()).slideDown("fast"); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - if (setFocus) { - $(node.expandToggle).focus(); + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } } } } -} -function glowEffect(n,duration) -{ - n.addClass('glow').delay(duration).queue(function(next){ - $(this).removeClass('glow');next(); - }); -} - -function highlightAnchor() -{ - var aname = hashUrl(); - var anchor = $(aname); - if (anchor.parent().attr('class')=='memItemLeft'){ - var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); - glowEffect(rows.children(),300); // member without details - } else if (anchor.parent().attr('class')=='fieldname'){ - glowEffect(anchor.parent().parent(),1000); // enum value - } else if (anchor.parent().attr('class')=='fieldtype'){ - glowEffect(anchor.parent().parent(),1000); // struct field - } else if (anchor.parent().is(":header")) { - glowEffect(anchor.parent(),1000); // section header - } else { - glowEffect(anchor.next(),1000); // normal member + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); } -} -function selectAndHighlight(hash,n) -{ - var a; - if (hash) { - var link=stripPath(pathName())+':'+hash.substring(1); - a=$('.item a[class$="'+link+'"]'); + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); } - if (a && a.length) { - a.parent().parent().addClass('selected'); - a.parent().parent().attr('id','selected'); - highlightAnchor(); - } else if (n) { - $(n.itemDiv).addClass('selected'); - $(n.itemDiv).attr('id','selected'); - } - var topOffset=5; - if (typeof page_layout!=='undefined' && page_layout==1) { - topOffset+=$('#top').outerHeight(); - } - if ($('#nav-tree-contents .item:first').hasClass('selected')) { - topOffset+=25; + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); } - $('#nav-sync').css('top',topOffset+'px'); - showRoot(); -} -function showNode(o, node, index, hash) -{ - if (node && node.childrenData) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - showNode(o,node,index,hash); - }); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - var n = node.children[o.breadcrumbs[index]]; - if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); - else hash=''; + const getNode = function(o, po) { + const insertFunction = removeToInsertLater(po.li); + po.childrenVisited = true; + const l = po.childrenData.length-1; + for (let i in po.childrenData) { + const nodeData = po.childrenData[i]; + po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l); + } + insertFunction(); } - if (hash.match(/^#l\d+$/)) { - var anchor=$('a[name='+hash.substring(1)+']'); - glowEffect(anchor.parent(),1000); // line number - hash=''; // strip line number anchors + + const gotoNode = function(o,subIndex,root,hash,relpath) { + const nti = navTreeSubIndices[subIndex][root+hash]; + o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]); + if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index + navTo(o,NAVTREE[0][1],"",relpath); + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + } + if (o.breadcrumbs) { + o.breadcrumbs.unshift(0); // add 0 for root node + showNode(o, o.node, 0, hash); + } } - var url=root+hash; - var i=-1; - while (NAVTREEINDEX[i+1]<=url) i++; - if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath) - } else { - getScript(relpath+'navtreeindex'+i,function(){ - navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath); - } - }); + + const navTo = function(o,root,hash,relpath) { + const link = cachedLink(); + if (link) { + const parts = link.split('#'); + root = parts[0]; + hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } } -} -function showSyncOff(n,relpath) -{ + const showSyncOff = function(n,relpath) { n.html(''); -} + } -function showSyncOn(n,relpath) -{ + const showSyncOn = function(n,relpath) { n.html(''); -} + } -function toggleSyncButton(relpath) -{ - var navSync = $('#nav-sync'); - if (navSync.hasClass('sync')) { - navSync.removeClass('sync'); + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { showSyncOff(navSync,relpath); - storeLink(stripPath2(pathName())+hashUrl()); + navSync.removeClass('sync'); } else { - navSync.addClass('sync'); showSyncOn(navSync,relpath); - deleteLink(); } -} - -var loadTriggered = false; -var readyTriggered = false; -var loadObject,loadToRoot,loadUrl,loadRelPath; -$(window).on('load',function(){ - if (readyTriggered) { // ready first - navTo(loadObject,loadToRoot,loadUrl,loadRelPath); - showRoot(); - } - loadTriggered=true; -}); - -function initNavTree(toroot,relpath) -{ - var o = new Object(); - o.toroot = toroot; - o.node = new Object(); - o.node.li = document.getElementById("nav-tree-contents"); - o.node.childrenData = NAVTREE; - o.node.children = new Array(); - o.node.childrenUL = document.createElement("ul"); - o.node.getChildrenUL = function() { return o.node.childrenUL; }; - o.node.li.appendChild(o.node.childrenUL); - o.node.depth = 0; - o.node.relpath = relpath; - o.node.expanded = false; - o.node.isLast = true; - o.node.plus_img = document.createElement("span"); - o.node.plus_img.className = 'arrow'; - o.node.plus_img.innerHTML = arrowRight; - - if (localStorageSupported()) { - var navSync = $('#nav-sync'); - if (cachedLink()) { - showSyncOff(navSync,relpath); + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); } else { + navSync.addClass('sync'); showSyncOn(navSync,relpath); + deleteLink(); } - navSync.click(function(){ toggleSyncButton(relpath); }); - } + }); - if (loadTriggered) { // load before ready - navTo(o,toroot,hashUrl(),relpath); - showRoot(); - } else { // ready before load - loadObject = o; - loadToRoot = toroot; - loadUrl = hashUrl(); - loadRelPath = relpath; - readyTriggered=true; - } + navTo(o,toroot,hashUrl(),relpath); + showRoot(); - $(window).bind('hashchange', function(){ - if (window.location.hash && window.location.hash.length>1){ - var a; - if ($(location).attr('hash')){ - var clslink=stripPath(pathName())+':'+hashValue(); - a=$('.item a[class$="'+clslink.replace(/ { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/0) { newWidth=0; - } - else { - var width = readSetting('width'); + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); newWidth = (width>250 && width<$(window).width()) ? width : 250; } restoreWidth(newWidth); - var sidenavWidth = $(sidenav).outerWidth(); - writeSetting('width',sidenavWidth-barWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); } header = $("#top"); - sidenav = $("#side-nav"); content = $("#doc-content"); - navtree = $("#nav-tree"); footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); - $(sidenav).resizable({ minWidth: 0 }); - $(window).resize(function() { resizeHeight(); }); - var device = navigator.userAgent.toLowerCase(); - var touch_device = device.match(/(iphone|ipod|ipad|android)/); - if (touch_device) { /* wider split bar for touch only devices */ - $(sidenav).css({ paddingRight:'20px' }); - $('.ui-resizable-e').css({ width:'20px' }); - $('#nav-sync').css({ right:'34px' }); - barWidth=20; + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } } - var width = readSetting('width'); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - var url = location.href; - var i=url.indexOf("#"); + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); if (i>=0) window.location.hash=url.substr(i); - var _preventDefault = function(evt) { evt.preventDefault(); }; - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - if (once) { + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); $(".ui-resizable-handle").dblclick(collapseExpand); - once=0 } $(window).on('load',resizeHeight); } diff --git a/docs/search/all_10.js b/docs/search/all_10.js index 6941f9e..6fe7027 100644 --- a/docs/search/all_10.js +++ b/docs/search/all_10.js @@ -3,15 +3,15 @@ var searchData= ['scale_0',['scale',['../classfp_1_1vec3.html#ab50f5353d9f81d47a0a5b87efc7ad056',1,'fp::vec3']]], ['scale_5fnode_5fcoordinates_1',['scale_node_coordinates',['../classfp_1_1_triangulation.html#a692685c96cd6a0cdba72b50adf3fb49b',1,'fp::Triangulation']]], ['set_5farea_2',['set_area',['../structfp_1_1_nodes.html#ac77577ce16f2b8ff1feceb217c6853e1',1,'fp::Nodes']]], - ['set_5fcurvature_5fvec_3',['set_curvature_vec',['../structfp_1_1_nodes.html#a535f08dde803985251f08b7f02fa043a',1,'fp::Nodes::set_curvature_vec(Index node_id, vec3< Real > &&new_cv)'],['../structfp_1_1_nodes.html#a563539f00c190fb8fd9fedd6a27bc769',1,'fp::Nodes::set_curvature_vec(Index node_id, vec3< Real > const &new_cv)']]], - ['set_5fnn_5fdistance_4',['set_nn_distance',['../structfp_1_1_nodes.html#a7152c3eab97faef371f717aa1f144a5b',1,'fp::Nodes::set_nn_distance(Index node_id, Index loc_nn_index, vec3< Real > const &dist)'],['../structfp_1_1_nodes.html#a0019211410eea70cd8a4eecad4498992',1,'fp::Nodes::set_nn_distance(Index node_id, Index loc_nn_index, vec3< Real > &&dist)']]], + ['set_5fcurvature_5fvec_3',['set_curvature_vec',['../structfp_1_1_nodes.html#a563539f00c190fb8fd9fedd6a27bc769',1,'fp::Nodes::set_curvature_vec(Index node_id, vec3< Real > const &new_cv)'],['../structfp_1_1_nodes.html#a535f08dde803985251f08b7f02fa043a',1,'fp::Nodes::set_curvature_vec(Index node_id, vec3< Real > &&new_cv)']]], + ['set_5fnn_5fdistance_4',['set_nn_distance',['../structfp_1_1_nodes.html#a0019211410eea70cd8a4eecad4498992',1,'fp::Nodes::set_nn_distance(Index node_id, Index loc_nn_index, vec3< Real > &&dist)'],['../structfp_1_1_nodes.html#a7152c3eab97faef371f717aa1f144a5b',1,'fp::Nodes::set_nn_distance(Index node_id, Index loc_nn_index, vec3< Real > const &dist)']]], ['set_5fnn_5fid_5',['set_nn_id',['../structfp_1_1_nodes.html#a14a196ade9731f70eeed6446b32854ca',1,'fp::Nodes']]], ['set_5fnn_5fids_6',['set_nn_ids',['../structfp_1_1_nodes.html#a8aa1bcb4a83a714a2abeaaae500a949a',1,'fp::Nodes']]], ['set_5fpos_7',['set_pos',['../structfp_1_1_nodes.html#ad441e229389a483f2184c9f3ef0647f4',1,'fp::Nodes::set_pos(Index node_id, vec3< Real > const &new_pos)'],['../structfp_1_1_nodes.html#ab0d598ecd535f690a99d81dd4e717d1e',1,'fp::Nodes::set_pos(Index node_id, vec3< Real > &&new_pos)']]], ['set_5funit_5fbending_5fenergy_8',['set_unit_bending_energy',['../structfp_1_1_nodes.html#ae4dcac75731ab83b336c27ded5df8e8d',1,'fp::Nodes']]], ['set_5fverlet_5fradius_9',['set_verlet_radius',['../classfp_1_1_triangulation.html#a58c6d3d8705bb041d4114e88bfd32b71',1,'fp::Triangulation']]], ['set_5fvolume_10',['set_volume',['../structfp_1_1_nodes.html#a4431ab5e1cf3dbc768558ae5b9132bef',1,'fp::Nodes']]], - ['size_11',['size',['../classfp_1_1_triangulation.html#a6622782e18f9333c65cfc2403d8a5bfe',1,'fp::Triangulation::size()'],['../classfp_1_1vec3.html#a19f1aaf1e61b599d434aaa89e0e58351',1,'fp::vec3::size()'],['../structfp_1_1_nodes.html#a00b3ff9ae4af9a804478d246a0c8c7a1',1,'fp::Nodes::size()']]], + ['size_11',['size',['../structfp_1_1_nodes.html#a00b3ff9ae4af9a804478d246a0c8c7a1',1,'fp::Nodes::size()'],['../classfp_1_1_triangulation.html#a6622782e18f9333c65cfc2403d8a5bfe',1,'fp::Triangulation::size()'],['../classfp_1_1vec3.html#a19f1aaf1e61b599d434aaa89e0e58351',1,'fp::vec3::size()']]], ['special_20concepts_12',['Special concepts',['../group__my_concepts.html',1,'']]], ['spherical_5ftriangulation_13',['SPHERICAL_TRIANGULATION',['../group___globals.html#gga6ac3c08b4c402e40a3f270818345078aa4818fa0ff44979ed665568888d681703',1,'fp']]], ['stlnode_14',['stlNode',['../structfp_1_1implementation_1_1stl_node.html',1,'fp::implementation']]], diff --git a/docs/search/all_11.js b/docs/search/all_11.js index 4cde09c..d0b1bca 100644 --- a/docs/search/all_11.js +++ b/docs/search/all_11.js @@ -1,7 +1,7 @@ var searchData= [ ['translate_5fall_5fnodes_0',['translate_all_nodes',['../classfp_1_1_triangulation.html#aaef436fe4758c409b21a135b329edc17',1,'fp::Triangulation']]], - ['triangulation_1',['triangulation',['../classfp_1_1_triangulation.html',1,'fp::Triangulation< Real, Index, triangulation_type >'],['../classfp_1_1_triangulation.html#ab21e803940915dca4750bb5bd86cd659',1,'fp::Triangulation::Triangulation(Json const &nodes_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a411d76190690d29b6f7040e8367b95ec',1,'fp::Triangulation::Triangulation(Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a758e5f3e3f31aeef799219932b639ded',1,'fp::Triangulation::Triangulation(Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)']]], + ['triangulation_1',['Triangulation',['../classfp_1_1_triangulation.html',1,'fp::Triangulation< Real, Index, triangulation_type >'],['../classfp_1_1_triangulation.html#ab21e803940915dca4750bb5bd86cd659',1,'fp::Triangulation::Triangulation(Json const &nodes_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a758e5f3e3f31aeef799219932b639ded',1,'fp::Triangulation::Triangulation(Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a411d76190690d29b6f7040e8367b95ec',1,'fp::Triangulation::Triangulation(Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)']]], ['triangulation_2ehpp_2',['Triangulation.hpp',['../_triangulation_8hpp.html',1,'']]], ['triangulation_3c_20real_2c_20index_2c_20triangulation_5ftype_20_3e_3',['Triangulation< Real, Index, triangulation_type >',['../classfp_1_1_triangulation.html',1,'fp']]], ['triangulationtype_4',['TriangulationType',['../group___globals.html#ga6ac3c08b4c402e40a3f270818345078a',1,'fp']]], diff --git a/docs/search/all_12.js b/docs/search/all_12.js index 43306f1..f31e776 100644 --- a/docs/search/all_12.js +++ b/docs/search/all_12.js @@ -1,7 +1,7 @@ var searchData= [ ['unflip_5fbond_0',['unflip_bond',['../classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa',1,'fp::Triangulation']]], - ['unit_5fbending_5fenergy_1',['unit_bending_energy',['../structfp_1_1_nodes.html#ab65c2e5dd4f3b43b2445b62c400107e9',1,'fp::Nodes::unit_bending_energy()'],['../structfp_1_1_node.html#a65a475a50241308f3dd99313c2760f26',1,'fp::Node::unit_bending_energy'],['../structfp_1_1_geometry.html#a8ae88ad31c5e8ad04e949d508d3023e8',1,'fp::Geometry::unit_bending_energy']]], + ['unit_5fbending_5fenergy_1',['unit_bending_energy',['../structfp_1_1_node.html#a65a475a50241308f3dd99313c2760f26',1,'fp::Node::unit_bending_energy'],['../structfp_1_1_geometry.html#a8ae88ad31c5e8ad04e949d508d3023e8',1,'fp::Geometry::unit_bending_energy'],['../structfp_1_1_nodes.html#ab65c2e5dd4f3b43b2445b62c400107e9',1,'fp::Nodes::unit_bending_energy()']]], ['update_5fboundary_5fnode_5fgeometry_2',['update_boundary_node_geometry',['../classfp_1_1_triangulation.html#a6ad51f097deab1674fce1800d2f2cf31',1,'fp::Triangulation']]], ['update_5fbulk_5fnode_5fgeometry_3',['update_bulk_node_geometry',['../classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68',1,'fp::Triangulation']]], ['update_5fdiamond_5fgeometry_4',['update_diamond_geometry',['../classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8',1,'fp::Triangulation']]], diff --git a/docs/search/all_13.js b/docs/search/all_13.js index d609522..0a3824f 100644 --- a/docs/search/all_13.js +++ b/docs/search/all_13.js @@ -4,5 +4,5 @@ var searchData= ['vec3_2ehpp_1',['vec3.hpp',['../vec3_8hpp.html',1,'']]], ['verlet_5flist_2',['verlet_list',['../structfp_1_1_node.html#aff4450fcb2eb2524fcb0c9025b69bc6a',1,'fp::Node']]], ['very_5flarge_5fnumber_5f_3',['VERY_LARGE_NUMBER_',['../group___globals.html#ga4fcd71172083b7ac36f8a59485826cc1',1,'Triangulation.hpp']]], - ['volume_4',['volume',['../structfp_1_1_geometry.html#a04eb3d9d41651703001ab4601a1fd353',1,'fp::Geometry::volume'],['../structfp_1_1_nodes.html#a0d791117fddd2490c8223a74de6f9109',1,'fp::Nodes::volume()'],['../structfp_1_1_node.html#ae0618b10496535a019b5a99cdc721dca',1,'fp::Node::volume']]] + ['volume_4',['volume',['../structfp_1_1_node.html#ae0618b10496535a019b5a99cdc721dca',1,'fp::Node::volume'],['../structfp_1_1_geometry.html#a04eb3d9d41651703001ab4601a1fd353',1,'fp::Geometry::volume'],['../structfp_1_1_nodes.html#a0d791117fddd2490c8223a74de6f9109',1,'fp::Nodes::volume()']]] ]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js index 097de6e..59acb33 100644 --- a/docs/search/all_2.js +++ b/docs/search/all_2.js @@ -6,7 +6,7 @@ var searchData= ['common_5fnn_5f1_3',['common_nn_1',['../structfp_1_1_bond_flip_data.html#a5792fe8f43d65f6aba3d0acd22dabf57',1,'fp::BondFlipData']]], ['concepts_4',['Special concepts',['../group__my_concepts.html',1,'']]], ['constants_20and_20such_5',['Globally defined functions constants and such',['../group___globals.html',1,'']]], - ['cross_6',['cross',['../classfp_1_1vec3.html#a2522af9d50779abf605b8be03e146a5f',1,'fp::vec3::cross(vec3< Real > const &other) const'],['../classfp_1_1vec3.html#ae64d6fa0ceec87d5a26cac17560f1d7c',1,'fp::vec3::cross(vec3< Real > const &a, vec3< Real > const &b)']]], + ['cross_6',['cross',['../classfp_1_1vec3.html#ae64d6fa0ceec87d5a26cac17560f1d7c',1,'fp::vec3::cross(vec3< Real > const &a, vec3< Real > const &b)'],['../classfp_1_1vec3.html#a2522af9d50779abf605b8be03e146a5f',1,'fp::vec3::cross(vec3< Real > const &other) const']]], ['curvature_5fvec_7',['curvature_vec',['../structfp_1_1_node.html#a2b801251ab545ad8d931d09583920537',1,'fp::Node::curvature_vec'],['../structfp_1_1_nodes.html#aac8eaef6c3fa8679dfafcb4018573233',1,'fp::Nodes::curvature_vec()']]], ['custom_5fconcepts_2ehpp_8',['custom_concepts.hpp',['../custom__concepts_8hpp.html',1,'']]] ]; diff --git a/docs/search/all_5.js b/docs/search/all_5.js index 0edc515..deea34f 100644 --- a/docs/search/all_5.js +++ b/docs/search/all_5.js @@ -5,7 +5,7 @@ var searchData= ['flip_5fback_5fcount_2',['flip_back_count',['../classfp_1_1_monte_carlo_updater.html#ad98d8bef250c2b7c533b6694e8e00d2d',1,'fp::MonteCarloUpdater']]], ['flip_5fbond_3',['flip_bond',['../classfp_1_1_triangulation.html#a6833f13e1fd24b039ca1ad2969b8d267',1,'fp::Triangulation']]], ['flip_5fbond_5funchecked_4',['flip_bond_unchecked',['../classfp_1_1_triangulation.html#a077d1be6c31f16241e9035c5a0f93652',1,'fp::Triangulation']]], - ['flip_5fmc_5fupdater_5',['flip_mc_updater',['../classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node)'],['../classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node, Index id_in_nn_ids)']]], + ['flip_5fmc_5fupdater_5',['flip_MC_updater',['../classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node)'],['../classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node, Index id_in_nn_ids)']]], ['flipped_6',['flipped',['../structfp_1_1_bond_flip_data.html#a7723f26e8083b2d90c3e13e2dde08245',1,'fp::BondFlipData']]], ['flippy_7',['General nomenclature of flippy',['../index.html#autotoc_md0',1,'']]], ['flippy_2ehpp_8',['flippy.hpp',['../flippy_8hpp.html',1,'']]], diff --git a/docs/search/all_6.js b/docs/search/all_6.js index ffaedce..43f648e 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -1,10 +1,11 @@ var searchData= [ ['general_20nomenclature_20of_20flippy_0',['General nomenclature of flippy',['../index.html#autotoc_md0',1,'']]], - ['geometry_1',['geometry',['../structfp_1_1_geometry.html#a6bababab0cc9d995cd9d52dfc87442a0',1,'fp::Geometry::Geometry()'],['../structfp_1_1_geometry.html#a6627a3e6e7ec703d8db7c756464aed8e',1,'fp::Geometry::Geometry(Node< Real, Index > const &node)'],['../structfp_1_1_geometry.html#a2c84ea40f4dec6a64541e9d4aaa9eda3',1,'fp::Geometry::Geometry(Real area_inp, Real volume_inp, Real unit_bending_energy_inp)'],['../structfp_1_1_geometry.html',1,'fp::Geometry< Real, Index >']]], + ['geometry_1',['Geometry',['../structfp_1_1_geometry.html',1,'fp::Geometry< Real, Index >'],['../structfp_1_1_geometry.html#a6bababab0cc9d995cd9d52dfc87442a0',1,'fp::Geometry::Geometry()'],['../structfp_1_1_geometry.html#a6627a3e6e7ec703d8db7c756464aed8e',1,'fp::Geometry::Geometry(Node< Real, Index > const &node)'],['../structfp_1_1_geometry.html#a2c84ea40f4dec6a64541e9d4aaa9eda3',1,'fp::Geometry::Geometry(Real area_inp, Real volume_inp, Real unit_bending_energy_inp)']]], ['get_5fdistance_5fvector_5fto_2',['get_distance_vector_to',['../structfp_1_1_node.html#aa9bf52cc0dc958fca2868f640cdbcb21',1,'fp::Node']]], ['get_5fnn_5fdistance_5fvector_5fbetween_3',['get_nn_distance_vector_between',['../structfp_1_1_nodes.html#a8efb079f96664cee5698ccdf9e6bc080',1,'fp::Nodes']]], ['get_5ftwo_5fring_5fgeometry_4',['get_two_ring_geometry',['../classfp_1_1_triangulation.html#a3c660cb2bec69afe055843975698cfd0',1,'fp::Triangulation']]], ['global_5fgeometry_5',['global_geometry',['../classfp_1_1_triangulation.html#a9890d90831a7a834e8fffa1c432200d3',1,'fp::Triangulation']]], - ['globally_20defined_20functions_20constants_20and_20such_6',['Globally defined functions constants and such',['../group___globals.html',1,'']]] + ['globally_20defined_20functions_20constants_20and_20such_6',['Globally defined functions constants and such',['../group___globals.html',1,'']]], + ['gradientdecentupdater_7',['GradientDecentUpdater',['../classfp_1_1_gradient_decent_updater.html',1,'fp']]] ]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js index 5e5cd0d..2cff394 100644 --- a/docs/search/all_8.js +++ b/docs/search/all_8.js @@ -2,7 +2,7 @@ var searchData= [ ['j_5fm_5f1_0',['j_m_1',['../structfp_1_1_neighbors.html#a78c69e6e87ac732d788d662274eeb492',1,'fp::Neighbors']]], ['j_5fp_5f1_1',['j_p_1',['../structfp_1_1_neighbors.html#a089ec17c7edaa1ed1fad07f703ee8368',1,'fp::Neighbors']]], - ['json_2',['Json',['../group___globals.html#ga0527b166a9415a6e07381ef4e11ed318',1,'fp']]], + ['json_2',['Json',['../group___globals.html#ga7bd3848f67a3e8464cd2db3d7b255c04',1,'fp']]], ['json_5fdump_3',['json_dump',['../group___globals.html#ga200da317c4ff647b237dad1acec6dcd2',1,'fp']]], ['json_5fread_4',['json_read',['../group___globals.html#gad562f1206f779edba9a0557e41b5a403',1,'fp']]] ]; diff --git a/docs/search/all_b.js b/docs/search/all_b.js index 13e62ee..491c9a1 100644 --- a/docs/search/all_b.js +++ b/docs/search/all_b.js @@ -6,8 +6,8 @@ var searchData= ['make_5fglobal_5fgeometry_3',['make_global_geometry',['../classfp_1_1_triangulation.html#a1afce8afd92f1b88fb15ce7d9cb31edd',1,'fp::Triangulation']]], ['make_5fverlet_5flist_4',['make_verlet_list',['../classfp_1_1_triangulation.html#a7a4162ec7ad98f342eeae67ee9451b02',1,'fp::Triangulation']]], ['minus_5fone_5',['minus_one',['../structfp_1_1_neighbors.html#a4fd046f13a1a7c640a2a01e1d0585497',1,'fp::Neighbors']]], - ['mixed_5farea_6',['mixed_area',['../classfp_1_1_triangulation.html#a847fc218cc1807b7027b069a4239c7db',1,'fp::Triangulation::mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real const &triangle_area)'],['../classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1',1,'fp::Triangulation::mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1)']]], - ['montecarloupdater_7',['montecarloupdater',['../classfp_1_1_monte_carlo_updater.html',1,'fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >'],['../classfp_1_1_monte_carlo_updater.html#ac3e7246b13537a6c2df34e5334289c80',1,'fp::MonteCarloUpdater::MonteCarloUpdater()']]], + ['mixed_5farea_6',['mixed_area',['../classfp_1_1_triangulation.html#a3e43dfd4b4c9cfd10c5bf4174f2a85d1',1,'fp::Triangulation::mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real triangle_area, Real cot_at_j, Real cot_at_j_p_1)'],['../classfp_1_1_triangulation.html#a847fc218cc1807b7027b069a4239c7db',1,'fp::Triangulation::mixed_area(vec3< Real > const &lij, vec3< Real > const &lij_p_1, Real const &triangle_area)']]], + ['montecarloupdater_7',['MonteCarloUpdater',['../classfp_1_1_monte_carlo_updater.html',1,'fp::MonteCarloUpdater< Real, Index, EnergyFunctionParameters, RandomNumberEngine, triangulation_type >'],['../classfp_1_1_monte_carlo_updater.html#ac3e7246b13537a6c2df34e5334289c80',1,'fp::MonteCarloUpdater::MonteCarloUpdater()']]], ['montecarloupdater_2ehpp_8',['MonteCarloUpdater.hpp',['../_monte_carlo_updater_8hpp.html',1,'']]], ['move_5fattempt_5fcount_9',['move_attempt_count',['../classfp_1_1_monte_carlo_updater.html#a419e39432ab410ba04dd1ea6fcad38e3',1,'fp::MonteCarloUpdater']]], ['move_5fback_5fcount_10',['move_back_count',['../classfp_1_1_monte_carlo_updater.html#a0afcfe92c1f0f52affb1572521d88df4',1,'fp::MonteCarloUpdater']]], diff --git a/docs/search/all_c.js b/docs/search/all_c.js index 04d0270..7f71ec3 100644 --- a/docs/search/all_c.js +++ b/docs/search/all_c.js @@ -4,14 +4,15 @@ var searchData= ['new_5fneighbour_5fdistances_5fare_5fbetween_5fmin_5fand_5fmax_5flength_1',['new_neighbour_distances_are_between_min_and_max_length',['../classfp_1_1_monte_carlo_updater.html#ada3c8ad8d719671d9dedecd3ec9bbd2b',1,'fp::MonteCarloUpdater']]], ['new_5fnext_5fneighbour_5fdistances_5fare_5fbetween_5fmin_5fand_5fmax_5flength_2',['new_next_neighbour_distances_are_between_min_and_max_length',['../classfp_1_1_monte_carlo_updater.html#ad985050d8f094aa3d577df33eac9242d',1,'fp::MonteCarloUpdater']]], ['new_5fverlet_5fneighbour_5fdistances_5fare_5fbetween_5fmin_5fand_5fmax_5flength_3',['new_verlet_neighbour_distances_are_between_min_and_max_length',['../classfp_1_1_monte_carlo_updater.html#a6a064bcdc7395374ab73913e364f1f81',1,'fp::MonteCarloUpdater']]], - ['nn_5fdistances_4',['nn_distances',['../structfp_1_1_nodes.html#aeaac33789677da84759647308c5f25da',1,'fp::Nodes::nn_distances()'],['../structfp_1_1_node.html#a7d7b5f362addd1bb5249f573b16d0a90',1,'fp::Node::nn_distances']]], + ['nn_5fdistances_4',['nn_distances',['../structfp_1_1_node.html#a7d7b5f362addd1bb5249f573b16d0a90',1,'fp::Node::nn_distances'],['../structfp_1_1_nodes.html#aeaac33789677da84759647308c5f25da',1,'fp::Nodes::nn_distances(Index node_id) const']]], ['nn_5fid_5',['nn_id',['../structfp_1_1_nodes.html#a65c0fd75105d0110c204b2b9c2af5640',1,'fp::Nodes']]], ['nn_5fids_6',['nn_ids',['../structfp_1_1_node.html#ae2e0c5a97ae4f47cff41a692ac6ce79a',1,'fp::Node::nn_ids'],['../structfp_1_1_nodes.html#aa149044ed9e33aa0560311362cd2c660',1,'fp::Nodes::nn_ids()']]], ['node_7',['Node',['../structfp_1_1_node.html',1,'fp']]], - ['nodes_8',['nodes',['../structfp_1_1_nodes.html#afcdc1fecf1c86ee26bd4a04e3126dcc8',1,'fp::Nodes::Nodes()'],['../structfp_1_1_nodes.html',1,'fp::Nodes< Real, Index >'],['../classfp_1_1_triangulation.html#aeeb65b7f5974560fc57e20b50cf73b41',1,'fp::Triangulation::nodes()'],['../structfp_1_1_nodes.html#ab29b1bbd7bae02bdda2a0a94581235bb',1,'fp::Nodes::Nodes()=default'],['../structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6',1,'fp::Nodes::Nodes(Json const &node_dict)']]], - ['nodes_2ehpp_9',['Nodes.hpp',['../_nodes_8hpp.html',1,'']]], - ['nomenclature_20of_20flippy_10',['General nomenclature of flippy',['../index.html#autotoc_md0',1,'']]], - ['norm_11',['norm',['../classfp_1_1vec3.html#a8568d337f067bd43b63508174f047df2',1,'fp::vec3']]], - ['norm_5fsquare_12',['norm_square',['../classfp_1_1vec3.html#a8f4f85470de85d92876fe2c93ea0f425',1,'fp::vec3']]], - ['normalize_13',['normalize',['../classfp_1_1vec3.html#a3484a50de6cbbadfa7b04d4352410a10',1,'fp::vec3']]] + ['nodes_8',['Nodes',['../structfp_1_1_nodes.html',1,'fp::Nodes< Real, Index >'],['../structfp_1_1_nodes.html#ab29b1bbd7bae02bdda2a0a94581235bb',1,'fp::Nodes::Nodes()=default'],['../structfp_1_1_nodes.html#afcdc1fecf1c86ee26bd4a04e3126dcc8',1,'fp::Nodes::Nodes(std::vector< Node< Real, Index > > data_inp)'],['../structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6',1,'fp::Nodes::Nodes(Json const &node_dict)']]], + ['nodes_9',['nodes',['../classfp_1_1_triangulation.html#aeeb65b7f5974560fc57e20b50cf73b41',1,'fp::Triangulation']]], + ['nodes_2ehpp_10',['Nodes.hpp',['../_nodes_8hpp.html',1,'']]], + ['nomenclature_20of_20flippy_11',['General nomenclature of flippy',['../index.html#autotoc_md0',1,'']]], + ['norm_12',['norm',['../classfp_1_1vec3.html#a8568d337f067bd43b63508174f047df2',1,'fp::vec3']]], + ['norm_5fsquare_13',['norm_square',['../classfp_1_1vec3.html#a8f4f85470de85d92876fe2c93ea0f425',1,'fp::vec3']]], + ['normalize_14',['normalize',['../classfp_1_1vec3.html#a3484a50de6cbbadfa7b04d4352410a10',1,'fp::vec3']]] ]; diff --git a/docs/search/all_d.js b/docs/search/all_d.js index 1fffd2f..36db221 100644 --- a/docs/search/all_d.js +++ b/docs/search/all_d.js @@ -1,15 +1,15 @@ var searchData= [ ['of_20flippy_0',['General nomenclature of flippy',['../index.html#autotoc_md0',1,'']]], - ['operator_2a_1',['operator*',['../classfp_1_1vec3.html#a58c98b07b3903857039bbcfcf390b037',1,'fp::vec3::operator*'],['../classfp_1_1vec3.html#aae0a63764676c772cd8ed6c3cc0aef38',1,'fp::vec3::operator*']]], - ['operator_2b_2',['operator+',['../classfp_1_1vec3.html#ad3792f8349787c827e4f5b66b0e62156',1,'fp::vec3::operator+'],['../structfp_1_1_geometry.html#a1ae896003b13c5f110116085a2658471',1,'fp::Geometry::operator+']]], + ['operator_2a_1',['operator*',['../classfp_1_1vec3.html#aae0a63764676c772cd8ed6c3cc0aef38',1,'fp::vec3::operator*'],['../classfp_1_1vec3.html#a58c98b07b3903857039bbcfcf390b037',1,'fp::vec3::operator*']]], + ['operator_2b_2',['operator+',['../structfp_1_1_geometry.html#a1ae896003b13c5f110116085a2658471',1,'fp::Geometry::operator+'],['../classfp_1_1vec3.html#ad3792f8349787c827e4f5b66b0e62156',1,'fp::vec3::operator+']]], ['operator_2b_3d_3',['operator+=',['../structfp_1_1_geometry.html#a7d19899dde91a5b7b30635de7b321dd9',1,'fp::Geometry::operator+='],['../structfp_1_1_geometry.html#af64274f242f134f791bb381ce1419753',1,'fp::Geometry::operator+=(Node< Real, Index > const &node)'],['../classfp_1_1vec3.html#a86a997aa250e63ef9b0e106bffab6368',1,'fp::vec3::operator+=']]], - ['operator_2d_4',['operator-',['../structfp_1_1_geometry.html#ad1551fc47c469d47625068d5424a2cef',1,'fp::Geometry::operator-'],['../classfp_1_1vec3.html#ac3763454def892f79476dad1079adb18',1,'fp::vec3::operator-'],['../classfp_1_1vec3.html#adaf7d3b941eeaa8bc1bb3ee5dd865552',1,'fp::vec3::operator-'],['../classfp_1_1vec3.html#a40d3452bbc375c85aedba29afe4697f2',1,'fp::vec3::operator-']]], + ['operator_2d_4',['operator-',['../structfp_1_1_geometry.html#ad1551fc47c469d47625068d5424a2cef',1,'fp::Geometry::operator-'],['../classfp_1_1vec3.html#a40d3452bbc375c85aedba29afe4697f2',1,'fp::vec3::operator-'],['../classfp_1_1vec3.html#ac3763454def892f79476dad1079adb18',1,'fp::vec3::operator-'],['../classfp_1_1vec3.html#adaf7d3b941eeaa8bc1bb3ee5dd865552',1,'fp::vec3::operator-']]], ['operator_2d_3d_5',['operator-=',['../structfp_1_1_geometry.html#ad54e751bccf6ae11d4af543ef6a23c23',1,'fp::Geometry::operator-='],['../classfp_1_1vec3.html#ae9b219ccba98f5d12db4f50da6970459',1,'fp::vec3::operator-=']]], ['operator_2f_6',['operator/',['../classfp_1_1vec3.html#a8d8ccff0006cc4699a6773e85de7e4cb',1,'fp::vec3']]], ['operator_2f_3d_7',['operator/=',['../classfp_1_1vec3.html#a34315674ec0ce3613c42ca5c9ec82c6f',1,'fp::vec3']]], - ['operator_3c_3c_8',['operator<<',['../classfp_1_1vec3.html#ac70e0b9511e58cb1dc2b0e327aacf70d',1,'fp::vec3::operator<<'],['../structfp_1_1_node.html#ac8b3254d4da11f9069ce0cbc28aa0288',1,'fp::Node::operator<<']]], + ['operator_3c_3c_8',['operator<<',['../structfp_1_1_node.html#ac8b3254d4da11f9069ce0cbc28aa0288',1,'fp::Node::operator<<'],['../classfp_1_1vec3.html#ac70e0b9511e58cb1dc2b0e327aacf70d',1,'fp::vec3::operator<<']]], ['operator_3d_3d_9',['operator==',['../structfp_1_1_node.html#a8bc7daf80f3048d114e9adfe442c5069',1,'fp::Node::operator==()'],['../classfp_1_1vec3.html#aa367e797c70bc3efd3808c492b42a7cf',1,'fp::vec3::operator==()']]], - ['operator_5b_5d_10',['operator[]',['../structfp_1_1_nodes.html#a093e30bf91fecce01cb2a963cdad6415',1,'fp::Nodes::operator[]()'],['../classfp_1_1_triangulation.html#a49a847019900dc667e873d9510ff402a',1,'fp::Triangulation::operator[]()'],['../classfp_1_1vec3.html#adc1be1017b046b97972b4f4ead8f5323',1,'fp::vec3::operator[](Index idx)'],['../classfp_1_1vec3.html#a7e38014f26c1b1cb52089f55f84563b3',1,'fp::vec3::operator[](Index idx) const'],['../structfp_1_1_nodes.html#abfaa815fd0dacc7d85fd75a011fbebdc',1,'fp::Nodes::operator[]()']]], + ['operator_5b_5d_10',['operator[]',['../structfp_1_1_nodes.html#a093e30bf91fecce01cb2a963cdad6415',1,'fp::Nodes::operator[](Index node_id)'],['../structfp_1_1_nodes.html#abfaa815fd0dacc7d85fd75a011fbebdc',1,'fp::Nodes::operator[](Index node_id) const'],['../classfp_1_1_triangulation.html#a49a847019900dc667e873d9510ff402a',1,'fp::Triangulation::operator[]()'],['../classfp_1_1vec3.html#adc1be1017b046b97972b4f4ead8f5323',1,'fp::vec3::operator[](Index idx)'],['../classfp_1_1vec3.html#a7e38014f26c1b1cb52089f55f84563b3',1,'fp::vec3::operator[](Index idx) const']]], ['overview_11',['Documentation overview',['../index.html',1,'']]] ]; diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js index 5febbac..9607ce0 100644 --- a/docs/search/classes_1.js +++ b/docs/search/classes_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['geometry_0',['Geometry',['../structfp_1_1_geometry.html',1,'fp']]] + ['geometry_0',['Geometry',['../structfp_1_1_geometry.html',1,'fp']]], + ['gradientdecentupdater_1',['GradientDecentUpdater',['../classfp_1_1_gradient_decent_updater.html',1,'fp']]] ]; diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js index 80883a1..b56c565 100644 --- a/docs/search/functions_10.js +++ b/docs/search/functions_10.js @@ -1,5 +1,5 @@ var searchData= [ ['translate_5fall_5fnodes_0',['translate_all_nodes',['../classfp_1_1_triangulation.html#aaef436fe4758c409b21a135b329edc17',1,'fp::Triangulation']]], - ['triangulation_1',['triangulation',['../classfp_1_1_triangulation.html#ab21e803940915dca4750bb5bd86cd659',1,'fp::Triangulation::Triangulation(Json const &nodes_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a758e5f3e3f31aeef799219932b639ded',1,'fp::Triangulation::Triangulation(Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a411d76190690d29b6f7040e8367b95ec',1,'fp::Triangulation::Triangulation(Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)']]] + ['triangulation_1',['Triangulation',['../classfp_1_1_triangulation.html#ab21e803940915dca4750bb5bd86cd659',1,'fp::Triangulation::Triangulation(Json const &nodes_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a758e5f3e3f31aeef799219932b639ded',1,'fp::Triangulation::Triangulation(Index n_nodes_iter, Real R_initial_input, Real verlet_radius_inp)'],['../classfp_1_1_triangulation.html#a411d76190690d29b6f7040e8367b95ec',1,'fp::Triangulation::Triangulation(Index n_length, Index n_width, Real length, Real width, Real verlet_radius_inp)']]] ]; diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js index 66dd882..c5e4d42 100644 --- a/docs/search/functions_5.js +++ b/docs/search/functions_5.js @@ -5,5 +5,5 @@ var searchData= ['flip_5fback_5fcount_2',['flip_back_count',['../classfp_1_1_monte_carlo_updater.html#ad98d8bef250c2b7c533b6694e8e00d2d',1,'fp::MonteCarloUpdater']]], ['flip_5fbond_3',['flip_bond',['../classfp_1_1_triangulation.html#a6833f13e1fd24b039ca1ad2969b8d267',1,'fp::Triangulation']]], ['flip_5fbond_5funchecked_4',['flip_bond_unchecked',['../classfp_1_1_triangulation.html#a077d1be6c31f16241e9035c5a0f93652',1,'fp::Triangulation']]], - ['flip_5fmc_5fupdater_5',['flip_mc_updater',['../classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node)'],['../classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node, Index id_in_nn_ids)']]] + ['flip_5fmc_5fupdater_5',['flip_MC_updater',['../classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node)'],['../classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c',1,'fp::MonteCarloUpdater::flip_MC_updater(fp::Node< Real, Index > const &node, Index id_in_nn_ids)']]] ]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js index 3192f15..0f7fac5 100644 --- a/docs/search/functions_6.js +++ b/docs/search/functions_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['geometry_0',['geometry',['../structfp_1_1_geometry.html#a6bababab0cc9d995cd9d52dfc87442a0',1,'fp::Geometry::Geometry()'],['../structfp_1_1_geometry.html#a6627a3e6e7ec703d8db7c756464aed8e',1,'fp::Geometry::Geometry(Node< Real, Index > const &node)'],['../structfp_1_1_geometry.html#a2c84ea40f4dec6a64541e9d4aaa9eda3',1,'fp::Geometry::Geometry(Real area_inp, Real volume_inp, Real unit_bending_energy_inp)']]], + ['geometry_0',['Geometry',['../structfp_1_1_geometry.html#a6bababab0cc9d995cd9d52dfc87442a0',1,'fp::Geometry::Geometry()'],['../structfp_1_1_geometry.html#a6627a3e6e7ec703d8db7c756464aed8e',1,'fp::Geometry::Geometry(Node< Real, Index > const &node)'],['../structfp_1_1_geometry.html#a2c84ea40f4dec6a64541e9d4aaa9eda3',1,'fp::Geometry::Geometry(Real area_inp, Real volume_inp, Real unit_bending_energy_inp)']]], ['get_5fdistance_5fvector_5fto_1',['get_distance_vector_to',['../structfp_1_1_node.html#aa9bf52cc0dc958fca2868f640cdbcb21',1,'fp::Node']]], ['get_5fnn_5fdistance_5fvector_5fbetween_2',['get_nn_distance_vector_between',['../structfp_1_1_nodes.html#a8efb079f96664cee5698ccdf9e6bc080',1,'fp::Nodes']]], ['get_5ftwo_5fring_5fgeometry_3',['get_two_ring_geometry',['../classfp_1_1_triangulation.html#a3c660cb2bec69afe055843975698cfd0',1,'fp::Triangulation']]], diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js index 7792da1..82223c3 100644 --- a/docs/search/functions_b.js +++ b/docs/search/functions_b.js @@ -6,8 +6,9 @@ var searchData= ['nn_5fdistances_3',['nn_distances',['../structfp_1_1_nodes.html#aeaac33789677da84759647308c5f25da',1,'fp::Nodes']]], ['nn_5fid_4',['nn_id',['../structfp_1_1_nodes.html#a65c0fd75105d0110c204b2b9c2af5640',1,'fp::Nodes']]], ['nn_5fids_5',['nn_ids',['../structfp_1_1_nodes.html#aa149044ed9e33aa0560311362cd2c660',1,'fp::Nodes']]], - ['nodes_6',['nodes',['../classfp_1_1_triangulation.html#aeeb65b7f5974560fc57e20b50cf73b41',1,'fp::Triangulation::nodes()'],['../structfp_1_1_nodes.html#ab29b1bbd7bae02bdda2a0a94581235bb',1,'fp::Nodes::Nodes()=default'],['../structfp_1_1_nodes.html#afcdc1fecf1c86ee26bd4a04e3126dcc8',1,'fp::Nodes::Nodes(std::vector< Node< Real, Index > > data_inp)'],['../structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6',1,'fp::Nodes::Nodes(Json const &node_dict)']]], - ['norm_7',['norm',['../classfp_1_1vec3.html#a8568d337f067bd43b63508174f047df2',1,'fp::vec3']]], - ['norm_5fsquare_8',['norm_square',['../classfp_1_1vec3.html#a8f4f85470de85d92876fe2c93ea0f425',1,'fp::vec3']]], - ['normalize_9',['normalize',['../classfp_1_1vec3.html#a3484a50de6cbbadfa7b04d4352410a10',1,'fp::vec3']]] + ['nodes_6',['Nodes',['../structfp_1_1_nodes.html#ab29b1bbd7bae02bdda2a0a94581235bb',1,'fp::Nodes::Nodes()=default'],['../structfp_1_1_nodes.html#afcdc1fecf1c86ee26bd4a04e3126dcc8',1,'fp::Nodes::Nodes(std::vector< Node< Real, Index > > data_inp)'],['../structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6',1,'fp::Nodes::Nodes(Json const &node_dict)']]], + ['nodes_7',['nodes',['../classfp_1_1_triangulation.html#aeeb65b7f5974560fc57e20b50cf73b41',1,'fp::Triangulation']]], + ['norm_8',['norm',['../classfp_1_1vec3.html#a8568d337f067bd43b63508174f047df2',1,'fp::vec3']]], + ['norm_5fsquare_9',['norm_square',['../classfp_1_1vec3.html#a8f4f85470de85d92876fe2c93ea0f425',1,'fp::vec3']]], + ['normalize_10',['normalize',['../classfp_1_1vec3.html#a3484a50de6cbbadfa7b04d4352410a10',1,'fp::vec3']]] ]; diff --git a/docs/search/search.js b/docs/search/search.js index 6fd40c6..666af01 100644 --- a/docs/search/search.js +++ b/docs/search/search.js @@ -22,58 +22,9 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function convertToId(search) -{ - var result = ''; - for (i=0;i document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); // ------------ Event Handlers // Called when focus is added or removed from the search field. - this.OnSearchFieldFocus = function(isActive) - { + this.OnSearchFieldFocus = function(isActive) { this.Activate(isActive); } - this.OnSearchSelectShow = function() - { - var searchSelectWindow = this.DOMSearchSelectWindow(); - var searchField = this.DOMSearchSelect(); + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); - var left = getXPos(searchField); - var top = getYPos(searchField); - top += searchField.offsetHeight; + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; // show search selection popup searchSelectWindow.style.display='block'; @@ -146,55 +102,43 @@ function SearchBox(name, resultsPath, extension) searchSelectWindow.style.top = top + 'px'; // stop selection hide timer - if (this.hideTimeout) - { + if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout=0; } return false; // to avoid "image drag" default event } - this.OnSearchSelectHide = function() - { + this.OnSearchSelectHide = function() { this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), this.closeSelectionTimeout); } // Called when the content of the search field is changed. - this.OnSearchFieldChange = function(evt) - { - if (this.keyTimeout) // kill running timer - { + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer clearTimeout(this.keyTimeout); this.keyTimeout = 0; } - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 || e.keyCode==13) - { - if (e.shiftKey==1) - { + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { this.OnSearchSelectShow(); - var win=this.DOMSearchSelectWindow(); - for (i=0;i do a search - { + const searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + if (searchValue!="" && this.searchActive) { // something was found -> do a search this.Search(); } } - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { + } else if (e.keyCode==38 && this.searchIndex>0) { // Up this.searchIndex--; this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { + } else if (e.keyCode==13 || e.keyCode==27) { e.stopPropagation(); this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); @@ -301,82 +239,75 @@ function SearchBox(name, resultsPath, extension) // --------- Actions // Closes the results window. - this.CloseResultsWindow = function() - { + this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } - this.CloseSelectionWindow = function() - { + this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. - this.Search = function() - { + this.Search = function() { this.keyTimeout = 0; // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair idxChar = searchValue.substr(0, 2); } - var jsFile; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; } - var loadJS = function(url, impl, loc){ - var scriptTag = document.createElement('script'); + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); scriptTag.src = url; scriptTag.onload = impl; scriptTag.onreadystatechange = impl; loc.appendChild(scriptTag); } - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - var domSearchBox = this.DOMSearchBox(); - var domPopupSearchResults = this.DOMPopupSearchResults(); - var domSearchClose = this.DOMSearchClose(); - var resultsPath = this.resultsPath; + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; - var handleResults = function() { + const handleResults = function() { document.getElementById("Loading").style.display="none"; if (typeof searchData !== 'undefined') { createResults(resultsPath); document.getElementById("NoMatches").style.display="none"; } - + if (idx!=-1) { searchResults.Search(searchValue); } else { // no file with search results => force empty search results searchResults.Search('===='); } - if (domPopupSearchResultsWindow.style.display!='block') - { + if (domPopupSearchResultsWindow.style.display!='block') { domSearchClose.style.display = 'inline-block'; - var left = getXPos(domSearchBox) + 150; - var top = getYPos(domSearchBox) + 20; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; - var maxWidth = document.body.clientWidth; - var maxHeight = document.body.clientHeight; - var width = 300; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; - var height = 400; + let height = 400; if (height+top+8>maxHeight) height=maxHeight-top-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; @@ -398,17 +329,13 @@ function SearchBox(name, resultsPath, extension) // Activates or deactivates the search panel, resetting things to // their default values if necessary. - this.Activate = function(isActive) - { + this.Activate = function(isActive) { if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { this.DOMSearchBox().className = 'MSearchBoxActive'; this.searchActive = true; - } - else if (!isActive) // directly remove the panel - { + } else if (!isActive) { // directly remove the panel this.DOMSearchBox().className = 'MSearchBoxInactive'; this.searchActive = false; this.lastSearchValue = '' @@ -421,409 +348,333 @@ function SearchBox(name, resultsPath, extension) // ----------------------------------------------------------------------- // The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') - { - return element; - } +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; } - } - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; } - else - { - element.style.display = 'block'; + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; } } } + } - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; } - this.lastMatchCount = matches; - return true; } + } - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; } - focusItem=null; - index++; } - return focusItem; + i++; } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; } - return focusItem; + focusItem=null; + index--; } + return focusItem; + } - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown } - return this.lastKey!=0; + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; } + return this.lastKey!=0; + } - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; } + n++; } } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; } - else if (this.lastKey==27) // Escape - { - e.stopPropagation(); - searchBox.CloseResultsWindow(); + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field document.getElementById("MSearchField").focus(); } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); } - else if (this.lastKey==27) // Escape - { - e.stopPropagation(); - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); + if (elem) { + elem.focus(); } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } } -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} +function createResults(resultsPath) { -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } -function createResults(resultsPath) -{ - var results = document.getElementById("SRResults"); + const results = document.getElementById("SRResults"); results.innerHTML = ''; - for (var e=0; e { + const id = elem[0]; + const srResult = document.createElement('div'); srResult.setAttribute('id','SR_'+id); setClassAttr(srResult,'SRResult'); - var srEntry = document.createElement('div'); + const srEntry = document.createElement('div'); setClassAttr(srEntry,'SREntry'); - var srLink = document.createElement('a'); - srLink.setAttribute('id','Item'+e); - setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); setClassAttr(srLink,'SRSymbol'); - srLink.innerHTML = searchData[e][1][0]; + srLink.innerHTML = elem[1][0]; srEntry.appendChild(srLink); - if (searchData[e][1].length==2) // single result - { - srLink.setAttribute('href',resultsPath+searchData[e][1][1][0]); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); - if (searchData[e][1][1][1]) - { + if (elem[1][1][1]) { srLink.setAttribute('target','_parent'); - } - else - { + } else { srLink.setAttribute('target','_blank'); } - var srScope = document.createElement('span'); + const srScope = document.createElement('span'); setClassAttr(srScope,'SRScope'); - srScope.innerHTML = searchData[e][1][1][2]; + srScope.innerHTML = elem[1][1][2]; srEntry.appendChild(srScope); - } - else // multiple results - { + } else { // multiple results srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); - var srChildren = document.createElement('div'); + const srChildren = document.createElement('div'); setClassAttr(srChildren,'SRChildren'); - for (var c=0; c - + flippy: flippy/stlSerializer.hpp Source File + - + + @@ -43,28 +45,28 @@ - + + -
    @@ -283,7 +285,7 @@ diff --git a/docs/structfp_1_1_bond_flip_data-members.html b/docs/structfp_1_1_bond_flip_data-members.html index 37a61d1..76df7c7 100644 --- a/docs/structfp_1_1_bond_flip_data-members.html +++ b/docs/structfp_1_1_bond_flip_data-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -113,7 +120,7 @@ diff --git a/docs/structfp_1_1_bond_flip_data.html b/docs/structfp_1_1_bond_flip_data.html index 232b1c5..bb56e0b 100644 --- a/docs/structfp_1_1_bond_flip_data.html +++ b/docs/structfp_1_1_bond_flip_data.html @@ -3,16 +3,18 @@ - + flippy: fp::BondFlipData< Index > Struct Template Reference + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -107,49 +114,55 @@

    A helper struct; keeps track of bond flips. - More...

    + More...

    #include <Triangulation.hpp>

    Collaboration diagram for fp::BondFlipData< Index >:
    Collaboration graph
    + + + + + + +
    [legend]
    +bool  +Index  +Index 

    Public Attributes

    -bool flipped = false
    flipped = false
     track if the bond was flipped.
     
    -Index common_nn_0 = static_cast<Index>(VERY_LARGE_NUMBER_)
    common_nn_0 = static_cast<Index>(VERY_LARGE_NUMBER_)
     Global id of a node that is supposed to receive a bond after a flip.
     
    -Index common_nn_1 = static_cast<Index>(VERY_LARGE_NUMBER_)
    common_nn_1 = static_cast<Index>(VERY_LARGE_NUMBER_)
     Global id of a node that is supposed to receive a bond after a flip.
     

    Detailed Description

    template<indexing_number Index>
    struct fp::BondFlipData< Index >

    A helper struct; keeps track of bond flips.

    -

    A bond flip can be unsuccessful, e.g., if the requested two nodes that are donating an edge already have too few edges (more details on bond flips and how they can fail are provided in the Triangulation.flip_bond(Index, Index, Real, Real) function). If the flip does happen, then flipped will be changed to true by the Triangulation.flip_bond(Index, Index, Real, Real) function and common_nn_0 and common_nn_1 will record the ids of nodes that receive new common bond. If the flip does not happen then the common_nn_0 and common_nn_1 data members will hold a VERY_LARGE_NUMBER_ with which they were initiated.

    -

    The initiation with VERY_LARGE_NUMBER_ is done to avoid common_nn_0 and common_nn_1 being zero initiated. This mechanism will lead to wrong behavior that is easier to identify during debugging in situations of un-careful usage. Example of such un-careful usage is if the end-user does not check that the bonds were not flipped and tries to un-flip bonds.

    -
    State of the triangulation before and after the flip.
    - +

    A bond flip can be unsuccessful, e.g., if the requested two nodes that are donating an edge already have too few edges (more details on bond flips and how they can fail are provided in the Triangulation.flip_bond(Index, Index, Real, Real) function). If the flip does happen, then flipped will be changed to true by the Triangulation.flip_bond(Index, Index, Real, Real) function and common_nn_0 and common_nn_1 will record the ids of nodes that receive new common bond. If the flip does not happen then the common_nn_0 and common_nn_1 data members will hold a VERY_LARGE_NUMBER_ with which they were initiated.

    +

    The initiation with VERY_LARGE_NUMBER_ is done to avoid common_nn_0 and common_nn_1 being zero initiated. This mechanism will lead to wrong behavior that is easier to identify during debugging in situations of un-careful usage. Example of such un-careful usage is if the end-user does not check that the bonds were not flipped and tries to un-flip bonds.

    +
    State of the triangulation before and after the flip.
    +
    before the flip after the flip
    - +
    common nn 1 common nn 1
    / \ / | \
    / \ / | \
    -
    node --------- nn node | nn
    +
    node --------- nn node | nn
    \ / \ | /
    \ / \ | /
    - -
    A helper struct; keeps track of bond flips.
    Definition Triangulation.hpp:84
    +
    common nn 0 common nn 0
    Template Parameters
    - +
    Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
    Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
    @@ -167,7 +180,7 @@ diff --git a/docs/structfp_1_1_bond_flip_data__coll__graph.dot b/docs/structfp_1_1_bond_flip_data__coll__graph.dot deleted file mode 100644 index 3a34084..0000000 --- a/docs/structfp_1_1_bond_flip_data__coll__graph.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph "fp::BondFlipData< Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::BondFlipData\< Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="A helper struct; keeps track of bond flips."]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" flipped",fontcolor="grey" ]; - Node2 [id="Node000002",label="bool",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node3 -> Node1 [id="edge2_Node000001_Node000003",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" common_nn_0\ncommon_nn_1",fontcolor="grey" ]; - Node3 [id="Node000003",label="Index",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1_bond_flip_data__coll__graph.map b/docs/structfp_1_1_bond_flip_data__coll__graph.map new file mode 100644 index 0000000..27b9c24 --- /dev/null +++ b/docs/structfp_1_1_bond_flip_data__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/structfp_1_1_bond_flip_data__coll__graph.md5 b/docs/structfp_1_1_bond_flip_data__coll__graph.md5 new file mode 100644 index 0000000..7a72851 --- /dev/null +++ b/docs/structfp_1_1_bond_flip_data__coll__graph.md5 @@ -0,0 +1 @@ +204a9c900ecd6dafb3dff29116b2ba87 \ No newline at end of file diff --git a/docs/structfp_1_1_bond_flip_data__coll__graph.png b/docs/structfp_1_1_bond_flip_data__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..36bb041b993bfbfa3aa12ef93440b36db197a3f2 GIT binary patch literal 7913 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 gga31hoH`D!c$?os)wD7Rde@Mr3L5eyaP!yy1 - + flippy: Member List + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -109,11 +116,11 @@ Geometry()fp::Geometry< Real, Index >inline Geometry(Node< Real, Index > const &node)fp::Geometry< Real, Index >inlineexplicit Geometry(Real area_inp, Real volume_inp, Real unit_bending_energy_inp)fp::Geometry< Real, Index >inline - operator+fp::Geometry< Real, Index >friend - operator+=fp::Geometry< Real, Index >friend + operator+(Geometry< Real, Index > const &lhs, Geometry< Real, Index > const &rhs)fp::Geometry< Real, Index >friend + operator+=(Geometry< Real, Index > &lhs, Geometry< Real, Index > const &rhs)fp::Geometry< Real, Index >friend operator+=(Node< Real, Index > const &node)fp::Geometry< Real, Index >inline - operator-fp::Geometry< Real, Index >friend - operator-=fp::Geometry< Real, Index >friend + operator-(Geometry< Real, Index > const &lhs, Geometry< Real, Index > const &rhs)fp::Geometry< Real, Index >friend + operator-=(Geometry< Real, Index > &lhs, Geometry< Real, Index > const &rhs)fp::Geometry< Real, Index >friend unit_bending_energyfp::Geometry< Real, Index > volumefp::Geometry< Real, Index >
    @@ -121,7 +128,7 @@ diff --git a/docs/structfp_1_1_geometry.html b/docs/structfp_1_1_geometry.html index 65df192..638e92a 100644 --- a/docs/structfp_1_1_geometry.html +++ b/docs/structfp_1_1_geometry.html @@ -3,16 +3,18 @@ - + flippy: fp::Geometry< Real, Index > Struct Template Reference + - + + @@ -43,19 +45,24 @@
    - + + @@ -73,7 +80,7 @@
    @@ -109,13 +116,18 @@

    A helper struct. Used by the triangulation class to pass data around in one convenient package. - More...

    + More...

    #include <Triangulation.hpp>

    Collaboration diagram for fp::Geometry< Real, Index >:
    Collaboration graph
    + + + + +
    [legend]
    - + - + - +

    @@ -124,13 +136,13 @@  

    Geometry ()
     Default constructor, that zero initiates all the data members.
     
     Geometry (Node< Real, Index > const &node)
     Geometry (Node< Real, Index > const &node)
     Construct from a node.
     
     Geometry (Real area_inp, Real volume_inp, Real unit_bending_energy_inp)
     Geometry (Real area_inp, Real volume_inp, Real unit_bending_energy_inp)
     Direct Constructor.
     
    void operator+= (Node< Real, Index > const &node)
    void operator+= (Node< Real, Index > const &node)
     Overloaded addition and assignment operator.
     
    @@ -144,21 +156,21 @@ Real  - +
    volume
     Volume of the patch. Sum over the associated volumes of individual nodes that comprise the patch. (Compare to Node::volume).
     
    Real unit_bending_energy
    Real unit_bending_energy
     
    - + - + - + - +

    Friends

    Geometry< Real, Index > operator+ (Geometry< Real, Index > const &lhs, Geometry< Real, Index > const &rhs)
    Geometry< Real, Index > operator+ (Geometry< Real, Index > const &lhs, Geometry< Real, Index > const &rhs)
     Overloaded addition operator.
     
    Geometry< Real, Index > operator- (Geometry< Real, Index > const &lhs, Geometry< Real, Index > const &rhs)
    Geometry< Real, Index > operator- (Geometry< Real, Index > const &lhs, Geometry< Real, Index > const &rhs)
     Overloaded subtraction operator.
     
    void operator+= (Geometry< Real, Index > &lhs, Geometry< Real, Index > const &rhs)
    void operator+= (Geometry< Real, Index > &lhs, Geometry< Real, Index > const &rhs)
     Overloaded addition and assignment operator.
     
    void operator-= (Geometry< Real, Index > &lhs, Geometry< Real, Index > const &rhs)
    void operator-= (Geometry< Real, Index > &lhs, Geometry< Real, Index > const &rhs)
     Overloaded subtraction and assignment operator.
     
    @@ -168,8 +180,8 @@

    Geometry is a struct that contains the usually needed geometric data in a triangulation. This struct can hold such data for a single node, a collection of nodes, or the entire triangulation. In the abstract, the fp::Geometry struct contains geometric data associated with some surface patch. This is useful since we often need to aggregate information for a node and its neighboring nodes.

    The Data members of this struct are public, and thus, it does not guarantee the correctness or consistency of the data it holds, since it can be changed externally. The geometry struct also provides overloaded arithmetic operators, that are usually useful when aggregating geometric data from single nodes over a larger patch of the surface.

    Template Parameters
    - - + +
    Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
    Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
    Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
    Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
    @@ -188,8 +200,7 @@

    fp::Geometry< Real, Index >::Geometry ( - Node< Real, Index > const &  - node) + Node< Real, Index > const & node) @@ -224,25 +235,17 @@

    fp::Geometry< Real, Index >::Geometry ( - Real  - area_inp, + Real area_inp, - Real  - volume_inp, + Real volume_inp, - Real  - unit_bending_energy_inp  - - - - ) - + Real unit_bending_energy_inp ) @@ -277,10 +280,9 @@

    - + - - +
    void fp::Geometry< Real, Index >::operator+= void fp::Geometry< Real, Index >::operator+= (Node< Real, Index > constnode)Node< Real, Index > const & node)
    @@ -314,21 +316,14 @@

    - + - - + - - - - - - - +
    Geometry< Real, Index > operator+ Geometry< Real, Index > operator+ (Geometry< Real, Index > constlhs, Geometry< Real, Index > const & lhs,
    Geometry< Real, Index > constrhs 
    )Geometry< Real, Index > const & rhs )
    @@ -341,12 +336,15 @@

    ++
    //Example
    -
    +
    -
    res.area == lhs.area + rhs.area; // true
    -
    res.volume == lhs.volume + rhs.volume; // true
    -
    res.unit_bending_energy == lhs.unit_bending_energy + rhs.unit_bending_energy; // true
    -
    A helper struct; keeps track of bond flips.
    Definition Triangulation.hpp:84
    +
    res.area == lhs.area + rhs.area; // true
    +
    res.volume == lhs.volume + rhs.volume; // true
    +
    res.unit_bending_energy == lhs.unit_bending_energy + rhs.unit_bending_energy; // true
    +
    A helper struct. Used by the triangulation class to pass data around in one convenient package.
    Definition Triangulation.hpp:138
    +
    Real volume
    Volume of the patch. Sum over the associated volumes of individual nodes that comprise the patch....
    Definition Triangulation.hpp:140
    +
    Real area
    Area of the patch. Sum over the associated areas of individual nodes that comprise the patch....
    Definition Triangulation.hpp:139
    +
    Real unit_bending_energy
    Definition Triangulation.hpp:141

    Parameters
    @@ -370,21 +368,14 @@

    lhs
    - + - - + - - - - - - - +
    Geometry< Real, Index > operator- Geometry< Real, Index > operator- (Geometry< Real, Index > constlhs, Geometry< Real, Index > const & lhs,
    Geometry< Real, Index > constrhs 
    )Geometry< Real, Index > const & rhs )
    @@ -397,11 +388,11 @@

    ++
    //Example
    -
    +
    -
    res.area == lhs.area - rhs.area; // true
    -
    res.volume == lhs.volume - rhs.volume; // true
    -
    res.unit_bending_energy == lhs.unit_bending_energy - rhs.unit_bending_energy; // true
    +
    res.area == lhs.area - rhs.area; // true
    +
    res.volume == lhs.volume - rhs.volume; // true
    +
    res.unit_bending_energy == lhs.unit_bending_energy - rhs.unit_bending_energy; // true

    Parameters
    @@ -425,21 +416,14 @@

    lhs
    - + - - + - - - - - - - +
    void operator+= void operator+= (Geometry< Real, Index > & lhs, Geometry< Real, Index > & lhs,
    Geometry< Real, Index > constrhs 
    )Geometry< Real, Index > const & rhs )
    @@ -458,7 +442,7 @@

    See also
    Geometry<Real, Index> operator+(Geometry<Real, Index> const& lhs, Geometry<Real, Index> const& rhs)

    +
    See also
    Geometry<Real, Index> operator+(Geometry<Real, Index> const& lhs, Geometry<Real, Index> const& rhs)
    @@ -474,21 +458,14 @@

    - + - - + - - - - - - - +
    void operator-= void operator-= (Geometry< Real, Index > & lhs, Geometry< Real, Index > & lhs,
    Geometry< Real, Index > constrhs 
    )Geometry< Real, Index > const & rhs )
    @@ -507,7 +484,7 @@

    See also
    Geometry<Real, Index> operator-(Geometry<Real, Index> const& lhs, Geometry<Real, Index> const& rhs)

+
See also
Geometry<Real, Index> operator-(Geometry<Real, Index> const& lhs, Geometry<Real, Index> const& rhs)
@@ -538,7 +515,7 @@

    - +
diff --git a/docs/structfp_1_1_geometry__coll__graph.dot b/docs/structfp_1_1_geometry__coll__graph.dot deleted file mode 100644 index 6fbf8c9..0000000 --- a/docs/structfp_1_1_geometry__coll__graph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::Geometry< Real, Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::Geometry\< Real,\l Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="A helper struct. Used by the triangulation class to pass data around in one convenient package."]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" area\nunit_bending_energy\nvolume",fontcolor="grey" ]; - Node2 [id="Node000002",label="Real",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1_geometry__coll__graph.map b/docs/structfp_1_1_geometry__coll__graph.map new file mode 100644 index 0000000..c1ce57b --- /dev/null +++ b/docs/structfp_1_1_geometry__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_geometry__coll__graph.md5 b/docs/structfp_1_1_geometry__coll__graph.md5 new file mode 100644 index 0000000..ec91640 --- /dev/null +++ b/docs/structfp_1_1_geometry__coll__graph.md5 @@ -0,0 +1 @@ +21a0b66bde46417811e3eddda1f0b77f \ No newline at end of file diff --git a/docs/structfp_1_1_geometry__coll__graph.png b/docs/structfp_1_1_geometry__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9459f7608d6bdd068bb6ea6a9adf885c491cfe6b GIT binary patch literal 7147 zcmZWu1yodRw?0FIG$>sVEg&#}2q=wo4&5!t zefjQP|NZ}a7X#;AYZmX>=iU2x_OqW8rlp}mLPSplK@bV@zT!i0?FPS}3Gl$*2hYBr zfeW66s){0XdG(Xo^eG;K7&4KHayp)=n^Sh4)Q{`&cP{g{K2}g9#+HVdhq1}3y)q{h zf=@A-X?^1$ctx-f8Q3Ex9WDf`Fuj`%ZPxV>W%!Ik%kqG9c%l<1Vq{eDQFSA^WNd z1zVal4a^4lec@LX*sP2GDoFV^B=6wCW3pEZzEKyC_Kd#=oRf8^PD$RR9tv98H!CZ) zICyx~1)Dy{TXVhlX4lq9Nj+>yJ=%tb5w*2qkt{OI z-QC@r_6?1VjN47e%*1#K_)4m&c`6x5h?Ro_udJ+W*)FIxFf)^NW4eh!TU%Q_k(ZnM zWlhaJoUA1eRc&pGv*T?tw9!-F#G&UVfOu)gOb0<~;*xHkMIDoV-RoNdVd?rRc;*LNL8W)DYAI}>>gORc&o!BOB_q9a=$ zX-b8>#Ksp#)!fHl+eMZ;jPkX2c4B{S7`lD?_ABL_)?6g0kIrZ&1$A{26R)M~&V6$W z3qjUBiE}%1ZTeOA*QGBG9z`-s(c|Lco*Yd)&(gW=vh@A>14^2Kg?Ot4bd>rToQ{s} z&6_tZU;X~wf&vVJ z!C)E@X>O!zwKWzkfiNx}9&G4*O|Mzr#YOOFa{|8)0sdRi=g5&!%o)1(d|I*D|AL&F z8V3?{T_kXIb$#!4hCEh54iK4|ny$Es>*(oOE_S^=Ia!F=okaDUpX|(e&c4Jar=)zP zXXq?DAP%Y3^oCW=-t zyZa!PO`)Fk=D_0>*9dY3E+j$O%edhGw`hm4-}|C{Zk$lj#%lay35^ur_b4E0)_o<| zg3i7#63?C7m%~?w(^fqY4dQ$cRa9Bi5NZ?jdFlQPa z<*N9QOO1JrftzrmHx0C7FIrG;WJg=HlYUQP%2NqDhP`Y4~H-dD}@#dM!Bi zK1~k1EM#|yv9Wq-M!SbD;5#A3TR!C^L*4Vc^OZFX+S)DaTlQ7$=8IUzexj)PCO*;hdl$mE$2HVV#6c-iZU>sV%G=fT*}0#7|3>pZbropozy7Uq1> zbufmp^ejG-`19SAMTK-3mc*IIWp9g>Y$&gR?<@=nu^`6S?xl|%#uQX+$4xQcDoFjQ z)0MXMw#`@6{+)vU#YO)tG)EEg7JpKiumJDlck|UqCh-}J#nD4vfdg=)k#Kp(Ak>FutXIe!{ z-9iq;Lqc%m8Bq(y#KZ)9(bbC<x@YgODdsXN&d45y?f%+^Z-y?tZgSkEk_KZG z3t#R2{P}Z`ot@oR@My$`jayiR&3FQg^_hzXe~u+;%_O7EAZ{o&x z4Kng%G$La_QbQg&U`NU<$>rc{=yrCnS~G0_VsR*cd9?E|37&s=oUZSDc3`*N-rg=< z)LWs8o|a5R3keBH(reaGe(Dt+7#Nt`oCt~z8~^Ry+w*6F-q6ymZi%(YL?#iHZv5oQ z_@_Bn#gfs04up(}q2ZtBDQbzmh=4S~BNfOG%B`!b>!2mZW9jn}#Y|=hCStKt%aUNu z5mCw&odZXe2All2a$;zN%y(KtQdz=TE{t!Uat?P1KZ%_-8Ze{ElW^1y$vBycMY<(;kT&&FWEl$_=`AQOezrd{pC=p^L~BX>0{;sgrjf?~ zFYeiNWZC_oR)I(qGmN$L%NP6fZYxTy;|$U&11aVfV`SX2p=zwMFRkUImC&hb95vxA z8+wdIQTw1=7yXPov9eOcLyr6i)i)zdAN3W)3j2W@h;}h>P$(HCTS#Rwi)>n6S{jZK zbcb4=|J=hZRIj}I)M35q;dH>%14n$=ogZCYT2LS>!7oUX*7CBNT9_Tl`MId*qOI^r z#cdIKb-X|kXp@i0CbH=+Xy(}~D=RvEr#28X1&+D&op)u15qb6X;`Fj%$~j&>%Rf?% zb#4zgL#ZBC0b-a4n2}b#&L0kqRDHk*?pU?<4l=*#E2P%%zB?91FFy&7Lj7fjya2Y{ zE)EtT=}}ve;Y5p%E|mBi#QjG8oP8p0v+=ys4~lFh=YVWF36XvrDHwXjTy&xh&|#ZQ zjx#5TIS+eky|EmEz|c6g3sJpDVvX{%v|G6Go0c>a*};!Fcbf_uDX&I5_Ir~oU5r=^ zf_sRkZN;(@#6)B#<`bmtfrw^3}*BMR|Xc9#KX<~_I=@qzdz6x z;bByq^sqpbG_!1Rm5}?8DSPFO2v!2?)cvyF>RocEtSYKz1P{{~D0pMo6M@!;0*xFb z21b&d3P*#P$~v;P%GXiQW56Zi4uXSAi9z=M?;b+}2?+_jFepu!(QFCXM{md1P62qvK zjPm0M3`aknpsu*JJ|3=~_iz=aBaE&VMjr{HbC;b&l#%nSCT;cz%mkffgPXW9EO15$ zP5Jxh5F3=Sa_H^DjQ^ETwrFs54@a(RJ~iWLZ|}_1!FpqaJ|a9^{80e@s&JD@zz4x2 zL5y$ntyUE!r8M)%rgqwig3xO<0eTmFcSqU1L#-Cd# zEZm;G0{mgliW5h;g{e06=GR5_2M_4qzkk0rdcHmKeXIznp>Z_4e#nMT#$0*&tZNyR zH>J|A=D%u-co4`|t!_cp`tI^SSv+dz2%nD-Pt$Pd7qv@mhmjDLi}Uy*RjPTy=V7Y* zw3aLd!)xu)lO`%+K;6jJ8Tr$-2)|;@y&rc#5ZLV8rvNoN*fkZ8u`rZ97Dl77PHe;xOq z>^n83v#f$lU_T=SkIdVScpqh1oTUdGp7p8rUvZvnEn-N_TOmZBKT(ObKAXv3dnmwK*$dv6%gmB3{P3C;E0y1 z;49R$@AaUhrA=b-Oke0+P-zM=s6B z!z0m0+w)H?%M`>4-WYe>-L=&%n{XzV(3+b}ZM)tu1xrIRIyX0GW(uQlH#Fg zN6bv@ctk13w<2P2o%KHr8kgkf*R>)po6j0FZ7YplsOX5*R1F;aE7b%t{hV^BQPke( zp}i)OqJ|KD`h%;y(&&P#Q9kDvb+wHTAt7OUllLM0HC9kOllGd1xgRor7o~^s)%;(1 zZY%JMg6~9<@Ly{0YTlK9BeivmLEgt?Qh4A`ZuiH>_R0On)cT*2u|HnyRXXSY?oiiU zdBQt8T%gBq9_hCnX?Fh@jR=^}iIH}#%XnGkdCe0{Eyi^CtIN+OYv(q|#iKglt2503 zdT6Z3K!7hhukBu5VDVqNtmI!+7Ek+a6O^H6Ajs(*n8yDB-!I~=To*SOt-WKg|C?E(K z=e)nHzPP+RpO<7JZ)RrpVSYe?S33J4UOe=qZcn_yOmHY z`1JPnZdFG!BCtZ_UyhpikPs5tfoV96FtIL5@r zlK*&rw@1=RC}juD@SK&Gw@4{Y|4fa3{%B{%_64(@aYOuKf52a1A|j$vk8P88@7}Sp zvO*2+oAUblv>F-GQQ_f4!J(lGAgtH&SuMK@oi3{b?2UWhd7z(G_1W22pm%z%<|P?0 zT3w^zQ`FKTx3{;SU0!}YIcaod4}gJLi;G&TU^w~Sb7or0TIV?|>C;6j0kqbWCt;sI zbKNm%q*YQ<8f)|tUhdC`2@b{q0t#qr1#+BJF&C_=sw&XH_3JCQ)W0WIm%UimeV33h z2j=OPy`>((XOm)%leH8*N&KBz3ZZ5~DFSu_@Iw7EELmfDG#YI&UT#f5M)rJ{PFGiV z{zr;%S8s2}_XM8Jv&kh_1Re=}@R?qTVN{afYtl z`{^I2kbA!!O6H>OO}At#MUdaP@p}8~AJWs)Qvv!Y&p(?r+9oE^9@AdSdum!s0b1gdiJ8BzySna!%v=MlcI>O4 z1aM5Qa&^9+aoPU6e zK$+8o=w$tiYak>(pnR}HA#v!Jy_XF)>QR!6K&{#l{V<<2g0wH^wWjA_b09NB`+`lTYo7f-T%? zgP`_NEU3`yH8I#P=~^N z>*?ufj5H`x-kxp}bl=eLvJ#qX@}UU{3As^2K}R>fCM|O`W=TLy9Q@0+{qMz}EBEFq z3}CFx&CP)d<>KY-$ba-H_WgSzWZce98=2+)a<3@<^GA;!y-i6W%;ZA?s|a`~R$HG^ zrF=##8V5hBw|#kB0K{78-kvLHfeL&{xA^&E;@U~m;^13bTRVGuLYl|xqhuh(qNDqV zhqxF zd34RrPj=mpNuKtnPvvU50*Z2+s3w{5-6zS;&Mrjv(6)_N*nsZdLL1cF91!o%R95^b zF1Nm(UK!AQNv+EQp0A&uQ!xgE!T0d+F#75{o(d<~nr?~!34>(8A)qSc|X?=$0}^d z&`}Jb;J|N!LYND32bL275s^@aby3HM4<91(Du|slCdb8n4~KRdV6`L#E%#> z0yf*(*=fm?3xc5W@o}y@cN_;+pF6J&ar<6g9Fum;t%)zGW$WDD&A2?r=hR4*ee#5k z*?WcUN3tL`FMdo(thF}H8Y}9QyFt}bIkz6JP(KUHlu&_ z^nk660)N?7(wDFj{IsvqZ}yk+K3ogY&QWFqRFDzy7h&Q#7sBDhEagr8_U+r{ucT#r zlHI|CRKJI2J!bquuMYo;slp>7fPXq6a^G4gB{nGupNxzwBF!ME)ojc62tcE|@%#4& z08eeBqck8Or{6R_)pN_sPj??8sg#^t&nUoY%1)X~8K6}o?^f^bif|4N3&37GM@PyA2K3QP60d<%Tg}Bh2~epV z%@_tsqHStwijDGLbZ zL`Jqh_upr5oT|TG^Lz#kNb8QY1tT+a^v;em;L$lC=f z(UJc-?1I~!^Ok6F0mpZc{`KfgaARZ1_tj>%bZOk-eY;YaX+8*f}NDjjc@kh5LBzV6I2^nc9Z d`}k)8W(s$0B()j&z}q_rsidJ;EN}MezW@QNkbeLG literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_neighbors-members.html b/docs/structfp_1_1_neighbors-members.html index b7a2301..794466f 100644 --- a/docs/structfp_1_1_neighbors-members.html +++ b/docs/structfp_1_1_neighbors-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -114,7 +121,7 @@ diff --git a/docs/structfp_1_1_neighbors.html b/docs/structfp_1_1_neighbors.html index 8b128f7..727e623 100644 --- a/docs/structfp_1_1_neighbors.html +++ b/docs/structfp_1_1_neighbors.html @@ -3,16 +3,18 @@ - + flippy: fp::Neighbors< Index > Struct Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -112,13 +119,18 @@ Collaboration diagram for fp::Neighbors< Index >:
Collaboration graph
+ + + + +
[legend]
- + - +

Static Public Member Functions

static Index plus_one (Index j, Index ring_size)
static Index plus_one (Index j, Index ring_size)
 
static Index minus_one (Index j, Index ring_size)
static Index minus_one (Index j, Index ring_size)
 
@@ -189,6 +194,21 @@

+ + + + + + + + + + + + + + + @@ -205,21 +225,14 @@

@@ -137,7 +149,7 @@ struct fp::Neighbors< Index >

A helper struct; makes addition and subtraction on a ring easier. Each fp::Node stores its next neighbors in a vector Node.nn_ids, where the adjacent members in a vector are also next neighbors of each other. This struct provides a safe way to always access the next or previous member of the nn_ids vector, even if a wraparound is necessary.

See also
fp::Node.
Template Parameters
- +
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
@@ -154,21 +166,14 @@

- + - - + - - - - - - - +
static Index fp::Neighbors< Index >::plus_one static Index fp::Neighbors< Index >::plus_one (Index j, Index j,
Index ring_size 
)Index ring_size )

- + - - + - - - - - - - +
static Index fp::Neighbors< Index >::minus_one static Index fp::Neighbors< Index >::minus_one (Index j, Index j,
Index ring_size 
)Index ring_size )
@@ -248,7 +261,7 @@

diff --git a/docs/structfp_1_1_neighbors__coll__graph.dot b/docs/structfp_1_1_neighbors__coll__graph.dot deleted file mode 100644 index bf9d85b..0000000 --- a/docs/structfp_1_1_neighbors__coll__graph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::Neighbors< Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::Neighbors\< Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" j_m_1\nj_p_1",fontcolor="grey" ]; - Node2 [id="Node000002",label="Index",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1_neighbors__coll__graph.map b/docs/structfp_1_1_neighbors__coll__graph.map new file mode 100644 index 0000000..89c2098 --- /dev/null +++ b/docs/structfp_1_1_neighbors__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_neighbors__coll__graph.md5 b/docs/structfp_1_1_neighbors__coll__graph.md5 new file mode 100644 index 0000000..9b5694a --- /dev/null +++ b/docs/structfp_1_1_neighbors__coll__graph.md5 @@ -0,0 +1 @@ +d3cab474d0e8211772e1b4b7b9825cd0 \ No newline at end of file diff --git a/docs/structfp_1_1_neighbors__coll__graph.png b/docs/structfp_1_1_neighbors__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1e762ec4c0cff0bf4d3a84f9c9fc29482d68e3d9 GIT binary patch literal 5046 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Triangulation::\lupdate_bulk_node_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d5763865ac706a2e800ed306d070d68",tooltip="Update the geometric quantities associated with the given node."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Triangulation::\lmake_global_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a1afce8afd92f1b88fb15ce7d9cb31edd",tooltip="Initiates the global geometry of the triangulation."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Triangulation::\lupdate_diamond_geometry",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a762c6430c00d719a8ea5a4a3e89715a8",tooltip="Calculates and updates the geometric quantities of the diamond configuration of nodes associated with..."]; - Node4 -> Node5 [id="edge4_Node000004_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Triangulation::\lunflip_bond",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_triangulation.html#a5d1ec431a7a0040d7963e4297a80faaa",tooltip="Un-flip a bond that was just flipped."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#a8de725c1ae28fd44d096ffb82467b598",tooltip="Attempt a flip Monte Carlo Step."]; - Node5 -> Node7 [id="edge6_Node000005_Node000007",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::MonteCarloUpdater\l::flip_MC_updater",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$classfp_1_1_monte_carlo_updater.html#acf28ad26646a0e87dce57eed5ca5047c",tooltip="Attempt a flip Monte Carlo Step."]; -} diff --git a/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.map b/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.map new file mode 100644 index 0000000..d98f302 --- /dev/null +++ b/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.md5 b/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.md5 new file mode 100644 index 0000000..7f04918 --- /dev/null +++ b/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.md5 @@ -0,0 +1 @@ +5bd390400559d7710cbeff1aba5b4607 \ No newline at end of file diff --git a/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.png b/docs/structfp_1_1_neighbors_a59501864ac7f34bd676aa97d9faf68cc_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..d69255c14cbab6aba685d8fc2e850818cbecbc34 GIT binary patch literal 25794 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 Uw*IsO|0oHiughd4ZL;$HCx>^?O#lD@ literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_node-members.html b/docs/structfp_1_1_node-members.html index 6114759..123dc2f 100644 --- a/docs/structfp_1_1_node-members.html +++ b/docs/structfp_1_1_node-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@

@@ -113,7 +120,7 @@ idfp::Node< Real, Index > nn_distancesfp::Node< Real, Index > nn_idsfp::Node< Real, Index > - operator<<fp::Node< Real, Index >friend + operator<<(std::ostream &os, Node< Real, Index > const &node)fp::Node< Real, Index >friend operator==(Node< Real, Index > const &other_node) const =defaultfp::Node< Real, Index > pop_nn(Index to_pop_nn_id)fp::Node< Real, Index >inline posfp::Node< Real, Index > @@ -125,7 +132,7 @@ diff --git a/docs/structfp_1_1_node.html b/docs/structfp_1_1_node.html index 37c41c8..91285f3 100644 --- a/docs/structfp_1_1_node.html +++ b/docs/structfp_1_1_node.html @@ -3,16 +3,18 @@ - + flippy: fp::Node< Real, Index > Struct Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,28 +116,41 @@

A data structure containing all geometric and topological information associated with a node. - More...

+ More...

#include <Nodes.hpp>

Collaboration diagram for fp::Node< Real, Index >:
Collaboration graph
+ + + + + + + + + + + + +
[legend]
- + - + - + - + - +

Public Member Functions

void pop_nn (Index to_pop_nn_id)
void pop_nn (Index to_pop_nn_id)
 Find and deletes the element with the id to_pop_nn_id in the nn_id vector.
 
auto find_nns_loc_pointer (Index nn_id)
auto find_nns_loc_pointer (Index nn_id)
 
void emplace_nn_id (Index to_emplace_nn_id, vec3< Real > const &to_emplace_nn_pos, Index loc_idx)
void emplace_nn_id (Index to_emplace_nn_id, vec3< Real > const &to_emplace_nn_pos, Index loc_idx)
 
vec3< Real > constget_distance_vector_to (Index nn_id) const
vec3< Real > const & get_distance_vector_to (Index nn_id) const
 This function can provide the stored distance vector to the next neighbor.
 
bool operator== (Node< Real, Index > const &other_node) const =default
bool operator== (Node< Real, Index > const &other_node) const =default
 Default equality operator.
 
@@ -140,23 +160,23 @@ Index  - + - + - + - + - +
id
 Global id of the Node, which is a number between 0 and max_number_of_nodes - 1.
 
Real area
Real area
 Voronoi area associated with the node.
 
Real volume
Real volume
 If the node is part of a closed surface triangulation, then the volume contains the volume of the tetrahedron connected to each voronoi cell sub-triangle and the center of the lab coordinate system as defined in Gueguen et al. 2017.
 
Real unit_bending_energy
Real unit_bending_energy
 unit_bending_energy corresponds to the Helfrich bending energy with bending rigidity 1 and gaussian bending stiffness 0.
 
vec3< Real > pos
 Position of the node in the lab frame.
 
vec3< Real > curvature_vec
vec3< Real > curvature_vec
 Curvature vector of the node.
 
std::vector< Index > nn_ids
std::vector< Index > nn_ids
 A vector containing the global ids of the current node's next neighbors.
 
@@ -170,17 +190,17 @@
- +

Friends

std::ostream & operator<< (std::ostream &os, Node< Real, Index > const &node)
std::ostream & operator<< (std::ostream &os, Node< Real, Index > const &node)
 Streaming operator that can print formatted output to standard out with all Node data fields.
 

Detailed Description

template<floating_point_number Real, indexing_number Index>
struct fp::Node< Real, Index >

A data structure containing all geometric and topological information associated with a node.

-

This is a DUMB DATA STRUCTURE, meaning that it is not responsible for the coherence of the data it contains. For performance reasons, methods associated with Node struct will never check if the Node::curvature is the norm of the Node::curvature_vector or if the Node::nn_ids and Node::nn_distances are in the correct order. It is the responsibility of higher-order structures like Nodes and Triangulation to check that correct data is stored and updated correctly. However, it does check the data for consistency. It will match the length of Node::nn_ids and Node::nn_distances and pop and add both of them together.

Template Parameters
+

This is a DUMB DATA STRUCTURE, meaning that it is not responsible for the coherence of the data it contains. For performance reasons, methods associated with Node struct will never check if the Node::curvature is the norm of the Node::curvature_vector or if the Node::nn_ids and Node::nn_distances are in the correct order. It is the responsibility of higher-order structures like Nodes and Triangulation to check that correct data is stored and updated correctly. However, it does check the data for consistency. It will match the length of Node::nn_ids and Node::nn_distances and pop and add both of them together.

Template Parameters
- - + +
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
@@ -197,10 +217,9 @@

- + - - +
void fp::Node< Real, Index >::pop_nn void fp::Node< Real, Index >::pop_nn (Index to_pop_nn_id)Index to_pop_nn_id)
@@ -218,13 +237,18 @@

See also
Node::nn_ids

+
See also
Node::nn_ids
Note
this will lead to resizing of the vector, which can be expensive!
-
Warning
If the provided next neighbor id is not part of the Node::nn_ids, this function will fail silently. It will not delete anything and won't throw any errors or warnings;
+
Warning
If the provided next neighbor id is not part of the Node::nn_ids, this function will fail silently. It will not delete anything and won't throw any errors or warnings;
Here is the call graph for this function:
+ + + + +
@@ -241,10 +265,9 @@

- + - - +
auto fp::Node< Real, Index >::find_nns_loc_pointer auto fp::Node< Real, Index >::find_nns_loc_pointer (Index nn_id)Index nn_id)
@@ -254,22 +277,26 @@

-

Given the global id of the next neighbor, this function can be used to locate it in the Node::nn_ids vector.

-

This function is just a convenient wrapper around the std::find function.

std::find(nn_ids.begin(), nn_ids.end(), to_pop_nn_id);
-
A helper struct; keeps track of bond flips.
Definition Triangulation.hpp:84
-
std::vector< Index > nn_ids
A vector containing the global ids of the current node's next neighbors.
Definition Nodes.hpp:93
+

Given the global id of the next neighbor, this function can be used to locate it in the Node::nn_ids vector.

+

This function is just a convenient wrapper around the std::find function.

std::find(nn_ids.begin(), nn_ids.end(), to_pop_nn_id);
+
std::vector< Index > nn_ids
A vector containing the global ids of the current node's next neighbors.
Definition Nodes.hpp:93
Parameters
nn_idGlobal id of the next neighbor Node, which is a number between 0 and max_number_of_nodes - 1.
-
Returns
if nn_id is contained in Node::nn_ids then the pointer to the position of that id in the nn_ids vector will be returned. Otherwise nn_ids.end().
-
Warning
This function is not responsible for graceful handling of nn_id's that are not found in the Node::nn_ids vector. If the nn_id is not contained in Node::nn_ids then the nn_ids.end() iterator will be returned. It is up to the user to perform the necessary checks to avoid undefined behavior that might result from trying to delete uninitiated memory.
+
Returns
if nn_id is contained in Node::nn_ids then the pointer to the position of that id in the nn_ids vector will be returned. Otherwise nn_ids.end().
+
Warning
This function is not responsible for graceful handling of nn_id's that are not found in the Node::nn_ids vector. If the nn_id is not contained in Node::nn_ids then the nn_ids.end() iterator will be returned. It is up to the user to perform the necessary checks to avoid undefined behavior that might result from trying to delete uninitiated memory.
Here is the caller graph for this function:
+ + + + +
@@ -286,27 +313,19 @@

- + - - + - - + - - - - - - - +
void fp::Node< Real, Index >::emplace_nn_id void fp::Node< Real, Index >::emplace_nn_id (Index to_emplace_nn_id, Index to_emplace_nn_id,
vec3< Real > constto_emplace_nn_pos, vec3< Real > const & to_emplace_nn_pos,
Index loc_idx 
)Index loc_idx )
@@ -318,9 +337,9 @@

Parameters
- - - + + +
to_emplace_nn_idGlobal id of the next neighbor Node, which is a number between 0 and max_number_of_nodes - 1. This id is supposed to be added to the Node::nn_ids vector of this node.
to_emplace_nn_posconst reference to the 3 dimensional position vector (type vec3<Real>) containing the position of the new next neighbour. This input is used to calculate the correct distance between this node and the new next neighbor, which will then be added to the Node::nn_distances vector.
loc_idxLocal index in the Node::nn_ids vector, a number between 0 and Node::nn_ids.size() - 1.
to_emplace_nn_idGlobal id of the next neighbor Node, which is a number between 0 and max_number_of_nodes - 1. This id is supposed to be added to the Node::nn_ids vector of this node.
to_emplace_nn_posconst reference to the 3 dimensional position vector (type vec3<Real>) containing the position of the new next neighbour. This input is used to calculate the correct distance between this node and the new next neighbor, which will then be added to the Node::nn_distances vector.
loc_idxLocal index in the Node::nn_ids vector, a number between 0 and Node::nn_ids.size() - 1.

@@ -342,10 +361,9 @@

- + - - +
vec3< Real > const & fp::Node< Real, Index >::get_distance_vector_to vec3< Real > const & fp::Node< Real, Index >::get_distance_vector_to (Index nn_id)Index nn_id) const
@@ -359,11 +377,11 @@

Parameters
- +
nn_idGlobal id of the next neighbor Node, which is a number between 0 and max_number_of_nodes - 1..
nn_idGlobal id of the next neighbor Node, which is a number between 0 and max_number_of_nodes - 1. .

-
Returns
returns the distance currently stored in the Node::nn_distances vector for the requested next neighbor. If the provided nn_id can not be found in the Node::nn_ids vector, then the function writes an error message to standard error output and terminates the program with exit code 12.
+
Returns
returns the distance currently stored in the Node::nn_distances vector for the requested next neighbor. If the provided nn_id can not be found in the Node::nn_ids vector, then the function writes an error message to standard error output and terminates the program with exit code 12.
Note
Calling this function with a wrong argument will cause the termination of the program.
@@ -382,8 +400,7 @@

bool fp::Node< Real, Index >::operator== ( - Node< Real, Index > const &  - other_node) + Node< Real, Index > const & other_node) const @@ -418,21 +435,14 @@

- + - - + - - - - - - - +
std::ostream & operator<< std::ostream & operator<< (std::ostream & os, std::ostream & os,
Node< Real, Index > constnode 
)Node< Real, Index > const & node )
@@ -470,14 +480,14 @@

Voronoi area associated with the node.

-

The Voronoi area is the sum of (mixed) Voronoi areas inside the triangles, incident to the node. Definition follows Gueguen et al. 2017.

+

The Voronoi area is the sum of (mixed) Voronoi areas inside the triangles, incident to the node. Definition follows Gueguen et al. 2017.

\[ A_{i} = \sum_{j} A'_{ij}. \]

See also
Triangulation::mixed_area See Figure tr1. C in Triangulation.
-Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
+Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)

@@ -496,12 +506,12 @@

If the node is part of a closed surface triangulation, then the volume contains the volume of the tetrahedron connected to each voronoi cell sub-triangle and the center of the lab coordinate system as defined in Gueguen et al. 2017.

-

This means that the volume of an individual node does not have a proper physical interpretation. Only the sum of all node volumes, which is given by the triangulation is interpretable as a physical volume of an object. The definition follows Gueguen et al. 2017.

+

This means that the volume of an individual node does not have a proper physical interpretation. Only the sum of all node volumes, which is given by the triangulation is interpretable as a physical volume of an object. The definition follows Gueguen et al. 2017.

\[ V_{ij} = A_{ij} \vec{x}_{i}\cdot \frac{\vec{n}_{ij,j+1}}{\| \vec{n}_{ij,j+1} \|}. \]

-

See Figure tr1. D in Triangulation.

See also
Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
+

See Figure tr1. D in Triangulation.

See also
Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
@@ -525,12 +535,12 @@

+

where \( H_{node} \) is the mean curvature of the node given by:

\[ H_{node}^2 = \frac{\vec{K}_{node}}{2A_{node}} \cdot \frac{\vec{K}_{node}}{2A_{node}} \]

-

, with \( \vec{K} \) denoting the Node::curvature_vector.

See also
Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
+

, with \( \vec{K} \) denoting the Node::curvature_vector.

See also
Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
@@ -549,12 +559,12 @@

Curvature vector of the node.

-

The definition of the curvature vector follows Meyer et al. 2003.

+

The definition of the curvature vector follows Meyer et al. 2003.

\[ \vec{K}_i = \frac{1}{2A_i}\sum_{j(i)} \left( \cot\left(\alpha_{ij}^{j+1}\right) + \cot\left(\alpha_{ij}^{j-1}\right) \right)\vec{\ell}_{ij} \]

-

See Figure tr1. B in Triangulation.

See also
Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
+

See Figure tr1. B in Triangulation.

See also
Node::curvature_vec Triangulation::update_bulk_node_geometry(Index)
@@ -586,7 +596,7 @@

    - +
diff --git a/docs/structfp_1_1_node__coll__graph.dot b/docs/structfp_1_1_node__coll__graph.dot deleted file mode 100644 index dbf7fa7..0000000 --- a/docs/structfp_1_1_node__coll__graph.dot +++ /dev/null @@ -1,18 +0,0 @@ -digraph "fp::Node< Real, Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::Node\< Real, Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="A data structure containing all geometric and topological information associated with a node."]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" id",fontcolor="grey" ]; - Node2 [id="Node000002",label="Index",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node3 -> Node1 [id="edge2_Node000001_Node000003",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" area\nunit_bending_energy\nvolume",fontcolor="grey" ]; - Node3 [id="Node000003",label="Real",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node4 -> Node1 [id="edge3_Node000001_Node000004",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" curvature_vec\npos",fontcolor="grey" ]; - Node4 [id="Node000004",label="vec3\< Real \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node5 -> Node1 [id="edge4_Node000001_Node000005",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" nn_ids\nverlet_list",fontcolor="grey" ]; - Node5 [id="Node000005",label="vector\< Index \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node6 -> Node1 [id="edge5_Node000001_Node000006",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" nn_distances",fontcolor="grey" ]; - Node6 [id="Node000006",label="vector\< fp::vec3\< Real \> \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1_node__coll__graph.map b/docs/structfp_1_1_node__coll__graph.map new file mode 100644 index 0000000..a169a0c --- /dev/null +++ b/docs/structfp_1_1_node__coll__graph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/structfp_1_1_node__coll__graph.md5 b/docs/structfp_1_1_node__coll__graph.md5 new file mode 100644 index 0000000..7bacb71 --- /dev/null +++ b/docs/structfp_1_1_node__coll__graph.md5 @@ -0,0 +1 @@ +af6966bc98c9d251a0af1ebed6ec0be4 \ No newline at end of file diff --git a/docs/structfp_1_1_node__coll__graph.png b/docs/structfp_1_1_node__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..22135d030db8d7a38a6e50d7709e9f7869a3bd04 GIT binary patch literal 18541 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 literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.dot b/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.dot deleted file mode 100644 index 18142bd..0000000 --- a/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Node::find_nns_loc_pointer" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Node::find_nns\l_loc_pointer",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Node::pop_nn",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_node.html#acf3d0a7d0c7425beb820fb453c240ed3",tooltip="Find and deletes the element with the id to_pop_nn_id in the nn_id vector."]; -} diff --git a/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.map b/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.map new file mode 100644 index 0000000..ea71787 --- /dev/null +++ b/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.md5 b/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.md5 new file mode 100644 index 0000000..7e24759 --- /dev/null +++ b/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.md5 @@ -0,0 +1 @@ +4646b856964a3062b6ef7a5b8e1b1c25 \ No newline at end of file diff --git a/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.png b/docs/structfp_1_1_node_a5959f64aafa9cd65ff0e5fed21064da3_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3111922f50a62adc82e4163f727fa47039379a GIT binary patch literal 4476 zcmYkAcQ{*N`^U9LRkf(9S+rJT)~JvgRh!tcXAyf;5u3NIs!|j|W40=4rS@#?pmvSe zwTjw%72$pQ`~CA?$(5Wd*SSufbKm#(^Zh>Ot**A}bt)Dr5)zW@>S{{*BqW!h;8>iJ z0(|b`b>4$73R_K8C6bGOuaEU#5=lttMAelP5dP^KzXEh`jW#sxc+y-hi@M)V{)&p1 zLg8gpRH{?9o~MPKGkTCSDo-!*xhA~pOC0xRUZ=M@l~;ZZ*>4t$)d0FZINDFo;&GPd zlro&wet`KsGCeeGp$|<87Z+@$%+xU~7!0ZF|C>QUGZdnIK|!WK`#_KuG9jEo(% z-hT=#M>A!Ej)_Mz-RnBq+Dq%><%R{~($bh~jKT=0#OKiIhLE)19dYIl*QgL-yLsn*HrqAkdevc?DBetdG3EQ1J z0t|6Cu`sQq&a!uAxOM`ea&W^Czc6c*)F|`hmp*;9qi*?w?O?o!=E)RUx%SYto=9bxY+}PdQ+u7Z186U?i^`?=&Pfl(h z!I^hB#P6ucJ-N`QN`UIS~pNLPJ9%_B1_7rC=~I z)Vj$H4mmgqg~CYg?e0d##_~!?p!4$XCkvXkv_&&Yd(D%9tKjkYpT*YlM#WZIS#lvY z{yXtQ#}?G9HyX^s?L*w)lY&ca-v7MZ7Le+Wb@Q*ngj&UyRM%#Nohnr>h;sXbaW-IsrU zl5qM-0;KUd?B|_FsD=8YX>m5=K=WenKYc#SKVMjWLnT2pwY5RN3D3-zmzGp?b!i!e zEoLVwUH{#j(@#z|Ha5_nH*+Xy9v*U>k!E8k@ja56kB_f4An9!{I-X0_*3&aCC4~`G z9E|Y&b^`(|smtCpx2EPpBA-t7fD_XL8xrrO9?@^I-jSol;VH?lUXk|o^+jy7$FP1L zaN@VrQB$LgkB?8651V!hL!qh$>`5Od@@h$ioy!;(TM6w=d^jIdjbqnCAn>EsVeW|O zGGw<#hf(IAEYIX8pz(%hg^b!@4~~$4!34>qHhZ^NxGTDXj={cm_>o^ zNqSDhzi4ML$<_tZdx8RBLrxFjX_CE8VQy}MK$xO-?TEU*u`!eNjSXh$=k}Gh^s6aA z92y!L)HHv$rfOfkd83M5bDpXZU6<)7nblz)`DnG_yw&nfB~80;Jzkk1}&Omg$_vBnD3 zTbj)@gm`&-bMf%BmGsZdWL=?QXY%mf+uN%J>QqorAR{B&2F3O|KMSxoT{<~f%fVtV z&91F!DkxlX>`NEzsrYJM-S;yTX(#?hUncq4*0ijo+t}mKP&r{?;p4x5lbCN67OI4P z8XOw>yINQbF!5l*+QI_<^yyRVmw=Fv5Dd(h-?2Xvt3Wz*x2p_pX2t^A*V^3t2_69c zzIJGE`>53lP^=9SYydwf%=Rw`lm&>60C4K<#pxq`Ul;MLHzfD--AS_JVJJIR!s z6X?qFbp5xvS~E}r)ig>u7D>9}0h4Or2MMf#1AP#A2Y zi0Wj2MbXywUTkcvl8VY;p|MDN97q55T^eY3%?9C8ecz zg@t3mvg0!{v{HmE0o^_-zPV9kQJb*$r=OmMrE6ody0p65aj6FrOgtD>OUPlGTp9Yp zaEj#51pML8bnF5vp`@m^Um3&-npH%0#BmIjJL<%;Nk1_%O71M{qD~(e7)XEQ*S8w& z-x}Ao7jGJc7jL@#gCrDv7uC%PAq)oq%m%SQJ!A^_A#onR>e}jj*N!*8ZT;x&Z3D@qg{%LD7v z^=Wq%BesFo2fz7wf`9>xnUkA4Tsivo&Q1r%zw{7(l^$@GlqDttoJmVZ*L?POFJOO} z4$uYbyEX#Hh$)Lo;*4C&tigPVG3$Uv+$w%^lUN>kdbH(zuxc1V&D;W9>*|dglBSZO zXUD7OYB9$pf55t<9f*c!Pl9(02Vv6ne9 z4uM<7MSY7&{R%AcQubT zf5jYDIuAvF4tTAPi3T35A`!Xrhk$-g5-ev#VoaB&NS{O-q7gl>2kU18+z~%(1g6y1 z*5;6e(LD68*E3k; z3|A~Zd6fK^%{3|n!6SbTqpz=jb7P{i&_@=eEJ4$~tMX!E2_VUSzMWlGa^% ziXG}P^$|oZ3Fkq4o}hq0^t*S|!66}~rKO_$-TnQ4Rtbd?p3_t7M}K-&j01Ltmk#oZ z7+oNg!LLKB5ZPqR=IZk=1j`kZ$Lkh3^f6)X1XC(oNI*b9PnLX^XCrZ>q(TX@7%$ij zQn}%ZUkjojH%ebnw)i_jDJ$fV891)b`q;p-33gxer1?AVXg;PjTT=mD;o&~M)lF!O zv|tD1O)MTf+d{9SSA(^Av1nBY z1mZSXbsc9E{rNK&@#LUz+cES{-<>vuR_;W1XXn$M`L-gH(wBTXnIGWFw-^{+1FoNL zH9Ah!c z)e?RXI^7VR_(0yBAp4x0auocbLe{QYV}zK9NE`^;GBPs%Y-%W13;yB3i;o{Ug{>QU zfYX2W^>-O*EM*@p6X$+Ok&(9aMsQI~^ zm?lRYH217;YkEOC;3QFGRnOw*=Lf(s;8K|m^Nj*N$`U{<<0Tx=j^rEg#ol>jG(<47 zG(0u5E>_i=kkFlQ+F%k?fGiFG69sC9p3SX|m2v^Q5!$0{Ll5Ssg3SL0>|Qz#HAKQL zFG?r}YOJK}`-W~eU#ak%Y0wz`k)YJYrBFf(>O4L^jx_p{mbTe}DB#5&c6~i6i2IZYy^ zA#wXFH6j2urFI=o!+CnI4^lMfX;t z77b~_k-yg`uB@zB)cJH~Z;Ub`DXN#3m%}dk?n)}tu0Dz{=nS^4LePc> zs#ANs1e<#z}dQV1gGIb_V(e40L^S*W~S>Fl2%o{{=lD)r|lE literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.dot b/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.dot deleted file mode 100644 index c3f5475..0000000 --- a/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Node::pop_nn" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Node::pop_nn",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Find and deletes the element with the id to_pop_nn_id in the nn_id vector."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Node::find_nns\l_loc_pointer",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_node.html#a5959f64aafa9cd65ff0e5fed21064da3",tooltip=" "]; -} diff --git a/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.map b/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.map new file mode 100644 index 0000000..eb1926d --- /dev/null +++ b/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.md5 b/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.md5 new file mode 100644 index 0000000..d3192be --- /dev/null +++ b/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.md5 @@ -0,0 +1 @@ +cea69b978d8cf381ee196b937e1af849 \ No newline at end of file diff --git a/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.png b/docs/structfp_1_1_node_acf3d0a7d0c7425beb820fb453c240ed3_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7b221084547f3301c2f5ad67fff9c58026a28c GIT binary patch literal 4628 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 - + flippy: Member List + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -145,7 +152,7 @@ diff --git a/docs/structfp_1_1_nodes.html b/docs/structfp_1_1_nodes.html index 8a296a1..05f0eae 100644 --- a/docs/structfp_1_1_nodes.html +++ b/docs/structfp_1_1_nodes.html @@ -3,16 +3,18 @@ - + flippy: fp::Nodes< Real, Index > Struct Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -108,117 +115,122 @@

Data structure containing all nodes of the Triangulation. - More...

+ More...

#include <Nodes.hpp>

Collaboration diagram for fp::Nodes< Real, Index >:
Collaboration graph
+ + + + +
[legend]
+  - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

Public Member Functions

Nodes ()=default
Nodes ()=default
 Default constructor.
 
 Nodes (std::vector< Node< Real, Index > > data_inp)
 Nodes (std::vector< Node< Real, Index > > data_inp)
 Constructor from a vector.
 
 Nodes (Json const &node_dict)
 Nodes (Json const &node_dict)
 Constructor from JSON.
 
std::vector< Node< Real, Index > >::iterator begin ()
std::vector< Node< Real, Index > >::iterator begin ()
 Returns an iterator to the beginning of the underlying data member that contains the collection of the nodes.
 
std::vector< Node< Real, Index > >::const_iterator begin () const
std::vector< Node< Real, Index > >::const_iterator begin () const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
std::vector< Node< Real, Index > >::iterator end ()
std::vector< Node< Real, Index > >::iterator end ()
 Returns an iterator to the end of the underlying data member that contains the collection of the nodes.
 
std::vector< Node< Real, Index > >::const_iterator end () const
std::vector< Node< Real, Index > >::const_iterator end () const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
const vec3< Real > & pos (Index node_id) const
const vec3< Real > & pos (Index node_id) const
 Given a node id, return the constant reference to the node position.
 
void set_pos (Index node_id, vec3< Real > const &new_pos)
void set_pos (Index node_id, vec3< Real > const &new_pos)
 Sets the position of the requested node to a given position.
 
void set_pos (Index node_id, vec3< Real > &&new_pos)
void set_pos (Index node_id, vec3< Real > &&new_pos)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
void displace (Index node_id, vec3< Real >const &displacement)
void displace (Index node_id, vec3< Real >const &displacement)
 Changes the position of the requested node by a given displacement.
 
void displace (Index node_id, vec3< Real > &&displacement)
void displace (Index node_id, vec3< Real > &&displacement)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
const vec3< Real > & curvature_vec (Index node_id) const
const vec3< Real > & curvature_vec (Index node_id) const
 Given a node id, return the constant reference to the node curvature vector.
 
void set_curvature_vec (Index node_id, vec3< Real > const &new_cv)
void set_curvature_vec (Index node_id, vec3< Real > const &new_cv)
 Given a node id and a new curvature vector, reset the node's current curvature vector.
 
void set_curvature_vec (Index node_id, vec3< Real > &&new_cv)
void set_curvature_vec (Index node_id, vec3< Real > &&new_cv)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
Real area (Index node_id) const
Real area (Index node_id) const
 Given a node id, return node associated area.
 
void set_area (Index node_id, Real new_area)
void set_area (Index node_id, Real new_area)
 Given a node id and a new area value, reset the current value of the node area.
 
Real volume (Index node_id) const
Real volume (Index node_id) const
 Given a node id, return node associated volume.
 
void set_volume (Index node_id, Real new_volume)
void set_volume (Index node_id, Real new_volume)
 Given a node id and a new volume value, reset the current value of the node volume.
 
Real unit_bending_energy (Index node_id) const
Real unit_bending_energy (Index node_id) const
 Given a node id, return node-associated unit bending energy.
 
void set_unit_bending_energy (Index node_id, Real new_ube)
void set_unit_bending_energy (Index node_id, Real new_ube)
 
const autonn_ids (Index node_id) const
const auto & nn_ids (Index node_id) const
 Given a node id and a new value for the node-associated unit bending energy, update the current value of Node::unit_bending_energy.
 
void set_nn_ids (Index node_id, std::vector< Index >const &new_nn_ids)
void set_nn_ids (Index node_id, std::vector< Index >const &new_nn_ids)
 For a Node specified by node_id, overwrite the entire Node::nn_ids vector.
 
Index nn_id (Index node_id, Index loc_nn_index) const
Index nn_id (Index node_id, Index loc_nn_index) const
 Given a node id and the local index in the Node::nn_ids vector, returns the next neighbour id.
 
void set_nn_id (Index node_id, Index loc_nn_index, Index nn_id)
void set_nn_id (Index node_id, Index loc_nn_index, Index nn_id)
 For a node specified by node_id, resets the value of the requested nn_id.
 
void emplace_nn_id (Index node_id, Index to_emplace_nn_id, Index loc_nn_index)
void emplace_nn_id (Index node_id, Index to_emplace_nn_id, Index loc_nn_index)
 Emplace a the id of a new node in the Node::nn_ids vector, in front of the loc_idx position.
 
const autonn_distances (Index node_id) const
const auto & nn_distances (Index node_id) const
 Given a node id, returns the std::vector containing distance vectors to next neighbours.
 
const autoget_nn_distance_vector_between (Index node_id, Index nn_id) const
const auto & get_nn_distance_vector_between (Index node_id, Index nn_id) const
 Given two global node ids, returns a distance vector (if the nodes are neighbors).
 
void set_nn_distance (Index node_id, Index loc_nn_index, vec3< Real > &&dist)
void set_nn_distance (Index node_id, Index loc_nn_index, vec3< Real > &&dist)
 Overwrite the next neighbor distance with a new 3d vector.
 
void set_nn_distance (Index node_id, Index loc_nn_index, vec3< Real > const &dist)
void set_nn_distance (Index node_id, Index loc_nn_index, vec3< Real > const &dist)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
Index size () const
Index size () const
 Size of the Nodes data member.
 
Node< Real, Index > & operator[] (Index node_id)
Node< Real, Index > & operator[] (Index node_id)
 Square bracket operator overload for convenient indexing of the Nodes struct.
 
const Node< Real, Index > & operator[] (Index node_id) const
const Node< Real, Index > & operator[] (Index node_id) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
Json make_data () const
Json make_data () const
 Serialize the Nodes struct to a JSON object.
 
@@ -234,8 +246,8 @@ struct fp::Nodes< Real, Index >

Data structure containing all nodes of the Triangulation.

The Nodes struct is capable of reinitializing nodes from a well-formed JSON object or from a simple std::vector that contains all nodes of a triangulation. The nodes class is basically a wrapper around a vector of nodes, i.e., std::vector<Node<Real, Index>>, and provides additional functionality to manipulate and query this data structure. Nodes class is also meant to be the interface with which the end user is manipulating individual nodes.

Template Parameters
- - + +
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.
Realtype that will be used for all floating point numbers inside this class/struct. Any data type that satisfies the floating_point_number concept is allowed, for example, float.
Indextype that will be used for all integer numbers inside this class/struct. Any data type that satisfies the indexing_number concept is allowed, for example, unsigned int.

@@ -254,8 +266,7 @@

fp::Nodes< Real, Index >::Nodes ( - std::vector< Node< Real, Index > >  - data_inp) + std::vector< Node< Real, Index > > data_inp) @@ -290,8 +301,7 @@

fp::Nodes< Real, Index >::Nodes ( - Json const &  - node_dict) + Json const & node_dict) @@ -314,6 +324,21 @@

+ + + + + + + + + + + + + + + @@ -333,7 +358,7 @@

std::vector< Node< Real, Index > >::iterator fp::Nodes< Real, Index >::begin ( - ) + ) @@ -363,7 +388,7 @@

std::vector< Node< Real, Index > >::const_iterator fp::Nodes< Real, Index >::begin ( - ) + ) const @@ -393,7 +418,7 @@

std::vector< Node< Real, Index > >::iterator fp::Nodes< Real, Index >::end ( - ) + ) @@ -423,7 +448,7 @@

std::vector< Node< Real, Index > >::const_iterator fp::Nodes< Real, Index >::end ( - ) + ) const @@ -451,16 +476,15 @@

- + - - +
const vec3< Real > & fp::Nodes< Real, Index >::pos const vec3< Real > & fp::Nodes< Real, Index >::pos (Index node_id)Index node_id) const
-inline +inlinenodiscard
@@ -493,21 +524,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_pos void fp::Nodes< Real, Index >::set_pos (Index node_id, Index node_id,
vec3< Real > constnew_pos 
)vec3< Real > const & new_pos )
@@ -540,21 +564,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_pos void fp::Nodes< Real, Index >::set_pos (Index node_id, Index node_id,
vec3< Real > && new_pos 
)vec3< Real > && new_pos )
@@ -587,21 +604,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::displace void fp::Nodes< Real, Index >::displace (Index node_id, Index node_id,
vec3< Real >constdisplacement 
)vec3< Real >const & displacement )
@@ -634,21 +644,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::displace void fp::Nodes< Real, Index >::displace (Index node_id, Index node_id,
vec3< Real > && displacement 
)vec3< Real > && displacement )
@@ -681,16 +684,15 @@

- + - - +
const vec3< Real > & fp::Nodes< Real, Index >::curvature_vec const vec3< Real > & fp::Nodes< Real, Index >::curvature_vec (Index node_id)Index node_id) const
-inline +inlinenodiscard
@@ -723,21 +730,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_curvature_vec void fp::Nodes< Real, Index >::set_curvature_vec (Index node_id, Index node_id,
vec3< Real > constnew_cv 
)vec3< Real > const & new_cv )
@@ -770,21 +770,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_curvature_vec void fp::Nodes< Real, Index >::set_curvature_vec (Index node_id, Index node_id,
vec3< Real > && new_cv 
)vec3< Real > && new_cv )
@@ -819,14 +812,13 @@

Real fp::Nodes< Real, Index >::area ( - Index  - node_id) + Index node_id) const -inline +inlinenodiscard
@@ -843,6 +835,11 @@

+ + + + +

@@ -859,21 +856,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_area void fp::Nodes< Real, Index >::set_area (Index node_id, Index node_id,
Real new_area 
)Real new_area )
@@ -908,14 +898,13 @@

Real fp::Nodes< Real, Index >::volume ( - Index  - node_id) + Index node_id) const -inline +inlinenodiscard
@@ -932,6 +921,11 @@

+ + + + +

@@ -948,21 +942,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_volume void fp::Nodes< Real, Index >::set_volume (Index node_id, Index node_id,
Real new_volume 
)Real new_volume )
@@ -997,14 +984,13 @@

Real fp::Nodes< Real, Index >::unit_bending_energy ( - Index  - node_id) + Index node_id) const -inline +inlinenodiscard
@@ -1021,6 +1007,11 @@

+ + + + +

@@ -1037,21 +1028,14 @@

- + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_unit_bending_energy void fp::Nodes< Real, Index >::set_unit_bending_energy (Index node_id, Index node_id,
Real new_ube 
)Real new_ube )
@@ -1082,16 +1066,15 @@

- + - - +
const auto & fp::Nodes< Real, Index >::nn_ids const auto & fp::Nodes< Real, Index >::nn_ids (Index node_id)Index node_id) const
-inline +inlinenodiscard
@@ -1205,6 +1174,13 @@

+ + + + + + +

@@ -1221,27 +1197,19 @@

- + - - + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_nn_id void fp::Nodes< Real, Index >::set_nn_id (Index node_id, Index node_id,
Index loc_nn_index, Index loc_nn_index,
Index nn_id 
)Index nn_id )
@@ -1264,6 +1232,11 @@

+ + + + + @@ -1280,27 +1253,19 @@

- + - - + - - + - - - - - - - +
void fp::Nodes< Real, Index >::emplace_nn_id void fp::Nodes< Real, Index >::emplace_nn_id (Index node_id, Index node_id,
Index to_emplace_nn_id, Index to_emplace_nn_id,
Index loc_nn_index 
)Index loc_nn_index )
@@ -1323,6 +1288,11 @@

+ + + + + @@ -1339,16 +1309,15 @@

- + - - +
const auto & fp::Nodes< Real, Index >::nn_distances const auto & fp::Nodes< Real, Index >::nn_distances (Index node_id)Index node_id) const
-inline +inlinenodiscard
@@ -1381,26 +1355,19 @@

- + - - + - - - - - - - +
const auto & fp::Nodes< Real, Index >::get_nn_distance_vector_between const auto & fp::Nodes< Real, Index >::get_nn_distance_vector_between (Index node_id, Index node_id,
Index nn_id 
) constIndex nn_id ) const
-inline +inlinenodiscard
@@ -1435,27 +1407,19 @@

- + - - + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_nn_distance void fp::Nodes< Real, Index >::set_nn_distance (Index node_id, Index node_id,
Index loc_nn_index, Index loc_nn_index,
vec3< Real > && dist 
)vec3< Real > && dist )
@@ -1489,27 +1453,19 @@

- + - - + - - + - - - - - - - +
void fp::Nodes< Real, Index >::set_nn_distance void fp::Nodes< Real, Index >::set_nn_distance (Index node_id, Index node_id,
Index loc_nn_index, Index loc_nn_index,
vec3< Real > constdist 
)vec3< Real > const & dist )
@@ -1545,13 +1501,13 @@

Index fp::Nodes< Real, Index >::size ( - ) + ) const -inline +inlinenodiscard
@@ -1674,7 +1628,7 @@

    - +

diff --git a/docs/structfp_1_1_nodes__coll__graph.dot b/docs/structfp_1_1_nodes__coll__graph.dot deleted file mode 100644 index d0009a1..0000000 --- a/docs/structfp_1_1_nodes__coll__graph.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "fp::Nodes< Real, Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::Nodes\< Real, Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Data structure containing all nodes of the Triangulation."]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" data",fontcolor="grey" ]; - Node2 [id="Node000002",label="vector\< fp::Node\< Real,\l Index \> \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1_nodes__coll__graph.map b/docs/structfp_1_1_nodes__coll__graph.map new file mode 100644 index 0000000..712eb02 --- /dev/null +++ b/docs/structfp_1_1_nodes__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes__coll__graph.md5 b/docs/structfp_1_1_nodes__coll__graph.md5 new file mode 100644 index 0000000..32c7950 --- /dev/null +++ b/docs/structfp_1_1_nodes__coll__graph.md5 @@ -0,0 +1 @@ +db4f650cbb8ef9f31264a03601c50a76 \ No newline at end of file diff --git a/docs/structfp_1_1_nodes__coll__graph.png b/docs/structfp_1_1_nodes__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bda340d57998400396b021aee647c8cfb3516082 GIT binary patch literal 7067 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 literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.dot b/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.dot deleted file mode 100644 index fe77bcf..0000000 --- a/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Nodes::volume" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Nodes::volume",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Given a node id, return node associated volume."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6",tooltip="Constructor from JSON."]; -} diff --git a/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.map b/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.map new file mode 100644 index 0000000..b094fae --- /dev/null +++ b/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.md5 b/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.md5 new file mode 100644 index 0000000..1dade3d --- /dev/null +++ b/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.md5 @@ -0,0 +1 @@ +2a080575888f43219cc7ca00ae469fae \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.png b/docs/structfp_1_1_nodes_a0d791117fddd2490c8223a74de6f9109_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..cd291e239afb43d5246047ba03a40ab2282353aa GIT binary patch literal 3686 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 literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.dot b/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.dot deleted file mode 100644 index 40465fe..0000000 --- a/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Nodes::set_nn_id" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Nodes::set_nn_id",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="For a node specified by node_id, resets the value of the requested nn_id."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::nn_id",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a65c0fd75105d0110c204b2b9c2af5640",tooltip="Given a node id and the local index in the Node::nn_ids vector, returns the next neighbour id."]; -} diff --git a/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.map b/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.map new file mode 100644 index 0000000..a3f75b5 --- /dev/null +++ b/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.md5 b/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.md5 new file mode 100644 index 0000000..c4034a7 --- /dev/null +++ b/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.md5 @@ -0,0 +1 @@ +73922c5a3168d5c4b01ee6214180a81f \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.png b/docs/structfp_1_1_nodes_a14a196ade9731f70eeed6446b32854ca_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3afc69ac11fce92cb7af7523729982b7499074 GIT binary patch literal 3809 zcmYjUcQjmG*B>Qo03j8TFRGFsH=qPJ0_*U^P& zQAcls=v|cY9pC%M`>wfj*S%+*yY@MI|H?jrFVvNdBjBN$3Nvi-t!5#myw;p zHs^|ii@kAO*^Z8r#)$}J&}GzpNwMtd3k&&TwXm9z8nGW87gw?M=$I$gZ$F!Zw8!-l zZ40f$!~(==H~;X)94wK{;=V)J;C`%QTbU;syFVW9F+2tpyZ1Dl3nfT%&u7Q!F698O##o(po{sUg=8|PWvNr-Iu=_qIBZhzo@Hl8M@n{f zHuksW*C)Odv`kF+VJnq4?^Y~wQH>~-aE>$E4yqU7>Fv=85YDG=h|d4Kyyj~3@gbd? zpO-)%ATTHRG8={l;;~KLae6uj@n}Bu-F|FjWJ}fiCA~QO{j489BJX-0dB?@YQOrBl zpi5TT*NlN2d$4+l)7wAMQ0w!E-o$Iq^DOh zH#hfnv?+`LVK?hfLh|z;OiWI~Cq}mC+y4?zHaok!MRFP(W=RL<8NM+OJOqN4n0QgKJqsG6Kuqz-vEjNLFOgdXeWFAO#j9v<#Wh_%q0 z7&+cwjg@kFn5B^{mLub~$3sO$_3O{>LT5yRBr>;NJ~pzQBg7CWOr-Jcy$;{50ztKBfoU%(kpFk=+7q+S*#& zjd~g%5Hpk0J=vC-sWd;odye)SCxx%~&dv^3d$)v?RHI{1=l0Dis8_o-=6OocE zyGy-GOUYhb?Cd^UTMondx*+3z)@s3jSN!qLXv)`Do-kY@Dhq{)tQJ*1J}C-FLh0-k zD=nodhjK|vCx(U5n3$SMcpQsp$ef8>VR+cm)pdn|fq|5aEI48?PSl2yl2Wi7DnRzY zs6L^#7B-B9TR2Y0f4)AuvC&iXw%Nhi`5p1}??jEujgLo1t}qzvVx%R2cB0a;dGw)# z1f!9W5lmXz5s3u*`B^zF05894Z*PCRw;~VHEsokrZ-t%f^>lPJc6J5^GehSH1pmA| zzFwJg7$+xZu8?SKY^=DHl$M?zepymi9>d+}cZC5=YU_>_W)yyR6@UaRD>pAMFfj1# zQ0{B}2G2yWH_|fU+QP!Z;yM&#1Vg*G-M?yEFdJ-&9 zJ!?KI*>kS>h75<8Sagh`TjzqFuilik?ND3LmoH8I{a+>C69k>i<{Lb8G&P^Nxk(BM z3Au0KE-x%DevOO6TXxg2ecC3=EuUn4NdX}#`&>ai>DTm9adsfz3&U4>1G5}Um1^-` z>U=TAXnC>*dI3NfEFmtAY2f$oob2p-+}xkn)(|}j63swwNVax&O`ASZwH*-5v!&UM z8a$=@`}@tz&4-wG3BTfN5AZhbXZs@y1VVUhY^OKb<K19^eQx(uX0tpz%|u(T8r7x%N=cD&EJ%*@QJ$Zk>+q^hI0*J7#`^}w)p)Fg>u zUT3IbV!{r!o0!>K`K@2)7Ik)V2xTg5F&1=K>S2KlAxom))F?ed?U>;!>_baSOFKX3 zfb|8jNDWsepsIROp7<`0R|rTsuVpi+K6}>G*-0fMBa`CXzI}MOG*R_lzxo3e8jUve z{A<3pws!lmd*${ZK!zX41Sl1a+|103F@pP3N^b6#mKKF)s;Z1oyF0V9v-G>CHo90W z{@X7hkK+#rTicbXI;lFh{YMhEnix?f+Zt&(1cZE#o+;WXbWc~gWd;0CUC#Ndbxc13 zp(JjHdd;k?bS6l=7YB5N%(sVfv$Hq-|B{0kg#jyO&JL#w8ODoEFK=vYsKtp;K{PZp ze0+RHE9~#Khu&=;8;j*sjqWQpRrc}q4NeXP?8wc{)hRM2k)zZ%FrcEQHrbr2qh#aZ zC8}#+29+#U4|^7$23rn&^bFh ze^~Cr>1+(5a#Bb zUD5o)foM0kfeclKDYsRAIy$=18W#apR#vsxM}7bsVsTk|@G_zJ=FZN}BQIuV=7?2A z>*BU-+X^m5QLm1CMk8Y1kq=h+_Hq`zHaWHN?ozz$sW)zj;_+-oMzv4e)qgj=ZEG?^ zL28sGT{aL8&?wZ`gG#5iLPk${LBnQ_Vaa? zO1J&o&Jqa;3E&CFHa76h4sI!__{Sc{Gt0{XzP@C6Z?JNj)-GNE%rnK_O^pmua)hhI1!8R!|M=NW2taQa< z%+Sy$4=H*{$lQb1uTG4-fpC z)hI_fU+P|AKg}g7dh71pyD10bJiNS}mHDW#i7NuNA4^Mxd3kx;s)=VO?{^8$=dF;s zx{OP`$?enA$s}YH4j>YM53QWT;?G+prKR5Z8pPt_BA^2W8#yp8#AuN>Xm3hNN-m@X zv?St^l5?x8HalcmUGNLqLDqpT4JSI;XpP%FciQnfAB7qI)rJ$bWcP8f@AqD0(^HeG zkg_90T&+V2VJmvkQ~7B!*>#?`7#J=$M)7HnHh9SZ(p|RZZU!w7bBw4!d^~7GKoUrJdROX=I5qL>m)x0|-cs$-|w&@b!M&IiG z)jQ&0LZ)qyu;^%|XV0jKMB=sRU%X$M;_d4@zue*rLQdAWSO7zFC;nZktgcQSS!I;` zz;j=ue7@i{CEyeV1K_S~@rg!Yk~|L6;X987YVu6>JM(!6>E8 zc6_}L8i4^U9Qw1XD;9KE+shjK_P{|gz*j!uD>mGBe?bQa2X)T2>UrJvmft!88OzO) z-hZxr)m;E_WVd^}^(e(uMMVW8=>md0W=Z+I@=eT^=?eV=$V{U*+1hwTXi7>7MHfMY z>6#vPcmb;>?|=2}{+}VWLxTRY7~th#eSQ5G zuoKi$qKi)T2i~fxs@m-~W(5U>z5)X&6BCoIt*yr1-cXS5HwF4uuwxtRsbP^1%P%m1 zmHUPPOmuWR0*ac>Vuwf_Mn=X92q9O8HDA5@gvIh7931eg|6l_c0}eS$AiRS~7XT6g zjN+P`n->J{SZ{U{2!y$X1%)j2#GrjSO1tU$=SZX|Km=D-WUy5}HbZE2cs`IjDLcjj z{$kuN`0p-Kr>0ELHopFb!@*lx{(quhN{zj~QuHJ&qw$>4_+;e#6_fi8jDy2$WCrJJ zA+m(jX*fGzzR9hgURn8#8EV(}UH-G1jD-#F!-s@FLwS2^V>f}SMtoDxx(|gi08-)0 zgry_-`S|ANS}`Bi@k0v~F*H71F#=kenz)Z7WN|;HWhkvzKQze6%hSr$77ST$ZhCwi z?$eW!WdWWB3fOPl-QQ2EtlUmvigbAfKqWU)U=SarYHG_LOm(~A-VZ%&>p_}Q@Z6Y1 zvaOTh^K~s?TxN)W{9tUO|B4{a-4X_Br_&Jr+{uW^m}eu>`+XO9#*B=wZnVW|{o_~f zaiS-xEb8s;O>bKI?pN;Ns{p)YS>zD6EF2EUM1-doWMmoN$n9;AA_*ilblZ_RrDMTn zpG$s?0({m>h~&_^CXF9{lmD2+4TYkmr+>F@$GK8(OU&B&?aTTb)Y`N?M0)vc2EFwO zMjf2nY!%c$hI2@lFOc&*9WYh>-k^o1`*If1ZB?XSSTPD}TZV z&6tAQs_paLKZ-Ct&&L^C{=It?MvNvVjQ`JJ5Cm`wI+e-!>bgc-<(Cf5tdOUQ>IwyN H#y Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::emplace\l_nn_id",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a53ecc9a931522c8f339dadb2232a528a",tooltip="Emplace a the id of a new node in the Node::nn_ids vector, in front of the loc_idx position."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6",tooltip="Constructor from JSON."]; -} diff --git a/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.map b/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.map new file mode 100644 index 0000000..428e234 --- /dev/null +++ b/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.md5 b/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.md5 new file mode 100644 index 0000000..194f003 --- /dev/null +++ b/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.md5 @@ -0,0 +1 @@ +e4e2362b637e3a4b5e48c8a49bfcd000 \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.png b/docs/structfp_1_1_nodes_a44304df70878d39c9c55ce6cba0cec3d_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..ae93b53f9b2a478e9479ee22ffb5da5ff677aefe GIT binary patch literal 6962 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%0A@3C*yGk+hIhoRfVq1GUA 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 y@n=4FP#48+=EHwVlmrDQjdTC|p5|2Q Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::pos",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a44304df70878d39c9c55ce6cba0cec3d",tooltip="Given a node id, return the constant reference to the node position."]; -} diff --git a/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.map b/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.map new file mode 100644 index 0000000..215e2e1 --- /dev/null +++ b/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.md5 b/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.md5 new file mode 100644 index 0000000..1b596f4 --- /dev/null +++ b/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.md5 @@ -0,0 +1 @@ +52b7bc9bbfcbfd51df55c055f542033e \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.png b/docs/structfp_1_1_nodes_a53ecc9a931522c8f339dadb2232a528a_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..88dbe6d05733a2e6dd45eeeb64a0affa0192b24f GIT binary patch literal 4468 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::get_nn_distance\l_vector_between",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a8efb079f96664cee5698ccdf9e6bc080",tooltip="Given two global node ids, returns a distance vector (if the nodes are neighbors)."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Nodes::set_nn_id",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a14a196ade9731f70eeed6446b32854ca",tooltip="For a node specified by node_id, resets the value of the requested nn_id."]; -} diff --git a/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.map b/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.map new file mode 100644 index 0000000..e9817fc --- /dev/null +++ b/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.md5 b/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.md5 new file mode 100644 index 0000000..e5588ce --- /dev/null +++ b/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.md5 @@ -0,0 +1 @@ +e5f17d699d2ec3578d6677ad3cb3fcf5 \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.png b/docs/structfp_1_1_nodes_a65c0fd75105d0110c204b2b9c2af5640_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..69d560f67c1afbcf9d2b1eb9b225771bc94f1564 GIT binary patch literal 8533 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 bc19(;bv7H*b5{*^0->UO4^^UQ5&VAucI}s1 literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.dot b/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.dot deleted file mode 100644 index 9dfdcac..0000000 --- a/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Nodes::get_nn_distance_vector_between" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Nodes::get_nn_distance\l_vector_between",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Given two global node ids, returns a distance vector (if the nodes are neighbors)."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::nn_id",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a65c0fd75105d0110c204b2b9c2af5640",tooltip="Given a node id and the local index in the Node::nn_ids vector, returns the next neighbour id."]; -} diff --git a/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.map b/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.map new file mode 100644 index 0000000..c04de8a --- /dev/null +++ b/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.md5 b/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.md5 new file mode 100644 index 0000000..4b6326f --- /dev/null +++ b/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.md5 @@ -0,0 +1 @@ +3c70d5aba982a355d48315f6f2dd9809 \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.png b/docs/structfp_1_1_nodes_a8efb079f96664cee5698ccdf9e6bc080_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..a83ea76667b5d92bd166a5101b7328c323b10b9a GIT binary patch literal 5725 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 b=2ZI4HHxF8@cM6HUkrgiQ Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6",tooltip="Constructor from JSON."]; -} diff --git a/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.map b/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.map new file mode 100644 index 0000000..d3f7b26 --- /dev/null +++ b/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.md5 b/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.md5 new file mode 100644 index 0000000..46c3007 --- /dev/null +++ b/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.md5 @@ -0,0 +1 @@ +be6c28c63d7d22942b2ddd61408d9a6c \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.png b/docs/structfp_1_1_nodes_aac8eaef6c3fa8679dfafcb4018573233_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..25baa2be8c471eca00279560ac6bea6b5e5fdcdb GIT binary patch literal 4112 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 JRf_+H{12811jzsZ literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.dot b/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.dot deleted file mode 100644 index 10f70ea..0000000 --- a/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Nodes::unit_bending_energy" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Nodes::unit_bending\l_energy",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Given a node id, return node-associated unit bending energy."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6",tooltip="Constructor from JSON."]; -} diff --git a/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.map b/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.map new file mode 100644 index 0000000..93407b9 --- /dev/null +++ b/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.md5 b/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.md5 new file mode 100644 index 0000000..0f75b41 --- /dev/null +++ b/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.md5 @@ -0,0 +1 @@ +82e4cc5138270bb5c70c9609b6ec562f \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.png b/docs/structfp_1_1_nodes_ab65c2e5dd4f3b43b2445b62c400107e9_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..899864100d2ba7dea7d480cc596a8858f92c2261 GIT binary patch literal 4819 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 literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.dot b/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.dot deleted file mode 100644 index cf425e8..0000000 --- a/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "fp::Nodes::area" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="RL"; - Node1 [id="Node000001",label="fp::Nodes::area",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Given a node id, return node associated area."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6",tooltip="Constructor from JSON."]; -} diff --git a/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.map b/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.map new file mode 100644 index 0000000..c783893 --- /dev/null +++ b/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.md5 b/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.md5 new file mode 100644 index 0000000..68cacbe --- /dev/null +++ b/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.md5 @@ -0,0 +1 @@ +cd252f799f5e1c6c214b58cd1527da9b \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.png b/docs/structfp_1_1_nodes_ab863d48ecbce98b85747961bbaae82a9_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9c4e4ae006f4ec2a85e3ebc57e7e28617f2ce0 GIT binary patch literal 3540 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 Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeab72aa27fd66417ac8d5d0c9d000be6",tooltip="Constructor from JSON."]; -} diff --git a/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.map b/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.map new file mode 100644 index 0000000..c3c454d --- /dev/null +++ b/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.md5 b/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.md5 new file mode 100644 index 0000000..8f7440a --- /dev/null +++ b/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.md5 @@ -0,0 +1 @@ +eb6662a6e40b85eae97fdf54196b2f95 \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.png b/docs/structfp_1_1_nodes_aeaac33789677da84759647308c5f25da_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..f452b1305a95bf460cea281779f3eb51f2fc4f28 GIT binary patch literal 3993 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 literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.dot b/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.dot deleted file mode 100644 index 539d079..0000000 --- a/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.dot +++ /dev/null @@ -1,21 +0,0 @@ -digraph "fp::Nodes::Nodes" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - rankdir="LR"; - Node1 [id="Node000001",label="fp::Nodes::Nodes",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Constructor from JSON."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="fp::Nodes::area",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#ab863d48ecbce98b85747961bbaae82a9",tooltip="Given a node id, return node associated area."]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fp::Nodes::curvature_vec",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aac8eaef6c3fa8679dfafcb4018573233",tooltip="Given a node id, return the constant reference to the node curvature vector."]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="fp::Nodes::nn_distances",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#aeaac33789677da84759647308c5f25da",tooltip="Given a node id, returns the std::vector containing distance vectors to next neighbours."]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="fp::Nodes::pos",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a44304df70878d39c9c55ce6cba0cec3d",tooltip="Given a node id, return the constant reference to the node position."]; - Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="fp::Nodes::unit_bending\l_energy",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#ab65c2e5dd4f3b43b2445b62c400107e9",tooltip="Given a node id, return node-associated unit bending energy."]; - Node1 -> Node7 [id="edge6_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="fp::Nodes::volume",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$structfp_1_1_nodes.html#a0d791117fddd2490c8223a74de6f9109",tooltip="Given a node id, return node associated volume."]; -} diff --git a/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.map b/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.map new file mode 100644 index 0000000..eb6b27a --- /dev/null +++ b/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.md5 b/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.md5 new file mode 100644 index 0000000..9687510 --- /dev/null +++ b/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.md5 @@ -0,0 +1 @@ +37963a8d43da821d261c6a70decd051e \ No newline at end of file diff --git a/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.png b/docs/structfp_1_1_nodes_aeab72aa27fd66417ac8d5d0c9d000be6_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee59b8f019b9d9fc1b2caadd4a74c48a5a17a27 GIT binary patch literal 23388 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 b^AF=qh4$gSX - + flippy: Member List + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -113,7 +120,7 @@ diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid.html b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid.html index 4924a4a..dc95798 100644 --- a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid.html +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid.html @@ -3,16 +3,18 @@ - + flippy: fp::implementation::rawSTLSolid Struct Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,6 +116,15 @@ Collaboration diagram for fp::implementation::rawSTLSolid:
Collaboration graph
+ + + + + + + + +
[legend]

@@ -132,7 +148,7 @@ diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.dot b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.dot deleted file mode 100644 index 971ed00..0000000 --- a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.dot +++ /dev/null @@ -1,14 +0,0 @@ -digraph "fp::implementation::rawSTLSolid" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::implementation\l::rawSTLSolid",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" header",fontcolor="grey" ]; - Node2 [id="Node000002",label="char",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node3 -> Node1 [id="edge2_Node000001_Node000003",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" num_triangles",fontcolor="grey" ]; - Node3 [id="Node000003",label="uint32_t",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node4 -> Node1 [id="edge3_Node000001_Node000004",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" stl_triangles",fontcolor="grey" ]; - Node4 [id="Node000004",label="vector\< fp::implementation\l::rawSTLTriangle \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.map b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.map new file mode 100644 index 0000000..b8b52c6 --- /dev/null +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.md5 b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.md5 new file mode 100644 index 0000000..9e5a8c4 --- /dev/null +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.md5 @@ -0,0 +1 @@ +abb8a6a79eeb81a935312a02f4c1fe6e \ No newline at end of file diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.png b/docs/structfp_1_1implementation_1_1raw_s_t_l_solid__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..164bb752ff358c01290d22504560de6c13b22ad8 GIT binary patch literal 12770 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 XJvZTmQcb`wZ9vNMPvKQhEW-X5kjcVY literal 0 HcmV?d00001 diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle-members.html b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle-members.html index 069c241..321d75e 100644 --- a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle-members.html +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle-members.html @@ -3,16 +3,18 @@ - + flippy: Member List + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -115,7 +122,7 @@ diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle.html b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle.html index 380fda8..3864e69 100644 --- a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle.html +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle.html @@ -3,16 +3,18 @@ - + flippy: fp::implementation::rawSTLTriangle Struct Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -109,6 +116,13 @@ Collaboration diagram for fp::implementation::rawSTLTriangle:
Collaboration graph
+ + + + + + +
[legend]

@@ -138,7 +152,7 @@ diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.dot b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.dot deleted file mode 100644 index 20b8c0c..0000000 --- a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph "fp::implementation::rawSTLTriangle" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::implementation\l::rawSTLTriangle",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" normal\nv1\nv2\nv3",fontcolor="grey" ]; - Node2 [id="Node000002",label="float",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node3 -> Node1 [id="edge2_Node000001_Node000003",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" attr_byte_count",fontcolor="grey" ]; - Node3 [id="Node000003",label="uint16_t",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.map b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.map new file mode 100644 index 0000000..3be54ef --- /dev/null +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.md5 b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.md5 new file mode 100644 index 0000000..18fc5f0 --- /dev/null +++ b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.md5 @@ -0,0 +1 @@ +0d023712f50bb5dd1435009787b86407 \ No newline at end of file diff --git a/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.png b/docs/structfp_1_1implementation_1_1raw_s_t_l_triangle__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc77a940463d452bdae98c6db8a2ee972d80a98 GIT binary patch literal 9681 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 - + flippy: Member List + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -113,7 +120,7 @@ diff --git a/docs/structfp_1_1implementation_1_1stl_node.html b/docs/structfp_1_1implementation_1_1stl_node.html index 6a39f5a..b21749c 100644 --- a/docs/structfp_1_1implementation_1_1stl_node.html +++ b/docs/structfp_1_1implementation_1_1stl_node.html @@ -3,16 +3,18 @@ - + flippy: fp::implementation::stlNode< Real, Index > Struct Template Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -110,12 +117,19 @@ Collaboration diagram for fp::implementation::stlNode< Real, Index >:
Collaboration graph
+ + + + + + +
[legend]
+bool 

Public Member Functions

-bool operator== (stlNode const &other) const
operator== (stlNode const &other) const
 

@@ -136,7 +150,7 @@ diff --git a/docs/structfp_1_1implementation_1_1stl_node__coll__graph.dot b/docs/structfp_1_1implementation_1_1stl_node__coll__graph.dot deleted file mode 100644 index 3418223..0000000 --- a/docs/structfp_1_1implementation_1_1stl_node__coll__graph.dot +++ /dev/null @@ -1,12 +0,0 @@ -digraph "fp::implementation::stlNode< Real, Index >" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="fp::implementation\l::stlNode\< Real, Index \>",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; - Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" id",fontcolor="grey" ]; - Node2 [id="Node000002",label="Index",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node3 -> Node1 [id="edge2_Node000001_Node000003",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" pos",fontcolor="grey" ]; - Node3 [id="Node000003",label="vec3\< Real \>",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/docs/structfp_1_1implementation_1_1stl_node__coll__graph.map b/docs/structfp_1_1implementation_1_1stl_node__coll__graph.map new file mode 100644 index 0000000..22c640b --- /dev/null +++ b/docs/structfp_1_1implementation_1_1stl_node__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/structfp_1_1implementation_1_1stl_node__coll__graph.md5 b/docs/structfp_1_1implementation_1_1stl_node__coll__graph.md5 new file mode 100644 index 0000000..dad15e8 --- /dev/null +++ b/docs/structfp_1_1implementation_1_1stl_node__coll__graph.md5 @@ -0,0 +1 @@ +b695c1e91aa69caece39a5fcec5db337 \ No newline at end of file diff --git a/docs/structfp_1_1implementation_1_1stl_node__coll__graph.png b/docs/structfp_1_1implementation_1_1stl_node__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..290367911f4619f79555e89842c1a219def8559a GIT binary patch literal 8576 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,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/docs/topics.html b/docs/topics.html index ee1becd..c33b632 100644 --- a/docs/topics.html +++ b/docs/topics.html @@ -3,16 +3,18 @@ - + flippy: Topics + - + + @@ -43,19 +45,24 @@

- + + @@ -73,7 +80,7 @@
@@ -113,7 +120,7 @@ diff --git a/docs/utils_8hpp.html b/docs/utils_8hpp.html index 2c3fe2f..af491a6 100644 --- a/docs/utils_8hpp.html +++ b/docs/utils_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/utilities/utils.hpp File Reference + - + + @@ -43,19 +45,24 @@
- + + @@ -73,7 +80,7 @@
@@ -117,30 +124,56 @@ Include dependency graph for utils.hpp:
+ + + + + + + + + + + + +
This graph shows which files directly or indirectly include this file:
+ + + + + + + + + + + + +

Go to the source code of this file.

- +

Namespaces

namespace  fp
namespace  fp
 
- + - + - - + +

Functions

static void fp::json_dump (std::string const &file_name, const Json &data)
static void fp::json_dump (std::string const &file_name, const Json &data)
 Simple wrapper function around Json objects built in dump() method.
 
static Json fp::json_read (std::string file_name)
static Json fp::json_read (std::string file_name)
 Simple wrapper function that reads the content of a text file into a json object.
 
template<typename T >
static bool fp::is_member (std::vector< T > const &v, T const &el)
template<typename T >
static bool fp::is_member (std::vector< T > const &v, T const &el)
 Convenient wrapper around std::find, which only works for std::vectors.
 
@@ -152,7 +185,7 @@ diff --git a/docs/utils_8hpp__dep__incl.dot b/docs/utils_8hpp__dep__incl.dot deleted file mode 100644 index 1476ed3..0000000 --- a/docs/utils_8hpp__dep__incl.dot +++ /dev/null @@ -1,15 +0,0 @@ -digraph "flippy/utilities/utils.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/utilities/utils.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="This file contains helper functions that are used throughout flippy, but are not specific to any give..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="flippy/MonteCarloUpdater.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_monte_carlo_updater_8hpp.html",tooltip="This file contains the MonteCarloUpdater class template. Together with Triangulation...."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="flippy/flippy.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$flippy_8hpp.html",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; - Node1 -> Node4 [id="edge4_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/utils_8hpp__dep__incl.map b/docs/utils_8hpp__dep__incl.map new file mode 100644 index 0000000..c99ec29 --- /dev/null +++ b/docs/utils_8hpp__dep__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/utils_8hpp__dep__incl.md5 b/docs/utils_8hpp__dep__incl.md5 new file mode 100644 index 0000000..48c902c --- /dev/null +++ b/docs/utils_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +5ff3811d01df7f0824cb5984ac661d24 \ No newline at end of file diff --git a/docs/utils_8hpp__dep__incl.png b/docs/utils_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..eb66c11f26a6f02ba556b8003f28d17bf4987799 GIT binary patch literal 19272 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 Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="fstream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="utility",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="filesystem",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="type_traits",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; -} diff --git a/docs/utils_8hpp__incl.map b/docs/utils_8hpp__incl.map new file mode 100644 index 0000000..98ae1b4 --- /dev/null +++ b/docs/utils_8hpp__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/utils_8hpp__incl.md5 b/docs/utils_8hpp__incl.md5 new file mode 100644 index 0000000..4665d39 --- /dev/null +++ b/docs/utils_8hpp__incl.md5 @@ -0,0 +1 @@ +35488e42dcb72a8411d08ceecdb13f95 \ No newline at end of file diff --git a/docs/utils_8hpp__incl.png b/docs/utils_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..19a026c000faa5123b74f19e0cf20f750aecdeda GIT binary patch literal 9834 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 Je{J&VzW^poTzLQh literal 0 HcmV?d00001 diff --git a/docs/utils_8hpp_source.html b/docs/utils_8hpp_source.html index eb6646a..fc70a8a 100644 --- a/docs/utils_8hpp_source.html +++ b/docs/utils_8hpp_source.html @@ -3,16 +3,18 @@ - + flippy: flippy/utilities/utils.hpp Source File + - + + @@ -43,28 +45,28 @@ - + + -
@@ -116,52 +118,51 @@
11#include <type_traits>
12
13namespace fp {
-
19using Json = nlohmann::json;
+
19using Json = nlohmann::json;
20
-
26static inline void json_dump(std::string const& file_name, const Json& data)
+
26static inline void json_dump(std::string const& file_name, const Json& data)
27{
-
28 std::ofstream o(file_name + ".json");
-
29 o << data.dump();
-
30 o.close();
+
28 std::ofstream o(file_name + ".json");
+
29 o << data.dump();
+
30 o.close();
31}
32
-
43static Json inline json_read(std::string file_name)
+
43static Json inline json_read(std::string file_name)
44{
-
45 auto pos_json = file_name.find_last_of(".json");
-
46 auto not_json = (file_name.size() - 1!=pos_json);
-
47 if (not_json) { file_name = file_name + ".json"; }
-
48 std::ifstream o(file_name);
-
49 Json data;
-
50 o >> data;
-
51 o.close();
+
45 auto pos_json = file_name.find_last_of(".json");
+
46 auto not_json = (file_name.size() - 1!=pos_json);
+
47 if (not_json) { file_name = file_name + ".json"; }
+
48 std::ifstream o(file_name);
+
49 Json data;
+
50 o >> data;
+
51 o.close();
52 return data;
53}
54
63template<typename T>
-
64[[maybe_unused]] static bool is_member(std::vector<T> const& v, T const& el){
-
65 return (std::find(v.begin(),v.end(), el) != v.end());
+
64[[maybe_unused]] static bool is_member(std::vector<T> const& v, T const& el){
+
65 return (std::find(v.begin(),v.end(), el) != v.end());
66}
68}
69#endif
-
nlohmann::json Json
shortening of the nlohmann::json namespace, which is an external open source library bundled by flipp...
Definition Nodes.hpp:16
static void json_dump(std::string const &file_name, const Json &data)
Simple wrapper function around Json objects built in dump() method.
Definition utils.hpp:26
static bool is_member(std::vector< T > const &v, T const &el)
Convenient wrapper around std::find, which only works for std::vectors.
Definition utils.hpp:64
+
nlohmann::json Json
shortening of the nlohmann::json namespace, which is an external open source library bundled by flipp...
Definition Nodes.hpp:16
static Json json_read(std::string file_name)
Simple wrapper function that reads the content of a text file into a json object.
Definition utils.hpp:43
Definition custom_concepts.hpp:8
-
A helper struct; keeps track of bond flips.
Definition Triangulation.hpp:84
diff --git a/docs/vec3_8hpp.html b/docs/vec3_8hpp.html index 4503253..06dc48a 100644 --- a/docs/vec3_8hpp.html +++ b/docs/vec3_8hpp.html @@ -3,16 +3,18 @@ - + flippy: flippy/vec3.hpp File Reference + - + + @@ -43,19 +45,24 @@ - + + @@ -73,7 +80,7 @@
@@ -116,11 +123,48 @@ Include dependency graph for vec3.hpp:
+ + + + + + + + + + + + +
This graph shows which files directly or indirectly include this file:
+ + + + + + + + + + + + + + + + + + + + + + + +

Go to the source code of this file.

@@ -133,7 +177,7 @@ - +

Namespaces

namespace  fp
namespace  fp
 

Detailed Description

@@ -144,7 +188,7 @@ diff --git a/docs/vec3_8hpp__dep__incl.dot b/docs/vec3_8hpp__dep__incl.dot deleted file mode 100644 index e95bd35..0000000 --- a/docs/vec3_8hpp__dep__incl.dot +++ /dev/null @@ -1,26 +0,0 @@ -digraph "flippy/vec3.hpp" -{ - // LATEX_PDF_SIZE - bgcolor="transparent"; - edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; - node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; - Node1 [id="Node000001",label="flippy/vec3.hpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Header file containing the definition and implementation a 3 dimensional vector class,..."]; - Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="flippy/Nodes.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_nodes_8hpp.html",tooltip="This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o..."]; - Node2 -> Node3 [id="edge2_Node000002_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="flippy/MonteCarloUpdater.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_monte_carlo_updater_8hpp.html",tooltip="This file contains the MonteCarloUpdater class template. Together with Triangulation...."]; - Node2 -> Node4 [id="edge3_Node000002_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="flippy/Triangulation.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulation_8hpp.html",tooltip="This file contains the fp::Triangulation class and several related helper classes...."]; - Node4 -> Node3 [id="edge4_Node000004_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node4 -> Node5 [id="edge5_Node000004_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="flippy/flippy.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$flippy_8hpp.html",tooltip="This header file exists for convenience. Including this header will automatically include all parts o..."]; - Node2 -> Node5 [id="edge6_Node000002_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node4 [id="edge7_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node6 [id="edge8_Node000001_Node000006",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="flippy/Triangulator.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$_triangulator_8hpp.html",tooltip="This file contains internal implementation details and is not part of the stable public api...."]; - Node6 -> Node4 [id="edge9_Node000006_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node5 [id="edge10_Node000001_Node000005",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node1 -> Node7 [id="edge11_Node000001_Node000007",dir="back",color="steelblue1",style="solid",tooltip=" "]; - Node7 [id="Node000007",label="flippy/stlSerializer.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$stl_serializer_8hpp_source.html",tooltip=" "]; - Node7 -> Node4 [id="edge12_Node000007_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; -} diff --git a/docs/vec3_8hpp__dep__incl.map b/docs/vec3_8hpp__dep__incl.map new file mode 100644 index 0000000..41c937e --- /dev/null +++ b/docs/vec3_8hpp__dep__incl.map @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/vec3_8hpp__dep__incl.md5 b/docs/vec3_8hpp__dep__incl.md5 new file mode 100644 index 0000000..f27c653 --- /dev/null +++ b/docs/vec3_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +c926763cc159c059168b21346c4f7072 \ No newline at end of file diff --git a/docs/vec3_8hpp__dep__incl.png b/docs/vec3_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2f899ad47e20ced2f37e026da776f1c53efe3e GIT binary patch literal 40696 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 Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; - Node2 [id="Node000002",label="ostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; - Node3 [id="Node000003",label="iostream",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; - Node4 [id="Node000004",label="cmath",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; - Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; - Node5 [id="Node000005",label="custom_concepts.hpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$custom__concepts_8hpp.html",tooltip="This file contains the concepts that are costomly defined for the flippy class templates."]; - Node5 -> Node6 [id="edge5_Node000005_Node000006",color="steelblue1",style="solid",tooltip=" "]; - Node6 [id="Node000006",label="concepts",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; -} diff --git a/docs/vec3_8hpp__incl.map b/docs/vec3_8hpp__incl.map new file mode 100644 index 0000000..87dcf25 --- /dev/null +++ b/docs/vec3_8hpp__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/vec3_8hpp__incl.md5 b/docs/vec3_8hpp__incl.md5 new file mode 100644 index 0000000..ddf0159 --- /dev/null +++ b/docs/vec3_8hpp__incl.md5 @@ -0,0 +1 @@ +ba4e848c0dca8f41278425162f2b1c8b \ No newline at end of file diff --git a/docs/vec3_8hpp__incl.png b/docs/vec3_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..603f9e9c0deee7fd5ed6ae199ad47b58a9d1d49f GIT binary patch literal 12217 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�!jMCPM&h2B6f&ktE>tVBhMF>m*}7NKM8;3bd|K zV5icycU-s9D0~P1*`0rp5C7b-e+A)22LP<2I70PZFE1H#5StvTTQ$q=xT_X(E$UA# z5g8q?e0r?w;^LBjDMCLuW{ z<_&NqW@l%=c<}<4n79|XO%aAv&{F{~Rcw0tFzB@VKz)+e(}SLDjnZ*)5`ne>N=@AW zLWRfr7v#r}A6>n@RbXWRIt>HoRN6v{viyH$ItXja1wJf*MM=DuTHM&3_BHtV`9TZz zeR(+(lzZf{YSRyaSfp>=-J5T30lp?*T3P~FdJNDdfD!tnmkemF=Kyvb9$Je&01i3C zvl<#{Ekkq}&d9*H2AcJOZ|`$108zjk@=3IBXvhHcZU9%YSuJoUFcn@Fb#6aVmZEov z0eyzuFvs+hIU;;~y=7uV%b{JQQW6{yQF9O4JpJqYmgZ())O+<09=Eo(&c5B7uR{ZH z3>8?n`dVASI)D#!=Sw{R_JhE5DF<46geea^wbf4tdW(e=@qbpG3)zCU{^A z3&5W&7Sx=7mxCU39FQQ_qeO#L#7&~>m4;W>*K1o_yxn$F`mm;V9#MhjsaS#08h z0QidF77%nE6bj`Amj)p7uYk2W6a5%#inz7Rgv}BHzwFulbLeeytri0@&j(bWIXo~ zz>jD;;PUVTBGUr!761sZ?CnLAl^xJjIJ>#6?e9kh9|Cd&Tn$89xR=N<2o)5h)F1Ky zPim@ca`E{fTy}60;3^fPC5KQ^W!jclswgHuq^1b_5WNr@n&-_LSX9>9IAqhn21wU9 z#Yr`gXo?o~vL^pYKky!2`|b81D$ng*7C6U$w~YV0POl)c@7h9x-3uBT9zHDPeninS ti(oe%0qh8P`(OTc@Y;Xb-Qg{FR9D1JC>;?nV&KJxNQ%jcmcG^T{a*$ - + flippy: flippy/vec3.hpp Source File + - + + @@ -43,28 +45,28 @@ - + + -
@@ -129,59 +131,59 @@
49
51
-
60 void add(vec3<Real> const& v)
+
60 void add(vec3<Real> const& v)
61 {
-
62 x += v.x;
-
63 y += v.y;
-
64 z += v.z;
+
62 x += v.x;
+
63 y += v.y;
+
64 z += v.z;
65 }
66
68
-
77 void subtract(vec3<Real> const& v)
+
77 void subtract(vec3<Real> const& v)
78 {
-
79 x -= v.x;
-
80 y -= v.y;
-
81 z -= v.z;
+
79 x -= v.x;
+
80 y -= v.y;
+
81 z -= v.z;
82 }
84
-
88 void scale(Real s)
+
88 void scale(Real s)
89 {
-
90 x = s*x;
-
91 y = s*y;
-
92 z = s*z;
+
90 x = s*x;
+
91 y = s*y;
+
92 z = s*z;
93 }
94
96
-
106 Real dot(vec3<Real> const& v) const
+
106 Real dot(vec3<Real> const& v) const
107 {
-
108 Real res = x*v.x + y*v.y + z*v.z;
-
109 return res;
+
108 Real res = x*v.x + y*v.y + z*v.z;
+
109 return res;
110 }
111
113
-
118 [[nodiscard]] constexpr std::size_t size() const { return 3; }
+
118 [[nodiscard]] constexpr std::size_t size() const { return 3; }
119
121
-
133 static inline vec3<Real> cross(vec3<Real> const& a, vec3<Real> const& b)
+
133 static inline vec3<Real> cross(vec3<Real> const& a, vec3<Real> const& b)
134 {
- -
136 res.x = a.y*b.z - a.z*b.y;
-
137 res.y = a.z*b.x - a.x*b.z;
-
138 res.z = a.x*b.y - a.y*b.x;
-
139 return res;
+
135 vec3<Real> res;
+
136 res.x = a.y*b.z - a.z*b.y;
+
137 res.y = a.z*b.x - a.x*b.z;
+
138 res.z = a.x*b.y - a.y*b.x;
+
139 return res;
140 }
141
143
-
153 vec3<Real> cross(vec3<Real> const& other) const { return cross(*this, other); }
+
153 vec3<Real> cross(vec3<Real> const& other) const { return cross(*this, other); }
154
156
164 Real norm() const { return std::sqrt(this->dot(*this)); }
@@ -191,89 +193,89 @@
176
178
- +
185 *this= *this/this->norm();
186 return *this;
187 }
188
-
190 friend std::ostream& operator<<(std::ostream& os, const vec3<Real>& obj)
+
190 friend std::ostream& operator<<(std::ostream& os, const vec3<Real>& obj)
191 {
-
192 os << "{" << obj.x << ',' << obj.y << ',' << obj.z << '}';
-
193 return os;
+
192 os << "{" << obj.x << ',' << obj.y << ',' << obj.z << '}';
+
193 return os;
194 }
195
197
-
201 bool operator==(vec3<Real> const& other) const =default;
+
201 bool operator==(vec3<Real> const& other) const =default;
202
203
205
- +
212 {
-
213 lhs+=rhs;
-
214 return lhs;
+
213 lhs+=rhs;
+
214 return lhs;
215 }
216
218
-
223 friend void operator+=(vec3<Real>& lhs, vec3<Real> const& rhs)
+
223 friend void operator+=(vec3<Real>& lhs, vec3<Real> const& rhs)
224 {
-
225 lhs.add(rhs);
+
225 lhs.add(rhs);
226 }
227
229
- +
236 {
-
237 lhs-=rhs;
-
238 return lhs;
+
237 lhs-=rhs;
+
238 return lhs;
239 }
240
242
-
247 friend void operator-=(vec3<Real>& lhs, vec3<Real> const& rhs)
+
247 friend void operator-=(vec3<Real>& lhs, vec3<Real> const& rhs)
248 {
-
249 lhs.subtract(rhs);
+
249 lhs.subtract(rhs);
250 }
251
253
-
259 friend vec3<Real> operator*(Real const& lhs, vec3<Real> rhs)
+
259 friend vec3<Real> operator*(Real const& lhs, vec3<Real> rhs)
260 {
-
261 rhs.scale(lhs);
-
262 return rhs;
+
261 rhs.scale(lhs);
+
262 return rhs;
263 }
264
266
-
272 friend vec3<Real> operator*(vec3<Real> lhs, Real const& rhs)
+
272 friend vec3<Real> operator*(vec3<Real> lhs, Real const& rhs)
273 {
-
274 lhs.scale(rhs);
-
275 return lhs;
+
274 lhs.scale(rhs);
+
275 return lhs;
276 }
277
279
-
285 friend void operator/=(vec3<Real>& lhs, Real const& rhs){
-
286 lhs.scale((Real)1/rhs);
+
285 friend void operator/=(vec3<Real>& lhs, Real const& rhs){
+
286 lhs.scale((Real)1/rhs);
287 }
288
290
-
297 friend vec3<Real> operator/(vec3<Real> lhs, Real const& rhs)
+
297 friend vec3<Real> operator/(vec3<Real> lhs, Real const& rhs)
298 {
-
299 lhs/=rhs;
-
300 return lhs;
+
299 lhs/=rhs;
+
300 return lhs;
301 }
302
@@ -281,14 +283,14 @@
311 template<typename Index>
312 requires std::is_integral_v<Index>
-
313 Real& operator[](Index idx)
+
313 Real& operator[](Index idx)
314 {
-
315 switch (idx) {
+
315 switch (idx) {
316 case 0:return x;
317 case 1:return y;
318 case 2:return z;
-
319 default:std::cerr << idx << "is out of range for as vec3 index";
-
320 exit(12);
+
319 default:std::cerr << idx << "is out of range for as vec3 index";
+
320 exit(12);
321 }
322 }
@@ -297,37 +299,37 @@
332 template<typename Index>
333 requires std::is_integral_v<Index>
-
334 const Real& operator[](Index idx) const
+
334 const Real& operator[](Index idx) const
335 {
-
336 switch (idx) {
+
336 switch (idx) {
337 case 0:return x;
338 case 1:return y;
339 case 2:return z;
-
340 default:std::cerr << idx << "is out of range for as vec3 index";
-
341 exit(12);
+
340 default:std::cerr << idx << "is out of range for as vec3 index";
+
341 exit(12);
342 }
343 }
344
346
- +
352 {
-
353 v.x = -v.x;
-
354 v.y = -v.y;
-
355 v.z = -v.z;
-
356 return v;
+
353 v.x = -v.x;
+
354 v.y = -v.y;
+
355 v.z = -v.z;
+
356 return v;
357 }
358
360
- +
366 {
-
367 v.x = -v.x;
-
368 v.y = -v.y;
-
369 v.z = -v.z;
-
370 return v;
+
367 v.x = -v.x;
+
368 v.y = -v.y;
+
369 v.z = -v.z;
+
370 return v;
371 }
372
@@ -366,14 +368,13 @@
friend void operator-=(vec3< Real > &lhs, vec3< Real > const &rhs)
Overloaded operator defined in terms of vec3::subtract.
Definition vec3.hpp:247
This file contains the concepts that are costomly defined for the flippy class templates.
Definition custom_concepts.hpp:8
-
A helper struct; keeps track of bond flips.
Definition Triangulation.hpp:84
diff --git a/flippy/GradientDescentMinimizer.h b/flippy/GradientDescentMinimizer.h new file mode 100644 index 0000000..303ce4e --- /dev/null +++ b/flippy/GradientDescentMinimizer.h @@ -0,0 +1,8 @@ +// +// Created by George Dadunashvili on 26.12.23. +// + +#ifndef NODES_HPP_GRADIENTDESCENTMINIMIZER_H +#define NODES_HPP_GRADIENTDESCENTMINIMIZER_H + +#endif //NODES_HPP_GRADIENTDESCENTMINIMIZER_H From 3f59f2e6db820905fc3431152e58a5db6bb0dc99 Mon Sep 17 00:00:00 2001 From: dadu Date: Thu, 6 Jun 2024 16:23:41 +0200 Subject: [PATCH 06/59] made two flip_MC_updater functions codependent --- flippy/MonteCarloUpdater.hpp | 21 +- single_header_flippy/flippy.hpp | 13077 +++++++++++++++--------------- 2 files changed, 6568 insertions(+), 6530 deletions(-) diff --git a/flippy/MonteCarloUpdater.hpp b/flippy/MonteCarloUpdater.hpp index 85d43ea..9828d25 100755 --- a/flippy/MonteCarloUpdater.hpp +++ b/flippy/MonteCarloUpdater.hpp @@ -193,15 +193,16 @@ class MonteCarloUpdater */ void flip_MC_updater(fp::Node const& node) { - ++flip_attempt; - e_old = energy_function(node, triangulation, prms); - Index number_nn_ids = node.nn_ids.size(); - Index nn_id = node.nn_ids[std::uniform_int_distribution(0, number_nn_ids-1)(rng)]; - auto bfd = triangulation.flip_bond(node.id, nn_id, min_bond_length_square, max_bond_length_square); - if (bfd.flipped) { - e_new = energy_function(node, triangulation, prms); - if (move_needs_undoing()) { triangulation.unflip_bond(node.id, nn_id, bfd); ++flip_back;} - }else{++bond_length_flip_rejection;} + Index number_nn_ids = static_cast(node.nn_ids.size()); + Index nn_id = node.nn_ids[std::uniform_int_distribution(0, number_nn_ids-1)(rng)]; + flip_MC_updater(node, nn_id); +// ++flip_attempt; +// e_old = energy_function(node, triangulation, prms); +// auto bfd = triangulation.flip_bond(node.id, nn_id, min_bond_length_square, max_bond_length_square); +// if (bfd.flipped) { +// e_new = energy_function(node, triangulation, prms); +// if (move_needs_undoing()) { triangulation.unflip_bond(node.id, nn_id, bfd); ++flip_back;} +// }else{++bond_length_flip_rejection;} } //! Attempt a flip Monte Carlo Step. @@ -219,7 +220,7 @@ class MonteCarloUpdater { ++flip_attempt; e_old = energy_function(node, triangulation, prms); - Index number_nn_ids = node.nn_ids.size(); +// Index number_nn_ids = node.nn_ids.size(); // Index nn_id = index_in_nn_ids;//node.nn_ids[std::uniform_int_distribution(0, number_nn_ids-1)(rng)]; auto bfd = triangulation.flip_bond(node.id, id_in_nn_ids, min_bond_length_square, max_bond_length_square); if (bfd.flipped) { diff --git a/single_header_flippy/flippy.hpp b/single_header_flippy/flippy.hpp index ae0730a..17c8a0c 100644 --- a/single_header_flippy/flippy.hpp +++ b/single_header_flippy/flippy.hpp @@ -58,21 +58,10 @@ -// begin --- Triangulator.hpp --- - -#ifndef FLIPPY_TRIANGULATOR_HPP -#define FLIPPY_TRIANGULATOR_HPP -/** - * @file - * @brief This file contains internal implementation details and is not part of the stable public api. - * The classes and methods implemented here are responsible for creating the intitial triangulations. - */ +// begin --- GradientDescentUpdater.h --- -#include -#include -#include -#include -#include +#ifndef FLIPPY_HPP_GRADIENTDESCENTUPDATER_H +#define FLIPPY_HPP_GRADIENTDESCENTUPDATER_H // begin --- custom_concepts.hpp --- @@ -118,4747 +107,4528 @@ template concept indexing_number = std::is_unsigned_v && std::is_int -// begin --- vec3.hpp --- +// begin --- Triangulation.hpp --- -#ifndef FLIPPY_VEC3_HPP -#define FLIPPY_VEC3_HPP +#ifndef FLIPPY_TRIANGULATION_HPP +#define FLIPPY_TRIANGULATION_HPP /** * @file - * @brief Header file containing the definition and implementation a 3 dimensional vector class, with useful - * mathematical operations like cross and dot products as member methods. + * @brief This file contains the fp::Triangulation class and several related helper classes. This is the core of flippy. */ +#include +#include +// begin --- Nodes.hpp --- -#include -#include -#include - - -namespace fp{ - +#ifndef FLIPPY_NODES_HPP +#define FLIPPY_NODES_HPP /** - * \brief Internal implementation of a 3D vector. - * - * !!! vec3 does not throw !!! This means that if you ask vec3 to divide a vector by 0 or more realistically if you - * normalize a zero length vector vec3 will not check for the division by zero and will return a nan result! - * Since vec3 is used everywhere in flippy, including in very expensive calculations, I decided to omit the security check - * for the sake of speed. - * - * To keep the external dependencies low, flippy implements it's own 3D vector class with basic functionality like dot product and cross product - * - * Example: - * ```c++ - * fp::vec3 v1{1,0,0}; - * fp::vec3 v2{0,0,1}; - * - * assert(v1.dot(v2)==0); - * assert(v1.cross(v2).norm()==1); - * assert(((v1-v2)==fp::vec3{1.,0.,-1.})); - * ``` - * - * @tparam Real @RealStub + * @file + * @brief This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node of the triangulation + * and the collection of all nodes of the triangulation, respectively. */ +#include +#include -template -class vec3 -{ -public: +// begin --- json.hpp --- - Real x; //!< The x component of the vector. - Real y; //!< The y component of the vector. - Real z; //!< The z component of the vector. +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.10.5 +|_____|_____|_____|_|___| https://github.com/nlohmann/json - //! In place addition method. - /** - * Example: - * ```c++ - * fp::vec3 v1{1,0,0}; - * fp::vec3 v2{0,0,1}; - * v1.add(v2); // v1 will contain {1, 0, 1} - * ``` - * @param v add this vector elementwise to the vector that is calling the *add* method. - */ - void add(vec3 const& v) - { - x += v.x; - y += v.y; - z += v.z; - } +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2022 Niels Lohmann . - //! In place subtraction method. - /** - * Example: - * ```c++ - * fp::vec3 v1{2,0,0}; - * fp::vec3 v2{1,0,1}; - * v1.subtract(v2); // v1 will contain {1, 0, -1} - * ``` - * @param v subtract this vector elementwise from the vector that is calling the *subtract* method. - */ - void subtract(vec3 const& v) - { - x -= v.x; - y -= v.y; - z -= v.z; - } - //! Scale the vector by a real number s. - /** - * This function scales the vector in-place by the provided number `s`. - * @param s multiplicative prefactor. - */ - void scale(Real s) - { - x = s*x; - y = s*y; - z = s*z; - } +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - //! Calculate dot product with another vector. - /** - * Example: - * @code{c++} - * fp::vec3 v1{1,0,0}; - * fp::vec3 v2{2,0,1}; - * double res = v1.dot(v2); // res will contain 2*1 + 0*0 + 0*1=2 - * @endcode - * @param v the other vec3 vector - * @return result of the dot product between the original vector and `v`. - */ - Real dot(vec3 const& v) const - { - Real res = x*v.x + y*v.y + z*v.z; - return res; - } +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - //! Always returns 3. - /** - * This function always returns 3 since vec3 can only have three elements. - * It was implemented for completeness, to make it more easy for vec3 to be used as a drop-in replacement for other vector types. - * @return Size (number of elements) of vec3. - */ - [[nodiscard]] constexpr std::size_t size() const { return 3; } +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ - //! Calculate cross product between two vectors. - /** - * A static method to calculate cross product between two vectors. - * Example: - * @code{c++} - * fp::vec3 v1{1,0,0}; - * fp::vec3 v2{0,1,0}; - * fp::vec3 v3 = cross(v1, v2); // v3 will contain {0,0,1} - * @endcode - * @param a first vector of the cross product - * @param b second vector of the cross product - * @return result of the cross product between the original vector and `v`. - */ - static inline vec3 cross(vec3 const& a, vec3 const& b) - { - vec3 res; - res.x = a.y*b.z - a.z*b.y; - res.y = a.z*b.x - a.x*b.z; - res.z = a.x*b.y - a.y*b.x; - return res; - } +/****************************************************************************\ + * 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 doc/README.md. * +\****************************************************************************/ - //! Calculate cross product with another vector. - /** - * Example: - * @code{c++} - * fp::vec3 v1{1,0,0}; - * fp::vec3 v2{0,1,0}; - * fp::vec3 v3 = v1.cross(v2); // v3 will contain {0,0,1} - * @endcode - * @param other the other vec3 vector. - * @return result of the cross product between the original vector and `other`. - */ - vec3 cross(vec3 const& other) const { return cross(*this, other); } +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ - //! Returns the norm of the vector. - /** - * Example: - * @code{c++} - * fp::vec3 v{1,0,1}; - * double res = v.norm(); // res will contain 1,4142135624... i.e. sqrt(2) - * @endcode - * @return The euclidian norm of the vector. - */ - Real norm() const { return std::sqrt(this->dot(*this)); } +#define NLOHMANN_JSON_VERSION_MAJOR 3 +#define NLOHMANN_JSON_VERSION_MINOR 10 +#define NLOHMANN_JSON_VERSION_PATCH 5 - //! Returns the square of the norm of the vector. - /** - * Example: - * @code{c++} - * fp::vec3 v{1,0,1}; - * double res = v.norm_square(); // res will contain 2 - * @endcode - * @return Square of the euclidian norm of the vector. - */ - Real norm_square() const { return this->dot(*this); } +#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 // accumulate +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector - //! Normalize the vector in place. And return a reference to the new normalized vector. - /** - * @warning If you normalize a zero length vector, you effectively - * demand to divide by zero! this function will not do a security check - * for you and will just return nan! - * @return Reference to the normalized vector. - */ - vec3const& normalize(){ - *this= *this/this->norm(); - return *this; - } +// #include - //! Streaming operator for easy printing of the vector. - friend std::ostream& operator<<(std::ostream& os, const vec3& obj) - { - os << "{" << obj.x << ',' << obj.y << ',' << obj.z << '}'; - return os; - } - //! default equality operator. - /** - * @param other vec3 on the right hand side of the comparison operator. - * @return `true` if all elements of the compared vectors are equal and to `false` otherwise. - */ - bool operator==(vec3 const& other) const =default; +#include +#include +// #include - //! Overloaded operator defined in terms of vec2::add. - /** - * - * @param lhs left hand side of the `+` operator - * @param rhs right hand side oif the `+` operator - * @return equivalent to a new copy of `lhs.add(rhs)`. - */ - friend vec3 operator+(vec3 lhs, vec3 const& rhs) - { - lhs+=rhs; - return lhs; - } - //! Overloaded operator defined in terms of vec3::add. - /** - * Equivalent to `lhs.add(rhs)`. - * @param lhs left hand side of the `+=` operator - * @param rhs right hand side oif the `+=` operator - */ - friend void operator+=(vec3& lhs, vec3 const& rhs) - { - lhs.add(rhs); - } +#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 - //! Overloaded operator defined in terms of vec3::subtract. - /** - * - * @param lhs left hand side of the `-` operator - * @param rhs right hand side oif the `-` operator - * @return equivalent to a new copy of `lhs.subtract(rhs)`. - */ - friend vec3 operator-(vec3 lhs, vec3 const& rhs) - { - lhs-=rhs; - return lhs; - } +// #include - //! Overloaded operator defined in terms of vec3::subtract. - /** - * Equivalent to `lhs.subtract(rhs)`. - * @param lhs left hand side of the `-=` operator - * @param rhs right hand side oif the `-=` operator - */ - friend void operator-=(vec3& lhs, vec3 const& rhs) - { - lhs.subtract(rhs); - } - //! Overloaded operator defined in terms of vec3::scale. - /** - * Left multiplication by a scalar `s*v`. - * @param lhs left hand side of the `*` operator - * @param rhs right hand side oif the `*` operator - * @return equivalent to a new copy of `rhs.scale(lhs)`. - */ - friend vec3 operator*(Real const& lhs, vec3 rhs) - { - rhs.scale(lhs); - return rhs; - } +#include // exception +#include // runtime_error +#include // to_string +#include // vector - //! Overloaded operator defined in terms of vec3::scale. - /** - * Right multiplication by a scalar `v*s`. - * @param lhs left hand side of the `*` operator - * @param rhs right hand side oif the `*` operator - * @return equivalent to a new copy of `lhs.scale(rhs)`. - */ - friend vec3 operator*(vec3 lhs, Real const& rhs) - { - lhs.scale(rhs); - return lhs; - } +// #include - //! Overloaded operator defined in terms of vec3::scale. - /** - * In place division by a scalar `v/s`, equivalent to `lhs.scale(1/rhs)`. - * @param lhs left hand side of the `/=` operator - * @param rhs right hand side oif the `/=` operator - * @warning for performance reasons, this function will not check for zero division! - */ - friend void operator/=(vec3& lhs, Real const& rhs){ - lhs.scale((Real)1/rhs); - } - //! Overloaded operator defined in terms of vec3::scale. - /** - * Division by a scalar `v/s`. - * @param lhs left hand side of the `/` operator - * @param rhs right hand side oif the `/` operator - * @return equivalent to a new copu of `lhs.scale(1/rhs)`. - * @warning for performance reasons, this function will not check for zero division! - */ - friend vec3 operator/(vec3 lhs, Real const& rhs) - { - lhs/=rhs; - return lhs; - } +#include // array +#include // size_t +#include // uint8_t +#include // string - //! element access operator. - /** - * @tparam Index automatically deduced type of the index. - * @param idx can only be 0 1 or 2. Any other number will cause the program to exit with an error. - * @return for a vec3 v: v[1] returns v.x, v[2] returns v.y and v[3] returns v.z. - * - * @note: The use of the subscription operator might be slower than the direct access of the data member. - */ - template - requires std::is_integral_v - Real& operator[](Index idx) - { - switch (idx) { - case 0:return x; - case 1:return y; - case 2:return z; - default:std::cerr << idx << "is out of range for as vec3 index"; - exit(12); - } - } +namespace nlohmann +{ +namespace detail +{ +/////////////////////////// +// JSON type enumeration // +/////////////////////////// - //! element access operator for constant environments. - /** - * @tparam Index automatically deduced type of the index. - * @param idx can only be 0 1 or 2. Any other number will cause the program to exit with an error. - * @return for a vec3 v: v[1] returns a constant reference to v.x, v[2] returns a constant reference to v.y and v[3] returns a constant reference to v.z. - * - * @note: The use of the subscription operator might be slower than the direct access of the data member. - */ - template - requires std::is_integral_v - const Real& operator[](Index idx) const - { - switch (idx) { - case 0:return x; - case 1:return y; - case 2:return z; - default:std::cerr << idx << "is out of range for as vec3 index"; - exit(12); - } - } +/*! +@brief the JSON type enumeration - //! Unary minus operator. - /** - * - * @param v original vector. - * @return A copy of -v the vector v itself stays unaffected. - */ - friend vec3 operator-(vec3 v) - { - v.x = -v.x; - v.y = -v.y; - v.z = -v.z; - return v; - } +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. - //! Unary minus operator for rvalues. - /** - * - * @param v an rvalue vec3 vector. - * @return The rvalue vector `v` is moved into the function and `-v` is returned. - */ - friend vec3 operator-(vec3&& v) - { - v.x = -v.x; - v.y = -v.y; - v.z = -v.z; - return v; - } +@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 }; -} -#endif //FLIPPY_VEC3_HPP +/*! +@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. -// end --- vec3.hpp --- +@since version 1.0.0 +*/ +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + 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); + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +} +} // namespace detail +} // namespace nlohmann +// #include -/** - * @GlobalsStub - * @{ - */ -//! The M_PI macro is not defined on for all compilers, so it is defined here (if a definition does not already exist). -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -/**@}*/ - -/** - * The API stability of the functions in the implementation namespace is not guaranteed! - * Functions that are part of the implementation namespace are not part of the public facing API and are not intended fot the end-user. - * Since flippy is a headers only library this could not be hidden in source files. - */ -namespace fp::implementation{ +#include +// #include -//! @private -template -struct SimpleNodeData{ - std::string hash{}; - Index id{}; - vec3 pos{}; - std::unordered_set nn_hashes{}; -}; -//! @private -template -class IcosahedronSubTriangulation -{ -public: - static std::string hash_node(Index c) - { - /** - * returns a unique hash for a corner node, which is just the id of that corner node. - */ - return std::to_string(c); - } +#include // declval, pair +// #include - static std::string hash_node(Index c0, Index c1, Index n) - { - /** - * returns a unique hash for a node on one of the sides of the initial triangle. - * This hash is determined by the (ordered) corner nodes of the initial edge and the index of the node. - */ - Index a = std::min(c0, c1); - Index b = std::max(c0, c1); - return std::to_string(a) + "_" + std::to_string(b) + "_" + std::to_string(n); - } - static std::string hash_node(Index c0, Index c1, Index c2, Index i, Index j) - { - /** - * returns a unique hash for a node in the bulk of the subtriangulation. - */ - std::vector cv{c0, c1, c2}; - std::sort(cv.begin(), cv.end()); +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ - return std::to_string(cv[0]) + "_" + std::to_string(cv[1]) + "_" + std::to_string(cv[2]) - + "_" + std::to_string(i) + "_" + std::to_string(j); - } +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 - static vec3 r_S1(Real R, Real t, Real f) { - vec3 r{R * std::sin(t) * std::cos(f), R * std::sin(t) * std::sin(f), R * std::cos(t)}; - return r; - } +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x - static constexpr int N_ICOSA_FACEs = 20; - static constexpr int N_ICOSA_EDGEs = 30; - static constexpr int N_ICOSA_NODEs = 12; +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) - static constexpr std::array FACE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; - static constexpr std::array NODE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; - static constexpr std::array, N_ICOSA_FACEs> FACE_CORNER_NODES_ = { - std::array{NODE_IDs[0], NODE_IDs[5], NODE_IDs[1]}, - std::array{NODE_IDs[0], NODE_IDs[1], NODE_IDs[2]}, - std::array{NODE_IDs[0], NODE_IDs[2], NODE_IDs[3]}, - std::array{NODE_IDs[0], NODE_IDs[3], NODE_IDs[4]}, - std::array{NODE_IDs[0], NODE_IDs[4], NODE_IDs[5]}, - std::array{NODE_IDs[10], NODE_IDs[5], NODE_IDs[4]}, - std::array{NODE_IDs[10], NODE_IDs[6], NODE_IDs[5]}, - std::array{NODE_IDs[6], NODE_IDs[1], NODE_IDs[5]}, - std::array{NODE_IDs[6], NODE_IDs[7], NODE_IDs[1]}, - std::array{NODE_IDs[7], NODE_IDs[2], NODE_IDs[1]}, - std::array{NODE_IDs[7], NODE_IDs[8], NODE_IDs[2]}, - std::array{NODE_IDs[8], NODE_IDs[3], NODE_IDs[2]}, - std::array{NODE_IDs[8], NODE_IDs[9], NODE_IDs[3]}, - std::array{NODE_IDs[9], NODE_IDs[4], NODE_IDs[3]}, - std::array{NODE_IDs[9], NODE_IDs[10], NODE_IDs[4]}, - std::array{NODE_IDs[11], NODE_IDs[10], NODE_IDs[9]}, - std::array{NODE_IDs[11], NODE_IDs[6], NODE_IDs[10]}, - std::array{NODE_IDs[11], NODE_IDs[7], NODE_IDs[6]}, - std::array{NODE_IDs[11], NODE_IDs[8], NODE_IDs[7]}, - std::array{NODE_IDs[11], NODE_IDs[9], NODE_IDs[8]} - }; +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b - static constexpr const std::array, N_ICOSA_FACEs> FACE_CORNER_NODES = { - std::array{0, 5, 1}, - std::array{0, 1, 2}, - std::array{0, 2, 3}, - std::array{0, 3, 4}, - std::array{0, 4, 5}, - std::array{10, 5, 4}, - std::array{10, 6, 5}, - std::array{6, 1, 5}, - std::array{6, 7, 1}, - std::array{7, 2, 1}, - std::array{7, 8, 2}, - std::array{8, 3, 2}, - std::array{8, 9, 3}, - std::array{9, 4, 3}, - std::array{9, 10, 4}, - std::array{11, 10, 9}, - std::array{11, 6, 10}, - std::array{11, 7, 6}, - std::array{11, 8, 7}, - std::array{11, 9, 8} - }; +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) - static std::unordered_map> make_corner_nodes() - { +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c - Real R = 1.; - std::unordered_map> base_nodes(N_ICOSA_NODEs); - base_nodes[hash_node(0)] = {.hash=hash_node(0), .id=0, .pos=r_S1(R, 0., 0.)}; - std::string hash; - hash.reserve(2); - for (Index i = 1; i<6; ++i) { - hash = hash_node(i); - base_nodes[hash] = { - .hash=hash, - .id=i, - .pos=r_S1(R, - static_cast(M_PI/2. - std::atan(0.5)), - static_cast(2.*M_PI*(static_cast(i) - 1.)/5.))}; - } +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) - for (Index i = 6; i(M_PI/2. + std::atan(0.5)), - static_cast(2.*M_PI*(static_cast(i) - 6.5)/5.))}; - } - hash = hash_node(N_ICOSA_NODEs - 1); - base_nodes[hash] = { - .hash=hash, - .id=static_cast(N_ICOSA_NODEs - 1), - .pos=r_S1(R, static_cast(M_PI), static_cast(0.))}; - return base_nodes; - } +#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)) - enum TriangleRegion - { - TOP_CORNER, BOTTOM_LEFT_CORNER, BOTTOM_RIGHT_CORNER, LEFT_EDGE, BOTTOM_EDGE, DIAGONAL_EDGE, BULK - }; +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) - static TriangleRegion get_region(Index i, Index j, Index sizeMinOne) - { - if (i==0) { return TOP_CORNER; } - else if (j==0 && i==sizeMinOne) { return BOTTOM_LEFT_CORNER; } - else if (j==sizeMinOne && i==sizeMinOne) { return BOTTOM_RIGHT_CORNER; } - else if (j==0) { return LEFT_EDGE; } - else if (i==sizeMinOne) { return BOTTOM_EDGE; } - else if (i==j) { return DIAGONAL_EDGE; } - else { return BULK; } - } +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) - static std::string hash_any(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx) - { - switch (get_region(i, j, maxIdx)) { - case TOP_CORNER:return hash_node(c0); - case BOTTOM_LEFT_CORNER:return hash_node(c1); - case BOTTOM_RIGHT_CORNER:return hash_node(c2); - case LEFT_EDGE:return hash_node(c0, c1, i); - case BOTTOM_EDGE:return hash_node(c1, c2, j); - case DIAGONAL_EDGE:return hash_node(c0, c2, j); - case BULK:return hash_node(c0, c1, c2, i, j); - default: - std::cerr<<"something went wrong! provided indices i: " - < neighbour_hash_vec(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx) - { - std::vector neighbour_hash; - neighbour_hash.reserve(6); - switch (get_region(i, j, maxIdx)) { +#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 - case TOP_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 0, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 1, maxIdx)); - return neighbour_hash; +#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 - case BOTTOM_LEFT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); - return neighbour_hash; +#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 - case BOTTOM_RIGHT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); - return neighbour_hash; +#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 - case LEFT_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx)); - return neighbour_hash; +#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 - case BOTTOM_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); - return neighbour_hash; +#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 - case DIAGONAL_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx)); - return neighbour_hash; +#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 - case BULK:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx)); - neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx)); - return neighbour_hash; - default: - std::cerr<<"something went wrong! provided indices i: " - <= 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 - static Real even_angular_distance_length(Real l, Index k, Index n, Real R = 1.) - { - /** - * The points of the sub-triangulation can not be equally spaced or their angular distances - * won't be the same. - */ - if (k==0) { - return 0; - } - else { - Real fr = static_cast(k)/static_cast(n); - Real denominator = static_cast(l + std::sqrt(4.*R*R - l*l)/std::tan(fr*2.*asin(l/(2.*R)))); - return static_cast(2.)*R*R/denominator; - } - } +#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 - static vec3 get_pos(vec3 const& p0, vec3 const& p1, vec3 const& p2, Index i, Index j, Index maxIdx) - { -/** - * get the position o a node in the sub triangulation of a face of the initial icosahedron. - * ```{.txt} - * p0 - * /___\ - * e1 /__\/__\ e2 - * / \ / \ / \ - * p1 --------- p3 - * e3 - * ``` - */ - vec3 e1 = p1 - p0; - vec3 e2 = p2 - p0; - auto e = e1.norm(); - Real wi = even_angular_distance_length(e, i, maxIdx); +#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 - e1.normalize(); - e2.normalize(); +#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 - vec3 li{}; - Real li_norm{0}; - vec3 interm_1 = p0 + wi*e1; - interm_1.normalize(); - if (i!=0) { - vec3 interm_2 = p0 + wi*e2; - interm_2.normalize(); +#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 - li = interm_2 - interm_1; - li_norm = li.norm(); - li.normalize(); - } - Real wj = even_angular_distance_length(li_norm, j, i); - return interm_1 + wj*li; - } +#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 - static std::tuple get_sorted_face_nodes(std::array face) - { - std::sort(face.begin(), face.end()); - return {static_cast(face[0]), - static_cast(face[1]), - static_cast(face[2])}; - } - static void make_face_nodes(std::unordered_map>& node_cache, Index nIter) - { - vec3 p0, p1, p2, pos; - Index nEdge = nIter + 2;// total Number of nodes on an edge - Index maxIdx = nIter + 1;// max value i or j can have +#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 - std::string hash; - hash.reserve(10); +#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 - std::string c0_h, c1_h, c2_h; - for (auto face: FACE_CORNER_NODES) { - auto[c0, c1, c2] = get_sorted_face_nodes(face); - c0_h = hash_node(c0); - c1_h = hash_node(c1); - c2_h = hash_node(c2); - p0 = node_cache[c0_h].pos; - p1 = node_cache[c1_h].pos; - p2 = node_cache[c2_h].pos; - for (Index i = 0; i> 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 - for (auto face: FACE_CORNER_NODES) { -// std::sort(face.begin(),face.end()); -// auto [c0, c1, c2] = face; - auto[c0, c1, c2] = get_sorted_face_nodes(face); - for (Index i = 0; i neighbour_hashes = neighbour_hash_vec(c0, c1, c2, i, j, maxIdx); - for (auto const& neighbour_hash: neighbour_hashes) { - node_cache[hash].nn_hashes.insert(neighbour_hash); - node_cache[neighbour_hash].nn_hashes.insert(hash); - } - } - } - for (Index idx = 0; auto& nodeEl: node_cache) { - nodeEl.second.id = idx; - ++idx; - } +#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 -//! @private -template -class PlanarTriangulation{ - Index n_length; -public: - std::vector> nn_ids; - std::vector is_bulk; - [[nodiscard]] Index ij_to_id(Index i, Index j){return i*n_length+j;} - [[nodiscard]] Index id_to_i(Index id){return id/n_length;} - [[nodiscard]] Index id_to_j(Index id){return id%n_length;} +#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 - // TL T TR - // L R - // BL B BR +#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 - [[nodiscard]] Index TL(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)-1);} - [[nodiscard]] Index T (Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id) );} - [[nodiscard]] Index TR(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)+1);} - [[nodiscard]] Index L(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)-1);} - [[nodiscard]] Index R(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)+1);} - [[nodiscard]] Index BL(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)-1);} - [[nodiscard]] Index B (Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id) );} - [[nodiscard]] Index BR(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)+1);} +#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 - [[nodiscard]] std::vector bulk_odd_j_neighbor_ids(Index id){ - return { B(id), R(id), TR(id), T(id), TL(id), L(id) }; - } +#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 - [[nodiscard]] std::vector bulk_even_j_neighbor_ids(Index id){ - return { T(id), L(id), BL(id), B(id), BR(id), R(id) }; - } +#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 - [[nodiscard]] std::vector top_boundary_odd_j_neighbor_ids(Index id){ - return { L(id), B(id), R(id) }; - } +#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 - [[nodiscard]] std::vector top_boundary_even_j_neighbor_ids(Index id){ - return { L(id), BL(id), B(id), BR(id), R(id) }; - } +#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 - [[nodiscard]] std::vector bottom_boundary_odd_j_neighbor_ids(Index id){ - return { R(id), TR(id), T(id), TL(id), L(id) }; - } +#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 - [[nodiscard]] std::vector bottom_boundary_even_j_neighbor_ids(Index id){ - return { T(id), L(id), R(id) }; - } +#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 - [[nodiscard]] std::vector left_boundary_neighbor_ids(Index id){ - return { T(id), B(id), BR(id), R(id)}; - } +#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 - [[nodiscard]] std::vector right_boundary_odd_j_neighbor_ids(Index id){ - return { T(id), TL(id), L(id), B(id) }; - } +#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 - [[nodiscard]] std::vector right_boundary_even_j_neighbor_ids(Index id){ - return { T(id), L(id), BL(id), B(id) }; - } +#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 - PlanarTriangulation(Index n_length_inp, Index n_width):n_length(n_length_inp){ - Index N_nodes = n_length*n_width; +#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 - nn_ids.resize(N_nodes); - is_bulk.resize(N_nodes,false); - // populate_bulk - for(Index i=1; i= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif - // populate top and bottom boundaries - for (Index j = 1; j 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 - i = n_width-1; - id = ij_to_id(i,j); - if (j%2==0) { - nn_ids[id] = bottom_boundary_even_j_neighbor_ids(id); - }else{ - nn_ids[id] = bottom_boundary_odd_j_neighbor_ids(id); - } - } +#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 - // populate left and right boundaries - for (Index i = 1; i= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif - // populate top left corner - nn_ids[0] = std::vector{B(0), BR(0), R(0)}; - // populate bottom left corner - Index bottom_left_id = ij_to_id(n_width-1,0); - nn_ids[bottom_left_id] = std::vector{R(bottom_left_id), T(bottom_left_id)}; //Todo this bond will never flip - // populate top and bottom right corner - Index top_right_id = n_length-1; - Index bottom_right_id = N_nodes-1; - if((n_length-1)%2==0){ - nn_ids[top_right_id] = {L(top_right_id), BL(top_right_id), B(top_right_id)}; - nn_ids[bottom_right_id] = {T(bottom_right_id), L(bottom_right_id)};// Todo this bond will never flip - }else{ - nn_ids[top_right_id] = {L(top_right_id), /*BL(top_right_id),*/ B(top_right_id)}; // Todo this bond will never flip - nn_ids[bottom_right_id] = {T(bottom_right_id), TL(bottom_right_id), L(bottom_right_id),};// Todo this bond will never flip - } +#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 - } -}; -} -#endif //FLIPPY_TRIANGULATOR_HPP +#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 -// end --- Triangulator.hpp --- +#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 -// begin --- flippy.hpp --- +#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 -/* - *```txt - * - * .d888 888 d8b - * d88P" 888 Y8P - * 888 888 - * 888888 888 888 88888b. 88888b. 888 888 - * 888 888 888 888 "88b 888 "88b 888 888 simulating package for - * 888 888 888 888 888 888 888 888 888 dynamically triangulated - * 888 888 888 888 d88P 888 d88P Y88b 888 surfaces - * 888 888 888 88888P" 88888P" "Y88888 - * 888 888 888 version 1.0.0 - * 888 888 Y8b d88P - * 888 888 "Y88P" - * - * https://github.com/flippy-software-package/flippy - * - * - * MIT License - * - * Copyright (c) 2021 George Dadunashvili - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - *``` - */ +#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 -/** - * @file - * @brief This header file exists for convenience. Including this header will automatically include all parts of flippy in the project. - */ -#ifndef FLIPPY_FLIPPY_HPP -#define FLIPPY_FLIPPY_HPP +#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 -// begin --- json.hpp --- +#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 -/* - __ _____ _____ _____ - __| | __| | | | JSON for Modern C++ -| | |__ | | | | | | version 3.10.5 -|_____|_____|_____|_|___| https://github.com/nlohmann/json +#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 -Licensed under the MIT License . -SPDX-License-Identifier: MIT -Copyright (c) 2013-2022 Niels Lohmann . +#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 -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +#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 -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +#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 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ +#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 -/****************************************************************************\ - * 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 doc/README.md. * -\****************************************************************************/ - -#ifndef INCLUDE_NLOHMANN_JSON_HPP_ -#define INCLUDE_NLOHMANN_JSON_HPP_ - -#define NLOHMANN_JSON_VERSION_MAJOR 3 -#define NLOHMANN_JSON_VERSION_MINOR 10 -#define NLOHMANN_JSON_VERSION_PATCH 5 - -#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 // accumulate -#include // string, stoi, to_string -#include // declval, forward, move, pair, swap -#include // vector - -// #include - - -#include -#include - -// #include - - -#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 - - -#include // exception -#include // runtime_error -#include // to_string -#include // vector - -// #include - - -#include // array -#include // size_t -#include // uint8_t -#include // string - -namespace nlohmann -{ -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 -*/ -inline bool operator<(const value_t lhs, const value_t rhs) noexcept -{ - 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); - return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; -} -} // namespace detail -} // namespace nlohmann - -// #include - - -#include -// #include - - -#include // declval, pair -// #include - - -/* Hedley - https://nemequ.github.io/hedley - * Created by Evan Nemerson - * - * To the extent possible under law, the author(s) have dedicated all - * copyright and related and neighboring rights to this software to - * the public domain worldwide. This software is distributed without - * any warranty. - * - * For details, see . - * SPDX-License-Identifier: CC0-1.0 - */ - -#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) -#if defined(JSON_HEDLEY_VERSION) - #undef JSON_HEDLEY_VERSION +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN #endif -#define JSON_HEDLEY_VERSION 15 - -#if defined(JSON_HEDLEY_STRINGIFY_EX) - #undef JSON_HEDLEY_STRINGIFY_EX +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) #endif -#define JSON_HEDLEY_STRINGIFY_EX(x) #x -#if defined(JSON_HEDLEY_STRINGIFY) - #undef JSON_HEDLEY_STRINGIFY +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN #endif -#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) - -#if defined(JSON_HEDLEY_CONCAT_EX) - #undef JSON_HEDLEY_CONCAT_EX +#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 -#define JSON_HEDLEY_CONCAT_EX(a,b) a##b -#if defined(JSON_HEDLEY_CONCAT) - #undef JSON_HEDLEY_CONCAT +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN #endif -#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) - -#if defined(JSON_HEDLEY_CONCAT3_EX) - #undef JSON_HEDLEY_CONCAT3_EX +#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 -#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c -#if defined(JSON_HEDLEY_CONCAT3) - #undef JSON_HEDLEY_CONCAT3 +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE #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 +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) #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 +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE #endif -#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) - #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#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 -#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) -#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) - #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#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 -#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) -#if defined(JSON_HEDLEY_GNUC_VERSION) - #undef JSON_HEDLEY_GNUC_VERSION +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION #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) +#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_VERSION_CHECK) - #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION #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)) +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) #else - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif -#if defined(JSON_HEDLEY_MSVC_VERSION) - #undef JSON_HEDLEY_MSVC_VERSION +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION #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) +#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_MSVC_VERSION_CHECK) - #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE #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))) +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) #else - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) #endif -#if defined(JSON_HEDLEY_INTEL_VERSION) - #undef JSON_HEDLEY_INTEL_VERSION +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE #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) +#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_INTEL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE #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)) +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) #else - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif -#if defined(JSON_HEDLEY_INTEL_CL_VERSION) - #undef JSON_HEDLEY_INTEL_CL_VERSION +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING #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) +#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_INTEL_CL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING #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)) +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) #else - #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif -#if defined(JSON_HEDLEY_PGI_VERSION) - #undef JSON_HEDLEY_PGI_VERSION +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING #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__) +#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(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)) +#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_PGI_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_PRAGMA(value) #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) +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH #endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) - #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP #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)) +#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_SUNPRO_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP #endif -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +/* 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(__EMSCRIPTEN__) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#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_EMSCRIPTEN_VERSION_CHECK) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST #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)) +#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_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) #endif -#if defined(JSON_HEDLEY_ARM_VERSION) - #undef JSON_HEDLEY_ARM_VERSION +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST #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) +#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_ARM_VERSION_CHECK) - #undef JSON_HEDLEY_ARM_VERSION_CHECK +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST #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)) +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) #else - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) #endif -#if defined(JSON_HEDLEY_IBM_VERSION) - #undef JSON_HEDLEY_IBM_VERSION +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST #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) +#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_IBM_VERSION_CHECK) - #undef JSON_HEDLEY_IBM_VERSION_CHECK +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED #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)) +#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_IBM_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED #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)) +#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_TI_VERSION_CHECK) - #undef JSON_HEDLEY_TI_VERSION_CHECK +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES #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)) +#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_TI_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES #endif -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #undef JSON_HEDLEY_TI_CL2000_VERSION +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL #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)) +#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_TI_CL2000_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION #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)) +#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_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION #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)) +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED #endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR #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)) +#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_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)) + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) #endif -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) - #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE #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)) +#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_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_UNAVAILABLE(available_since) #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)) +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT #endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG #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)) +#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_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) #endif -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #undef JSON_HEDLEY_TI_CL7X_VERSION +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL #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)) +#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_TI_CL7X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN #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)) +#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_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_NO_RETURN #endif -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #undef JSON_HEDLEY_TI_CLPRU_VERSION +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE #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)) +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE #endif -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE #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) +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN #endif - -#if defined(JSON_HEDLEY_CRAY_VERSION) - #undef JSON_HEDLEY_CRAY_VERSION +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME #endif -#if defined(_CRAYC) - #if defined(_RELEASE_PATCHLEVEL) - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) +#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_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) #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 +#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(__IAR_SYSTEMS_ICC__) - #if __VER__ > 1000 - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) +#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_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) #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)) +#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_IAR_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION) - #undef JSON_HEDLEY_TINYC_VERSION + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) #endif -#if defined(__TINYC__) - #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) #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) +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" #endif - -#if defined(JSON_HEDLEY_DMC_VERSION) - #undef JSON_HEDLEY_DMC_VERSION +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" #endif -#if defined(__DMC__) - #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#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_DMC_VERSION_CHECK) - #undef JSON_HEDLEY_DMC_VERSION_CHECK +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL #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)) +#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_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) + #define JSON_HEDLEY_NON_NULL(...) #endif +JSON_HEDLEY_DIAGNOSTIC_POP -#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) - #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT #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)) +#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_COMPCERT_VERSION_CHECK(major,minor,patch) (0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) #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) +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR #endif - -#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) - #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif #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) +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR #endif -#if defined(JSON_HEDLEY_MCST_LCC_VERSION) - #undef JSON_HEDLEY_MCST_LCC_VERSION +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT #endif -#if defined(__LCC__) && defined(__LCC_MINOR__) - #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY #endif - -#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) - #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY #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) +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE #endif - -#if defined(JSON_HEDLEY_GCC_VERSION) - #undef JSON_HEDLEY_GCC_VERSION +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) #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)) + (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_GCC_VERSION_CHECK(major,minor,patch) (0) +# 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_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_ATTRIBUTE +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC #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) + 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_HAS_ATTRIBUTE(attribute) (0) + #define JSON_HEDLEY_MALLOC #endif -#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE #endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#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_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +# define JSON_HEDLEY_PURE #endif -#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST #endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#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_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE #endif -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT #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) +#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_HAS_CPP_ATTRIBUTE(attribute) (0) + #define JSON_HEDLEY_RESTRICT #endif -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE #endif -#if !defined(__cplusplus) || !defined(__has_cpp_attribute) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline #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) + 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_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) + #define JSON_HEDLEY_INLINE #endif -#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE #endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#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_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE #endif -#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE #endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#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_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_NEVER_INLINE #endif -#if defined(JSON_HEDLEY_HAS_BUILTIN) - #undef JSON_HEDLEY_HAS_BUILTIN +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE #endif -#if defined(__has_builtin) - #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) -#else - #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC #endif - -#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) - #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT #endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) #else - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +# 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_GCC_HAS_BUILTIN) - #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW #endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#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_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_NO_THROW #endif -#if defined(JSON_HEDLEY_HAS_FEATURE) - #undef JSON_HEDLEY_HAS_FEATURE +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH #endif -#if defined(__has_feature) - #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#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_HAS_FEATURE(feature) (0) + #define JSON_HEDLEY_FALL_THROUGH #endif -#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) - #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL #endif -#if defined(__has_feature) - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#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_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_RETURNS_NON_NULL #endif -#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) - #undef JSON_HEDLEY_GCC_HAS_FEATURE +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM #endif -#if defined(__has_feature) - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#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_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_ARRAY_PARAM(name) #endif -#if defined(JSON_HEDLEY_HAS_EXTENSION) - #undef JSON_HEDLEY_HAS_EXTENSION +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT #endif -#if defined(__has_extension) - #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#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 - #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) + #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_GNUC_HAS_EXTENSION) - #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS #endif -#if defined(__has_extension) - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#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_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL #endif -#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) - #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT #endif -#if defined(__has_extension) - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#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_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) #endif -#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL #endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#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_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) + #define JSON_HEDLEY_NULL ((void*) 0) #endif -#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE #endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#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_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +# define JSON_HEDLEY_MESSAGE(msg) #endif -#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING #endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#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_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) #endif -#if defined(JSON_HEDLEY_HAS_WARNING) - #undef JSON_HEDLEY_HAS_WARNING +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE #endif -#if defined(__has_warning) - #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#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_HAS_WARNING(warning) (0) +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) #endif -#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) - #undef JSON_HEDLEY_GNUC_HAS_WARNING +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS #endif -#if defined(__has_warning) - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#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_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) + #define JSON_HEDLEY_FLAGS #endif -#if defined(JSON_HEDLEY_GCC_HAS_WARNING) - #undef JSON_HEDLEY_GCC_HAS_WARNING +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST #endif -#if defined(__has_warning) - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#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_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +# 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 \ - (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) + (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_PRAGMA(value) + #define JSON_HEDLEY_EMPTY_BASES #endif -#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) - #undef JSON_HEDLEY_DIAGNOSTIC_PUSH -#endif -#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) - #undef JSON_HEDLEY_DIAGNOSTIC_POP +/* 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_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)") + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) #else - #define JSON_HEDLEY_DIAGNOSTIC_PUSH - #define JSON_HEDLEY_DIAGNOSTIC_POP + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #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 +#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_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)) +#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_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)) +#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_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)) +#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_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) +#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_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 +#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_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 +#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) -#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 /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + +// #include + + +#include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; +} // namespace detail +} // namespace nlohmann + + +// https://en.cppreference.com/w/cpp/experimental/is_detected +namespace nlohmann +{ +namespace detail +{ +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 +} // namespace nlohmann + + +// This file contains all internal macro definitions +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// 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 -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 #endif -#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 + +#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 < 1940 + #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 -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 #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") + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#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 - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION + #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 -#if defined(JSON_HEDLEY_DEPRECATED) - #undef JSON_HEDLEY_DEPRECATED +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER #endif -#if defined(JSON_HEDLEY_DEPRECATED_FOR) - #undef JSON_HEDLEY_DEPRECATED_FOR +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER #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 +#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 \ - 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) +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER #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) +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) #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))) +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public #else - #define JSON_HEDLEY_SENTINEL(position) + #define JSON_PRIVATE_UNLESS_TESTED private #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 +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } -#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 +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. -#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 +#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> -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 +#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); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 #endif -#if \ - JSON_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__))) + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT #else - #define JSON_HEDLEY_NON_NULL(...) + #define JSON_EXPLICIT explicit #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) +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 #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 +namespace nlohmann +{ +namespace detail +{ -#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 +/*! +@brief replace all occurrences of a substring by another string -#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 +@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 -#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 +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** -#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 +@since version 2.0.0 +*/ +inline void replace_substring(std::string& s, const std::string& f, + const std::string& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != std::string::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} -#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 +/*! + * @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. + */ +inline std::string escape(std::string s) +{ + replace_substring(s, "~", "~0"); + replace_substring(s, "/", "~1"); + return s; +} -#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 +/*! + * @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. + */ +static void unescape(std::string& s) +{ + replace_substring(s, "~1", "/"); + replace_substring(s, "~0", "~"); +} -#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 +} // namespace detail +} // namespace nlohmann -#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 +// #include -#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 +#include // size_t -#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 +namespace nlohmann +{ +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; -#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 + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; -#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 +} // namespace detail +} // namespace nlohmann -#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 +// #include -#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 +namespace nlohmann +{ +namespace detail +{ +//////////////// +// exceptions // +//////////////// -#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 +/// @brief general exception of the @ref basic_json class +/// @sa https://json.nlohmann.me/api/basic_json/exception/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + const char* what() const noexcept override + { + return m.what(); + } -#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 + /// the id of the exception + const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) -#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 + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) -/* Remaining macros are deprecated. */ + static std::string name(const std::string& ename, int id_) + { + return "[json.exception." + ename + "." + std::to_string(id_) + "] "; + } -#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) + template + static std::string diagnostics(const BasicJsonType& leaf_element) + { +#if JSON_DIAGNOSTICS + std::vector tokens; + for (const auto* current = &leaf_element; current->m_parent != nullptr; current = current->m_parent) + { + switch (current->m_parent->type()) + { + case value_t::array: + { + for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i) + { + if (¤t->m_parent->m_value.array->operator[](i) == current) + { + tokens.emplace_back(std::to_string(i)); + break; + } + } + break; + } -#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) + case value_t::object: + { + for (const auto& element : *current->m_parent->m_value.object) + { + if (&element.second == current) + { + tokens.emplace_back(element.first.c_str()); + break; + } + } + break; + } -#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) + case value_t::null: // LCOV_EXCL_LINE + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + } -#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 (tokens.empty()) + { + return ""; + } -#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) - #undef JSON_HEDLEY_CLANG_HAS_EXTENSION + return "(" + std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, + [](const std::string & a, const std::string & b) + { + return a + "/" + detail::escape(b); + }) + ") "; +#else + static_cast(leaf_element); + return ""; #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) + private: + /// an exception object as storage for error messages + std::runtime_error m; +}; -#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) +/// @brief exception indicating a parse error +/// @sa https://json.nlohmann.me/api/basic_json/parse_error/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + template + static parse_error create(int id_, const position_t& pos, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + position_string(pos) + ": " + exception::diagnostics(context) + what_arg; + return {id_, pos.chars_read_total, w.c_str()}; + } -#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + template + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + + ": " + exception::diagnostics(context) + what_arg; + return {id_, byte_, w.c_str()}; + } -// #include + /*! + @brief byte index of the parse error + The byte index of the last read character in the input file. -#include + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; -// #include + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + static std::string position_string(const position_t& pos) + { + return " at line " + std::to_string(pos.lines_read + 1) + + ", column " + std::to_string(pos.chars_read_current_line); + } +}; -namespace nlohmann -{ -namespace detail -{ -template struct make_void +/// @brief exception indicating errors with iterators +/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ +class invalid_iterator : public exception { - using type = void; -}; -template using void_t = typename make_void::type; -} // namespace detail -} // namespace nlohmann + public: + template + static invalid_iterator create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("invalid_iterator", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; -// https://en.cppreference.com/w/cpp/experimental/is_detected -namespace nlohmann -{ -namespace detail -{ -struct nonesuch +/// @brief exception indicating executing a member function with a wrong type +/// @sa https://json.nlohmann.me/api/basic_json/type_error/ +class type_error : public exception { - nonesuch() = delete; - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - nonesuch(nonesuch const&&) = delete; - void operator=(nonesuch const&) = delete; - void operator=(nonesuch&&) = delete; + public: + template + static type_error create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("type_error", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; -template class Op, - class... Args> -struct detector +/// @brief exception indicating access out of the defined range +/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ +class out_of_range : public exception { - using value_t = std::false_type; - using type = Default; + public: + template + static out_of_range create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("out_of_range", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} }; -template class Op, class... Args> -struct detector>, Op, Args...> +/// @brief exception indicating other library errors +/// @sa https://json.nlohmann.me/api/basic_json/other_error/ +class other_error : public exception { - using value_t = std::true_type; - using type = Op; + public: + template + static other_error create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("other_error", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; -template class Op, class... Args> -using is_detected = typename detector::value_t; +} // namespace detail +} // namespace nlohmann -template class Op, class... Args> -struct is_detected_lazy : is_detected { }; +// #include -template class Op, class... Args> -using detected_t = typename detector::type; +// #include -template class Op, class... Args> -using detected_or = detector; -template class Op, class... Args> -using detected_or_t = typename detected_or::type; +#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 -template class Op, class... Args> -using is_detected_exact = std::is_same>; +// #include -template class Op, class... Args> -using is_detected_convertible = - std::is_convertible, To>; -} // namespace detail -} // namespace nlohmann +namespace nlohmann +{ +namespace detail +{ -// This file contains all internal macro definitions -// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them +template +using uncvref_t = typename std::remove_cv::type>::type; -// 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 +#ifdef JSON_HAS_CPP_14 -// C++ language standard detection -// if the user manually specified the used c++ version this is skipped -#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) - #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) - #define JSON_HAS_CPP_14 - #endif - // the cpp 11 flag is always specified because it is the minimal required version - #define JSON_HAS_CPP_11 -#endif +// 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; -#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 +#else - // 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 +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; - // 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 +// 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. - // 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 +//// START OF CODE FROM GOOGLE ABSEIL - // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support - #if defined(_MSC_VER) && _MSC_VER < 1940 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif +// 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); + } +}; - // 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 +// 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; - // 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 +namespace utility_internal +{ -#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 -#endif +template +struct Extend; -#ifndef JSON_HAS_FILESYSTEM - #define JSON_HAS_FILESYSTEM 0 -#endif +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; -// 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 +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; -// 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 +// 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; +}; -// 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 +template +struct Gen +{ + using type = integer_sequence; +}; -// allow overriding assert -#if !defined(JSON_ASSERT) - #include // assert - #define JSON_ASSERT(x) assert(x) -#endif +} // 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 -// allow to access some private functions (needed by the test suite) -#if defined(JSON_TESTS_PRIVATE) - #define JSON_PRIVATE_UNLESS_TESTED public -#else - #define JSON_PRIVATE_UNLESS_TESTED private #endif -/*! -@brief macro to briefly define a mapping between an enum and JSON -@def NLOHMANN_JSON_SERIALIZE_ENUM -@since version 3.4.0 -*/ -#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ - template \ - inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [e](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.first == e; \ - }); \ - j = ((it != std::end(m)) ? it : std::begin(m))->second; \ - } \ - template \ - inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [&j](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.second == j; \ - }); \ - e = ((it != std::end(m)) ? it : std::begin(m))->first; \ - } +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; -// Ugly macros to avoid uglier copy-paste when specializing basic_json. They -// may be removed in the future once the class is split. +// taken from ranges-v3 +template +struct static_const +{ + static constexpr T value{}; +}; -#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> +template +constexpr T static_const::value; // NOLINT(readability-redundant-declaration) -#define NLOHMANN_BASIC_JSON_TPL \ - basic_json +} // namespace detail +} // namespace nlohmann -// Macros to simplify conversion from/to types +// #include -#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); +namespace nlohmann +{ +namespace detail +{ +// dispatching helper struct +template struct identity_tag {}; +} // namespace detail +} // namespace nlohmann -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE -@since version 3.9.0 -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ - friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } +// #include -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE -@since version 3.9.0 -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ - inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple -// inspired from https://stackoverflow.com/a/26745591 -// allows to call any std function as if (e.g. with begin): -// using std::begin; begin(x); -// -// it allows using the detected idiom to retrieve the return type -// of such an expression -#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ - namespace detail { \ - using std::std_name; \ - \ - template \ - using result_of_##std_name = decltype(std_name(std::declval()...)); \ - } \ - \ - namespace detail2 { \ - struct std_name##_tag \ - { \ - }; \ - \ - template \ - std_name##_tag std_name(T&&...); \ - \ - template \ - using result_of_##std_name = decltype(std_name(std::declval()...)); \ - \ - template \ - struct would_call_std_##std_name \ - { \ - static constexpr auto const value = ::nlohmann::detail:: \ - is_detected_exact::value; \ - }; \ - } /* namespace detail2 */ \ - \ - template \ - struct would_call_std_##std_name : detail2::would_call_std_##std_name \ - { \ - } +// #include -#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 +// #include -#ifndef JSON_DIAGNOSTICS - #define JSON_DIAGNOSTICS 0 -#endif + +#include // random_access_iterator_tag + +// #include + +// #include namespace nlohmann { namespace detail { +template +struct iterator_types {}; -/*! -@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 -*/ -inline void replace_substring(std::string& s, const std::string& f, - const std::string& t) +template +struct iterator_types < + It, + void_t> { - JSON_ASSERT(!f.empty()); - for (auto pos = s.find(f); // find first occurrence of f - pos != std::string::npos; // make sure f was found - s.replace(pos, f.size(), t), // replace with t, and - pos = s.find(f, pos + t.size())) // find next occurrence of f - {} -} + 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; +}; -/*! - * @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. - */ -inline std::string escape(std::string s) +// 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 { - replace_substring(s, "~", "~0"); - replace_substring(s, "/", "~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. - */ -static void unescape(std::string& s) +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types { - replace_substring(s, "~1", "/"); - replace_substring(s, "~0", "~"); -} +}; +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 } // namespace nlohmann -// #include +// #include -#include // size_t +// #include + namespace nlohmann { -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; +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); +} // namespace nlohmann - /// conversion to size_t to preserve SAX interface - constexpr operator size_t() const - { - return chars_read_total; - } -}; +// #include -} // namespace detail -} // namespace nlohmann // #include namespace nlohmann { -namespace detail -{ -//////////////// -// exceptions // -//////////////// +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); +} // namespace nlohmann -/// @brief general exception of the @ref basic_json class -/// @sa https://json.nlohmann.me/api/basic_json/exception/ -class exception : public std::exception -{ - public: - /// returns the explanatory string - const char* what() const noexcept override - { - return m.what(); - } +// #include - /// the id of the exception - const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) +// #include - protected: - JSON_HEDLEY_NON_NULL(3) - exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) +// #include +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ +#define INCLUDE_NLOHMANN_JSON_FWD_HPP_ - static std::string name(const std::string& ename, int id_) - { - return "[json.exception." + ename + "." + std::to_string(id_) + "] "; - } +#include // int64_t, uint64_t +#include // map +#include // allocator +#include // string +#include // vector - template - static std::string diagnostics(const BasicJsonType& leaf_element) - { -#if JSON_DIAGNOSTICS - std::vector tokens; - for (const auto* current = &leaf_element; current->m_parent != nullptr; current = current->m_parent) - { - switch (current->m_parent->type()) - { - case value_t::array: - { - for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i) - { - if (¤t->m_parent->m_value.array->operator[](i) == current) - { - tokens.emplace_back(std::to_string(i)); - break; - } - } - break; - } +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ +/*! +@brief default JSONSerializer template argument - case value_t::object: - { - for (const auto& element : *current->m_parent->m_value.object) - { - if (&element.second == current) - { - tokens.emplace_back(element.first.c_str()); - break; - } - } - break; - } +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; - case value_t::null: // LCOV_EXCL_LINE - case value_t::string: // LCOV_EXCL_LINE - case value_t::boolean: // LCOV_EXCL_LINE - case value_t::number_integer: // LCOV_EXCL_LINE - case value_t::number_unsigned: // LCOV_EXCL_LINE - case value_t::number_float: // LCOV_EXCL_LINE - case value_t::binary: // LCOV_EXCL_LINE - case value_t::discarded: // LCOV_EXCL_LINE - default: // LCOV_EXCL_LINE - break; // LCOV_EXCL_LINE - } - } +/// 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> +class basic_json; - if (tokens.empty()) - { - return ""; - } +/// @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; - return "(" + std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, - [](const std::string & a, const std::string & b) - { - return a + "/" + detail::escape(b); - }) + ") "; -#else - static_cast(leaf_element); - return ""; -#endif - } +/*! +@brief default specialization +@sa https://json.nlohmann.me/api/json/ +*/ +using json = basic_json<>; - private: - /// an exception object as storage for error messages - std::runtime_error m; -}; +/// @brief a minimal map-like container that preserves insertion order +/// @sa https://json.nlohmann.me/api/ordered_map/ +template +struct ordered_map; -/// @brief exception indicating a parse error -/// @sa https://json.nlohmann.me/api/basic_json/parse_error/ -class parse_error : public exception -{ - public: - /*! - @brief create a parse error exception - @param[in] id_ the id of the exception - @param[in] pos the position where the error occurred (or with - chars_read_total=0 if the position cannot be - determined) - @param[in] what_arg the explanatory string - @return parse_error object - */ - template - static parse_error create(int id_, const position_t& pos, const std::string& what_arg, const BasicJsonType& context) - { - std::string w = exception::name("parse_error", id_) + "parse error" + - position_string(pos) + ": " + exception::diagnostics(context) + what_arg; - return {id_, pos.chars_read_total, w.c_str()}; - } - - template - static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, const BasicJsonType& context) - { - std::string w = exception::name("parse_error", id_) + "parse error" + - (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + - ": " + exception::diagnostics(context) + what_arg; - return {id_, byte_, w.c_str()}; - } - - /*! - @brief byte index of the parse error - - The byte index of the last read character in the input file. +/// @brief specialization that maintains the insertion order of object keys +/// @sa https://json.nlohmann.me/api/ordered_json/ +using ordered_json = basic_json; - @note For an input with n bytes, 1 is the index of the first character and - n+1 is the index of the terminating null byte or the end of file. - This also holds true when reading a byte vector (CBOR or MessagePack). - */ - const std::size_t byte; +} // namespace nlohmann - private: - parse_error(int id_, std::size_t byte_, const char* what_arg) - : exception(id_, what_arg), byte(byte_) {} +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ - static std::string position_string(const position_t& pos) - { - return " at line " + std::to_string(pos.lines_read + 1) + - ", column " + std::to_string(pos.chars_read_current_line); - } -}; -/// @brief exception indicating errors with iterators -/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ -class invalid_iterator : public exception +namespace nlohmann { - public: - template - static invalid_iterator create(int id_, const std::string& what_arg, const BasicJsonType& context) - { - std::string w = exception::name("invalid_iterator", id_) + exception::diagnostics(context) + what_arg; - return {id_, w.c_str()}; - } +/*! +@brief detail namespace with internal helper functions - private: - JSON_HEDLEY_NON_NULL(3) - invalid_iterator(int id_, const char* what_arg) - : exception(id_, what_arg) {} -}; +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. -/// @brief exception indicating executing a member function with a wrong type -/// @sa https://json.nlohmann.me/api/basic_json/type_error/ -class type_error : public exception +@since version 2.1.0 +*/ +namespace detail { - public: - template - static type_error create(int id_, const std::string& what_arg, const BasicJsonType& context) - { - std::string w = exception::name("type_error", id_) + exception::diagnostics(context) + what_arg; - return {id_, w.c_str()}; - } - - private: - JSON_HEDLEY_NON_NULL(3) - type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; +///////////// +// helpers // +///////////// -/// @brief exception indicating access out of the defined range -/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ -class out_of_range : public exception -{ - public: - template - static out_of_range create(int id_, const std::string& what_arg, const BasicJsonType& context) - { - std::string w = exception::name("out_of_range", id_) + exception::diagnostics(context) + what_arg; - return {id_, w.c_str()}; - } +// 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&)) - private: - JSON_HEDLEY_NON_NULL(3) - out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; +template struct is_basic_json : std::false_type {}; -/// @brief exception indicating other library errors -/// @sa https://json.nlohmann.me/api/basic_json/other_error/ -class other_error : public exception -{ - public: - template - static other_error create(int id_, const std::string& what_arg, const BasicJsonType& context) - { - std::string w = exception::name("other_error", id_) + exception::diagnostics(context) + what_arg; - return {id_, w.c_str()}; - } +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; - private: - JSON_HEDLEY_NON_NULL(3) - other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; +////////////////////// +// json_ref helpers // +////////////////////// -} // namespace detail -} // namespace nlohmann +template +class json_ref; -// #include +template +struct is_json_ref : std::false_type {}; -// #include +template +struct is_json_ref> : std::true_type {}; +////////////////////////// +// aliases for detected // +////////////////////////// -#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 +template +using mapped_type_t = typename T::mapped_type; -// #include +template +using key_type_t = typename T::key_type; +template +using value_type_t = typename T::value_type; -namespace nlohmann -{ -namespace detail -{ +template +using difference_type_t = typename T::difference_type; template -using uncvref_t = typename std::remove_cv::type>::type; +using pointer_t = typename T::pointer; -#ifdef JSON_HAS_CPP_14 +template +using reference_t = typename T::reference; -// 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; +template +using iterator_category_t = typename T::iterator_category; -#else +template +using to_json_function = decltype(T::to_json(std::declval()...)); -// alias templates to reduce boilerplate -template -using enable_if_t = typename std::enable_if::type; +template +using from_json_function = decltype(T::from_json(std::declval()...)); -// 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. +template +using get_template_function = decltype(std::declval().template get()); -//// START OF CODE FROM GOOGLE ABSEIL +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; -// 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 +// 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 { - using value_type = T; - static constexpr std::size_t size() noexcept - { - return sizeof...(Ints); - } + static constexpr bool value = is_detected::value; }; -// 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 has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { + using serializer = typename BasicJsonType::template json_serializer; -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)... >; + static constexpr bool value = + is_detected_exact::value; }; -template -struct Extend, SeqSize, 1> -{ - using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; -}; +// 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 {}; -// Recursion helper for 'make_integer_sequence'. -// 'Gen::type' is an alias for 'integer_sequence'. -template -struct Gen +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { - using type = - typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; -}; + using serializer = typename BasicJsonType::template json_serializer; -template -struct Gen -{ - using type = integer_sequence; + static constexpr bool value = + is_detected_exact::value; }; -} // 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> {}; +// 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 {}; -// taken from ranges-v3 -template -struct static_const +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { - static constexpr T value{}; -}; - -template -constexpr T static_const::value; // NOLINT(readability-redundant-declaration) + using serializer = typename BasicJsonType::template json_serializer; -} // namespace detail -} // namespace nlohmann + static constexpr bool value = + is_detected_exact::value; +}; -// #include +/////////////////// +// is_ functions // +/////////////////// -namespace nlohmann -{ -namespace detail -{ -// dispatching helper struct -template struct identity_tag {}; -} // namespace detail -} // namespace nlohmann +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B1 { }; +template +struct conjunction +: std::conditional, B1>::type {}; -// #include +// 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 {}; -#include // numeric_limits -#include // false_type, is_constructible, is_integral, is_same, true_type -#include // declval -#include // tuple +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; -// #include +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; +template +struct is_default_constructible> + : conjunction...> {}; -// #include +template +struct is_default_constructible> + : conjunction...> {}; -#include // random_access_iterator_tag +template +struct is_constructible : std::is_constructible {}; -// #include +template +struct is_constructible> : is_default_constructible> {}; -// #include +template +struct is_constructible> : is_default_constructible> {}; +template +struct is_constructible> : is_default_constructible> {}; -namespace nlohmann -{ -namespace detail -{ -template -struct iterator_types {}; +template +struct is_constructible> : is_default_constructible> {}; -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 -{ -}; +struct is_iterator_traits : std::false_type {}; template -struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> - : iterator_types +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 iterator_traits::value>> +struct is_range { - 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 -} // namespace nlohmann + private: + using t_ref = typename std::add_lvalue_reference::type; -// #include + 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; -// #include + 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())>>; -namespace nlohmann -{ -NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); -} // namespace nlohmann +template +using range_value_t = value_type_t>>; -// #include +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. +template +struct is_complete_type : std::false_type {}; -// #include +template +struct is_complete_type : std::true_type {}; +template +struct is_compatible_object_type_impl : std::false_type {}; -namespace nlohmann +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> { -NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); -} // namespace nlohmann + using object_t = typename BasicJsonType::object_t; -// #include + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; -// #include +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; -// #include -#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ -#define INCLUDE_NLOHMANN_JSON_FWD_HPP_ +template +struct is_constructible_object_type_impl : std::false_type {}; -#include // int64_t, uint64_t -#include // map -#include // allocator -#include // string -#include // vector +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; -/*! -@brief namespace for Niels Lohmann -@see https://github.com/nlohmann -@since version 1.0.0 -*/ -namespace nlohmann -{ -/*! -@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; + 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); +}; -/// 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> -class basic_json; +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; -/// @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; +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; -/*! -@brief default specialization -@sa https://json.nlohmann.me/api/json/ -*/ -using json = basic_json<>; +template +struct is_constructible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; -/// @brief a minimal map-like container that preserves insertion order -/// @sa https://json.nlohmann.me/api/ordered_map/ -template -struct ordered_map; +template +struct is_compatible_array_type_impl : std::false_type {}; -/// @brief specialization that maintains the insertion order of object keys -/// @sa https://json.nlohmann.me/api/ordered_json/ -using ordered_json = basic_json; +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; +}; -} // namespace nlohmann +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; -#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ +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 {}; -namespace nlohmann +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 >> { -/*! -@brief detail namespace with internal helper functions + using value_type = range_value_t; -This namespace collects functions that should not be exposed, -implementations of some @ref basic_json methods, and meta-programming helpers. + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; -@since version 2.1.0 -*/ -namespace detail -{ -///////////// -// helpers // -///////////// +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; -// 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_compatible_integer_type_impl : std::false_type {}; -template struct is_basic_json : 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; -NLOHMANN_BASIC_JSON_TPL_DECLARATION -struct is_basic_json : std::true_type {}; + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; -////////////////////// -// json_ref helpers // -////////////////////// +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; -template -class json_ref; +template +struct is_compatible_type_impl: std::false_type {}; -template -struct is_json_ref : 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_json_ref> : std::true_type {}; +template +struct is_compatible_type + : is_compatible_type_impl {}; -////////////////////////// -// aliases for detected // -////////////////////////// +template +struct is_constructible_tuple : std::false_type {}; -template -using mapped_type_t = typename T::mapped_type; +template +struct is_constructible_tuple> : conjunction...> {}; -template -using key_type_t = typename T::key_type; +// a naive helper to check if a type is an ordered_map (exploits the fact that +// ordered_map inherits capacity() from std::vector) +template +struct is_ordered_map +{ + using one = char; -template -using value_type_t = typename T::value_type; + struct two + { + char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + }; -template -using difference_type_t = typename T::difference_type; + template static one test( decltype(&C::capacity) ) ; + template static two test(...); -template -using pointer_t = typename T::pointer; + enum { value = sizeof(test(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) +}; -template -using reference_t = typename T::reference; +// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324) +template < typename T, typename U, enable_if_t < !std::is_same::value, int > = 0 > +T conditional_static_cast(U value) +{ + return static_cast(value); +} -template -using iterator_category_t = typename T::iterator_category; +template::value, int> = 0> +T conditional_static_cast(U value) +{ + return value; +} -template -using to_json_function = decltype(T::to_json(std::declval()...)); +} // namespace detail +} // namespace nlohmann -template -using from_json_function = decltype(T::from_json(std::declval()...)); +// #include -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 +#if JSON_HAS_EXPERIMENTAL_FILESYSTEM +#include +namespace nlohmann::detail { - static constexpr bool value = is_detected::value; -}; - -template -struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +namespace std_fs = std::experimental::filesystem; +} // namespace nlohmann::detail +#elif JSON_HAS_FILESYSTEM +#include +namespace nlohmann::detail { - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; +namespace std_fs = std::filesystem; +} // namespace nlohmann::detail +#endif -// 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 {}; +namespace nlohmann +{ +namespace detail +{ +template +void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()), j)); + } + n = nullptr; +} -template -struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic::value&& + !std::is_same::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) { - using serializer = typename BasicJsonType::template json_serializer; + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } - static constexpr bool value = - is_detected_exact::value; -}; + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + } +} -// 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 +void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()), j)); + } + b = *j.template get_ptr(); +} -template -struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +template +void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) { - using serializer = typename BasicJsonType::template json_serializer; + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + s = *j.template get_ptr(); +} - static constexpr bool value = - is_detected_exact::value; -}; +template < + typename BasicJsonType, typename ConstructibleStringType, + enable_if_t < + is_constructible_string_type::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ConstructibleStringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + s = *j.template get_ptr(); +} -/////////////////// -// is_ functions // -/////////////////// +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} -// https://en.cppreference.com/w/cpp/types/conjunction -template struct conjunction : std::true_type { }; -template struct conjunction : B1 { }; -template -struct conjunction -: std::conditional, B1>::type {}; +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} -// https://en.cppreference.com/w/cpp/types/negation -template struct negation : std::integral_constant < bool, !B::value > { }; +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} -// 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::value, int> = 0> +void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type::type val; + get_arithmetic_value(j, val); + e = static_cast(val); +} -template -struct is_default_constructible> - : conjunction, is_default_constructible> {}; +// forward_list doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::forward_list& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get(); + }); +} -template -struct is_default_constructible> - : conjunction, is_default_constructible> {}; +// valarray doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::valarray& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get(); + }); +} -template -struct is_default_constructible> - : conjunction...> {}; +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} -template -struct is_default_constructible> - : conjunction...> {}; +template +void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr(); +} +template +auto from_json_array_impl(const BasicJsonType& j, std::array& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} -template -struct is_constructible : std::is_constructible {}; +template::value, + int> = 0> +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval()), + j.template get(), + void()) +{ + using std::end; -template -struct is_constructible> : is_default_constructible> {}; + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} -template -struct is_constructible> : is_default_constructible> {}; +template::value, + int> = 0> +void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; -template -struct is_constructible> : is_default_constructible> {}; + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} -template -struct is_constructible> : is_default_constructible> {}; +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type::value&& + !is_constructible_object_type::value&& + !is_constructible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + from_json_array_impl(j, arr, priority_tag<3> {}); +} -template -struct is_iterator_traits : std::false_type {}; +template < typename BasicJsonType, typename T, std::size_t... Idx > +std::array from_json_inplace_array_impl(BasicJsonType&& j, + identity_tag> /*unused*/, index_sequence /*unused*/) +{ + return { { std::forward(j).at(Idx).template get()... } }; +} -template -struct is_iterator_traits> +template < typename BasicJsonType, typename T, std::size_t N > +auto from_json(BasicJsonType&& j, identity_tag> tag) +-> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) { - private: - using traits = iterator_traits; + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } - public: - static constexpr auto value = - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value; -}; + return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); +} -template -struct is_range +template +void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) { - private: - using t_ref = typename std::add_lvalue_reference::type; - - using iterator = detected_t; - using sentinel = detected_t; + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()), j)); + } - // 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; + bin = *j.template get_ptr(); +} - public: - static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; -}; +template::value, int> = 0> +void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()), j)); + } -template -using iterator_t = enable_if_t::value, result_of_begin())>>; + ConstructibleObjectType ret; + const auto* inner_object = j.template get_ptr(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get()); + }); + obj = std::move(ret); +} -template -using range_value_t = value_type_t>>; +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::boolean: + { + val = static_cast(*j.template get_ptr()); + break; + } -// The following implementation of is_complete_type is taken from -// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ -// and is written by Xiang Fan who agreed to using it in this library. + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + } +} -template -struct is_complete_type : std::false_type {}; +template +std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) +{ + return std::make_tuple(std::forward(j).at(Idx).template get()...); +} -template -struct is_complete_type : std::true_type {}; +template < typename BasicJsonType, class A1, class A2 > +std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) +{ + return {std::forward(j).at(0).template get(), + std::forward(j).at(1).template get()}; +} -template -struct is_compatible_object_type_impl : std::false_type {}; +template +void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) +{ + p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); +} -template -struct is_compatible_object_type_impl < - BasicJsonType, CompatibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> +template +std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) { - using object_t = typename BasicJsonType::object_t; + return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} - // macOS's is_constructible does not play well with nonesuch... - static constexpr bool value = - is_constructible::value && - is_constructible::value; -}; +template +void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) +{ + t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} -template -struct is_compatible_object_type - : is_compatible_object_type_impl {}; +template +auto from_json(BasicJsonType&& j, TupleRelated&& t) +-> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } -template -struct is_constructible_object_type_impl : std::false_type {}; + return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); +} -template -struct is_constructible_object_type_impl < - BasicJsonType, ConstructibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::map& m) { - 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 {}; + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} -template -struct is_compatible_string_type +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::unordered_map& m) { - static constexpr auto value = - is_constructible::value; -}; + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} -template -struct is_constructible_string_type +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +void from_json(const BasicJsonType& j, std_fs::path& p) { - static constexpr auto value = - is_constructible::value; -}; - -template -struct is_compatible_array_type_impl : std::false_type {}; + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + p = *j.template get_ptr(); +} +#endif -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 >> +struct from_json_fn { - static constexpr bool value = - is_constructible>::value; + template + auto operator()(const BasicJsonType& j, T&& val) const + noexcept(noexcept(from_json(j, std::forward(val)))) + -> decltype(from_json(j, std::forward(val))) + { + return from_json(j, std::forward(val)); + } }; +} // namespace detail -template -struct is_compatible_array_type - : is_compatible_array_type_impl {}; +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +constexpr const auto& from_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) +} // namespace +} // namespace nlohmann -template -struct is_constructible_array_type_impl : std::false_type {}; +// #include -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; +#include // copy +#include // begin, end +#include // string +#include // tuple, get +#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include // move, forward, declval, pair +#include // valarray +#include // vector - static constexpr bool value = - std::is_same::value || - has_from_json::value || - has_non_default_from_json < - BasicJsonType, - value_type >::value; -}; +// #include -template -struct is_constructible_array_type - : is_constructible_array_type_impl {}; +// #include -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; +#include // size_t +#include // input_iterator_tag +#include // string, to_string +#include // tuple_size, get, tuple_element +#include // move - static constexpr auto value = - is_constructible::value && - CompatibleLimits::is_integer && - RealLimits::is_signed == CompatibleLimits::is_signed; -}; +// #include -template -struct is_compatible_integer_type - : is_compatible_integer_type_impl {}; +// #include -template -struct is_compatible_type_impl: std::false_type {}; -template -struct is_compatible_type_impl < - BasicJsonType, CompatibleType, - enable_if_t::value >> +namespace nlohmann { - static constexpr bool value = - has_to_json::value; -}; - -template -struct is_compatible_type - : is_compatible_type_impl {}; +namespace detail +{ +template +void int_to_string( string_type& target, std::size_t value ) +{ + // For ADL + using std::to_string; + target = to_string(value); +} +template class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type * ; + using reference = value_type & ; + using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; -template -struct is_constructible_tuple : std::false_type {}; + private: + /// the iterator + IteratorType anchor; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + const string_type empty_str{}; -template -struct is_constructible_tuple> : conjunction...> {}; + public: + explicit iteration_proxy_value(IteratorType it) noexcept + : anchor(std::move(it)) + {} -// a naive helper to check if a type is an ordered_map (exploits the fact that -// ordered_map inherits capacity() from std::vector) -template -struct is_ordered_map -{ - using one = char; + /// dereference operator (needed for range-based for) + iteration_proxy_value& operator*() + { + return *this; + } - struct two + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() { - char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) - }; + ++anchor; + ++array_index; - template static one test( decltype(&C::capacity) ) ; - template static two test(...); + return *this; + } - enum { value = sizeof(test(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } }; -// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324) -template < typename T, typename U, enable_if_t < !std::is_same::value, int > = 0 > -T conditional_static_cast(U value) +/// proxy class for the items() function +template class iteration_proxy { - return static_cast(value); -} + private: + /// the container to iterate + typename IteratorType::reference container; -template::value, int> = 0> -T conditional_static_cast(U value) + public: + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(cont) {} + + /// return iterator begin (needed for range-based for) + iteration_proxy_value begin() noexcept + { + return iteration_proxy_value(container.begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value end() noexcept + { + return iteration_proxy_value(container.end()); + } +}; +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) { - return value; + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) +{ + return i.value(); } - } // namespace detail } // namespace nlohmann +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template +class tuple_size<::nlohmann::detail::iteration_proxy_value> + : public std::integral_constant {}; + +template +class tuple_element> +{ + public: + using type = decltype( + get(std::declval < + ::nlohmann::detail::iteration_proxy_value> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif +} // namespace std + +// #include + +// #include + // #include @@ -4880,2022 +4650,1510 @@ namespace nlohmann { namespace detail { -template -void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +////////////////// +// constructors // +////////////////// + +/* + * Note all external_constructor<>::construct functions need to call + * j.m_value.destroy(j.m_type) to avoid a memory leak in case j contains an + * allocated value (e.g., a string). See bug issue + * https://github.com/nlohmann/json/issues/2865 for more information. + */ + +template struct external_constructor; + +template<> +struct external_constructor { - if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + template + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept { - JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::boolean; + j.m_value = b; + j.assert_invariant(); } - n = nullptr; -} +}; -// overloads for basic_json template parameters -template < typename BasicJsonType, typename ArithmeticType, - enable_if_t < std::is_arithmetic::value&& - !std::is_same::value, - int > = 0 > -void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +template<> +struct external_constructor { - switch (static_cast(j)) + template + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) { - case value_t::number_unsigned: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_integer: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_float: - { - val = static_cast(*j.template get_ptr()); - break; - } - - case value_t::null: - case value_t::object: - case value_t::array: - case value_t::string: - case value_t::boolean: - case value_t::binary: - case value_t::discarded: - default: - JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = s; + j.assert_invariant(); } -} -template -void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + template + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) { - JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = std::move(s); + j.assert_invariant(); } - b = *j.template get_ptr(); -} -template -void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) { - JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value.string = j.template create(str); + j.assert_invariant(); } - s = *j.template get_ptr(); -} +}; -template < - typename BasicJsonType, typename ConstructibleStringType, - enable_if_t < - is_constructible_string_type::value&& - !std::is_same::value, - int > = 0 > -void from_json(const BasicJsonType& j, ConstructibleStringType& s) +template<> +struct external_constructor { - if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) { - JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(b); + j.assert_invariant(); } - s = *j.template get_ptr(); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) -{ - get_arithmetic_value(j, val); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) -{ - get_arithmetic_value(j, val); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) -{ - get_arithmetic_value(j, val); -} - -template::value, int> = 0> -void from_json(const BasicJsonType& j, EnumType& e) -{ - typename std::underlying_type::type val; - get_arithmetic_value(j, val); - e = static_cast(val); -} - -// forward_list doesn't have an insert method -template::value, int> = 0> -void from_json(const BasicJsonType& j, std::forward_list& l) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(std::move(b)); + j.assert_invariant(); } - l.clear(); - std::transform(j.rbegin(), j.rend(), - std::front_inserter(l), [](const BasicJsonType & i) - { - return i.template get(); - }); -} +}; -// valarray doesn't have an insert method -template::value, int> = 0> -void from_json(const BasicJsonType& j, std::valarray& l) +template<> +struct external_constructor { - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_float; + j.m_value = val; + j.assert_invariant(); } - l.resize(j.size()); - std::transform(j.begin(), j.end(), std::begin(l), - [](const BasicJsonType & elem) - { - return elem.template get(); - }); -} +}; -template -auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) --> decltype(j.template get(), void()) +template<> +struct external_constructor { - for (std::size_t i = 0; i < N; ++i) + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept { - arr[i] = j.at(i).template get(); + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_unsigned; + j.m_value = val; + j.assert_invariant(); } -} - -template -void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) -{ - arr = *j.template get_ptr(); -} +}; -template -auto from_json_array_impl(const BasicJsonType& j, std::array& arr, - priority_tag<2> /*unused*/) --> decltype(j.template get(), void()) +template<> +struct external_constructor { - for (std::size_t i = 0; i < N; ++i) + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept { - arr[i] = j.at(i).template get(); + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_integer; + j.m_value = val; + j.assert_invariant(); } -} - -template::value, - int> = 0> -auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) --> decltype( - arr.reserve(std::declval()), - j.template get(), - void()) -{ - using std::end; - - ConstructibleArrayType ret; - ret.reserve(j.size()); - std::transform(j.begin(), j.end(), - std::inserter(ret, end(ret)), [](const BasicJsonType & i) - { - // get() returns *this, this won't call a from_json - // method when value_type is BasicJsonType - return i.template get(); - }); - arr = std::move(ret); -} +}; -template::value, - int> = 0> -void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, - priority_tag<0> /*unused*/) +template<> +struct external_constructor { - using std::end; - - ConstructibleArrayType ret; - std::transform( - j.begin(), j.end(), std::inserter(ret, end(ret)), - [](const BasicJsonType & i) + template + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) { - // get() returns *this, this won't call a from_json - // method when value_type is BasicJsonType - return i.template get(); - }); - arr = std::move(ret); -} + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = arr; + j.set_parents(); + j.assert_invariant(); + } -template < typename BasicJsonType, typename ConstructibleArrayType, - enable_if_t < - is_constructible_array_type::value&& - !is_constructible_object_type::value&& - !is_constructible_string_type::value&& - !std::is_same::value&& - !is_basic_json::value, - int > = 0 > -auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) --> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), -j.template get(), -void()) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + template + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = std::move(arr); + j.set_parents(); + j.assert_invariant(); } - from_json_array_impl(j, arr, priority_tag<3> {}); -} + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; -template < typename BasicJsonType, typename T, std::size_t... Idx > -std::array from_json_inplace_array_impl(BasicJsonType&& j, - identity_tag> /*unused*/, index_sequence /*unused*/) -{ - return { { std::forward(j).at(Idx).template get()... } }; -} + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value.array = j.template create(begin(arr), end(arr)); + j.set_parents(); + j.assert_invariant(); + } -template < typename BasicJsonType, typename T, std::size_t N > -auto from_json(BasicJsonType&& j, identity_tag> tag) --> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + template + static void construct(BasicJsonType& j, const std::vector& arr) { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_value.array->push_back(x); + j.set_parent(j.m_value.array->back()); + } + j.assert_invariant(); } - return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + template::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray& arr) { - JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + } + j.set_parents(); + j.assert_invariant(); } +}; - bin = *j.template get_ptr(); -} - -template::value, int> = 0> -void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +template<> +struct external_constructor { - if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + template + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) { - JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = obj; + j.set_parents(); + j.assert_invariant(); } - ConstructibleObjectType ret; - const auto* inner_object = j.template get_ptr(); - using value_type = typename ConstructibleObjectType::value_type; - std::transform( - inner_object->begin(), inner_object->end(), - std::inserter(ret, ret.begin()), - [](typename BasicJsonType::object_t::value_type const & p) + template + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) { - return value_type(p.first, p.second.template get()); - }); - obj = std::move(ret); -} + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = std::move(obj); + j.set_parents(); + j.assert_invariant(); + } -// overload for arithmetic types, not chosen for basic_json template arguments -// (BooleanType, etc..); note: Is it really necessary to provide explicit -// overloads for boolean_t etc. in case of a custom BooleanType which is not -// an arithmetic type? -template < typename BasicJsonType, typename ArithmeticType, - enable_if_t < - std::is_arithmetic::value&& - !std::is_same::value&& - !std::is_same::value&& - !std::is_same::value&& - !std::is_same::value, - int > = 0 > -void from_json(const BasicJsonType& j, ArithmeticType& val) -{ - switch (static_cast(j)) + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) { - case value_t::number_unsigned: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_integer: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_float: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::boolean: - { - val = static_cast(*j.template get_ptr()); - break; - } + using std::begin; + using std::end; - case value_t::null: - case value_t::object: - case value_t::array: - case value_t::string: - case value_t::binary: - case value_t::discarded: - default: - JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value.object = j.template create(begin(obj), end(obj)); + j.set_parents(); + j.assert_invariant(); } -} +}; -template -std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) +///////////// +// to_json // +///////////// + +template::value, int> = 0> +void to_json(BasicJsonType& j, T b) noexcept { - return std::make_tuple(std::forward(j).at(Idx).template get()...); + external_constructor::construct(j, b); } -template < typename BasicJsonType, class A1, class A2 > -std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) +template::value, int> = 0> +void to_json(BasicJsonType& j, const CompatibleString& s) { - return {std::forward(j).at(0).template get(), - std::forward(j).at(1).template get()}; + external_constructor::construct(j, s); } -template -void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) +template +void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) { - p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); + external_constructor::construct(j, std::move(s)); } -template -std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) +template::value, int> = 0> +void to_json(BasicJsonType& j, FloatType val) noexcept { - return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); + external_constructor::construct(j, static_cast(val)); } -template -void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept { - t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); + external_constructor::construct(j, static_cast(val)); } -template -auto from_json(BasicJsonType&& j, TupleRelated&& t) --> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept { - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); - } + external_constructor::construct(j, static_cast(val)); +} - return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); +template::value, int> = 0> +void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type::type; + external_constructor::construct(j, static_cast(e)); } -template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, - typename = enable_if_t < !std::is_constructible < - typename BasicJsonType::string_t, Key >::value >> -void from_json(const BasicJsonType& j, std::map& m) +template +void to_json(BasicJsonType& j, const std::vector& e) { - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); - } - m.clear(); - for (const auto& p : j) - { - if (JSON_HEDLEY_UNLIKELY(!p.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); - } - m.emplace(p.at(0).template get(), p.at(1).template get()); - } + external_constructor::construct(j, e); } -template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, - typename = enable_if_t < !std::is_constructible < - typename BasicJsonType::string_t, Key >::value >> -void from_json(const BasicJsonType& j, std::unordered_map& m) +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type::value&& + !is_compatible_object_type::value&& + !is_compatible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +void to_json(BasicJsonType& j, const CompatibleArrayType& arr) { - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); - } - m.clear(); - for (const auto& p : j) - { - if (JSON_HEDLEY_UNLIKELY(!p.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); - } - m.emplace(p.at(0).template get(), p.at(1).template get()); - } + external_constructor::construct(j, arr); } -#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM template -void from_json(const BasicJsonType& j, std_fs::path& p) +void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) { - if (JSON_HEDLEY_UNLIKELY(!j.is_string())) - { - JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); - } - p = *j.template get_ptr(); + external_constructor::construct(j, bin); } -#endif -struct from_json_fn +template::value, int> = 0> +void to_json(BasicJsonType& j, const std::valarray& arr) { - template - auto operator()(const BasicJsonType& j, T&& val) const - noexcept(noexcept(from_json(j, std::forward(val)))) - -> decltype(from_json(j, std::forward(val))) - { - return from_json(j, std::forward(val)); - } -}; -} // namespace detail + external_constructor::construct(j, std::move(arr)); +} -/// namespace to hold default `from_json` function -/// to see why this is required: -/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html -namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +template +void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) { -constexpr const auto& from_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) -} // namespace -} // namespace nlohmann - -// #include - + external_constructor::construct(j, std::move(arr)); +} -#include // copy -#include // begin, end -#include // string -#include // tuple, get -#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type -#include // move, forward, declval, pair -#include // valarray -#include // vector +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > +void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor::construct(j, obj); +} -// #include +template +void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor::construct(j, std::move(obj)); +} -// #include +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int > = 0 > +void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + external_constructor::construct(j, arr); +} +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +void to_json(BasicJsonType& j, const std::pair& p) +{ + j = { p.first, p.second }; +} -#include // size_t -#include // input_iterator_tag -#include // string, to_string -#include // tuple_size, get, tuple_element -#include // move +// for https://github.com/nlohmann/json/pull/1134 +template>::value, int> = 0> +void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} -// #include +template +void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) +{ + j = { std::get(t)... }; +} -// #include +template::value, int > = 0> +void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence::value> {}); +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +void to_json(BasicJsonType& j, const std_fs::path& p) +{ + j = p.string(); +} +#endif + +struct to_json_fn +{ + template + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) + -> decltype(to_json(j, std::forward(val)), void()) + { + return to_json(j, std::forward(val)); + } +}; +} // namespace detail + +/// namespace to hold default `to_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +constexpr const auto& to_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) +} // namespace +} // namespace nlohmann + +// #include + +// #include namespace nlohmann { -namespace detail + +/// @sa https://json.nlohmann.me/api/adl_serializer/ +template +struct adl_serializer { -template -void int_to_string( string_type& target, std::size_t value ) + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j, TargetType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), val))) + -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + { + ::nlohmann::from_json(std::forward(j), val); + } + + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) + -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) + { + return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); + } + + /// @brief convert any value type to a JSON value + /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ + template + static auto to_json(BasicJsonType& j, TargetType && val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward(val)))) + -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) + { + ::nlohmann::to_json(j, std::forward(val)); + } +}; +} // namespace nlohmann + +// #include + + +#include // uint8_t, uint64_t +#include // tie +#include // move + +namespace nlohmann { - // For ADL - using std::to_string; - target = to_string(value); -} -template class iteration_proxy_value + +/// @brief an internal type for a backed binary type +/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ +template +class byte_container_with_subtype : public BinaryType { public: - using difference_type = std::ptrdiff_t; - using value_type = iteration_proxy_value; - using pointer = value_type * ; - using reference = value_type & ; - using iterator_category = std::input_iterator_tag; - using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; + using container_type = BinaryType; + using subtype_type = std::uint64_t; - private: - /// the iterator - IteratorType anchor; - /// an index for arrays (used to create key names) - std::size_t array_index = 0; - /// last stringified array index - mutable std::size_t array_index_last = 0; - /// a string representation of the array index - mutable string_type array_index_str = "0"; - /// an empty string (to return a reference for primitive values) - const string_type empty_str{}; + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} - public: - explicit iteration_proxy_value(IteratorType it) noexcept - : anchor(std::move(it)) + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) {} - /// dereference operator (needed for range-based for) - iteration_proxy_value& operator*() + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const { - return *this; + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); } - /// increment operator (needed for range-based for) - iteration_proxy_value& operator++() + bool operator!=(const byte_container_with_subtype& rhs) const { - ++anchor; - ++array_index; - - return *this; + return !(rhs == *this); } - /// equality operator (needed for InputIterator) - bool operator==(const iteration_proxy_value& o) const + /// @brief sets the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ + void set_subtype(subtype_type subtype_) noexcept { - return anchor == o.anchor; + m_subtype = subtype_; + m_has_subtype = true; } - /// inequality operator (needed for range-based for) - bool operator!=(const iteration_proxy_value& o) const + /// @brief return the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ + constexpr subtype_type subtype() const noexcept { - return anchor != o.anchor; + return m_has_subtype ? m_subtype : static_cast(-1); } - /// return key of the iterator - const string_type& key() const + /// @brief return whether the value has a subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ + constexpr bool has_subtype() const noexcept { - JSON_ASSERT(anchor.m_object != nullptr); - - switch (anchor.m_object->type()) - { - // use integer array index as key - case value_t::array: - { - if (array_index != array_index_last) - { - int_to_string( array_index_str, array_index ); - array_index_last = array_index; - } - return array_index_str; - } - - // use key from the object - case value_t::object: - return anchor.key(); - - // use an empty key for all primitive types - case value_t::null: - case value_t::string: - case value_t::boolean: - case value_t::number_integer: - case value_t::number_unsigned: - case value_t::number_float: - case value_t::binary: - case value_t::discarded: - default: - return empty_str; - } + return m_has_subtype; } - /// return value of the iterator - typename IteratorType::reference value() const + /// @brief clears the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ + void clear_subtype() noexcept { - return anchor.value(); + m_subtype = 0; + m_has_subtype = false; } -}; -/// proxy class for the items() function -template class iteration_proxy -{ private: - /// the container to iterate - typename IteratorType::reference container; + subtype_type m_subtype = 0; + bool m_has_subtype = false; +}; - public: - /// construct iteration proxy from a container - explicit iteration_proxy(typename IteratorType::reference cont) noexcept - : container(cont) {} +} // namespace nlohmann - /// return iterator begin (needed for range-based for) - iteration_proxy_value begin() noexcept - { - return iteration_proxy_value(container.begin()); - } +// #include - /// return iterator end (needed for range-based for) - iteration_proxy_value end() noexcept - { - return iteration_proxy_value(container.end()); - } -}; -// Structured Bindings Support -// For further reference see https://blog.tartanllama.xyz/structured-bindings/ -// And see https://github.com/nlohmann/json/pull/1391 -template = 0> -auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) -{ - return i.key(); -} -// Structured Bindings Support -// For further reference see https://blog.tartanllama.xyz/structured-bindings/ -// And see https://github.com/nlohmann/json/pull/1391 -template = 0> -auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) -{ - return i.value(); -} -} // namespace detail -} // namespace nlohmann +// #include -// The Addition to the STD Namespace is required to add -// Structured Bindings Support to the iteration_proxy_value class -// For further reference see https://blog.tartanllama.xyz/structured-bindings/ -// And see https://github.com/nlohmann/json/pull/1391 -namespace std -{ -#if defined(__clang__) - // Fix: https://github.com/nlohmann/json/issues/1401 - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmismatched-tags" -#endif -template -class tuple_size<::nlohmann::detail::iteration_proxy_value> - : public std::integral_constant {}; +// #include -template -class tuple_element> -{ - public: - using type = decltype( - get(std::declval < - ::nlohmann::detail::iteration_proxy_value> ())); -}; -#if defined(__clang__) - #pragma clang diagnostic pop -#endif -} // namespace std +// #include -// #include -// #include +#include // uint8_t +#include // size_t +#include // hash -// #include +// #include +// #include -#if JSON_HAS_EXPERIMENTAL_FILESYSTEM -#include -namespace nlohmann::detail -{ -namespace std_fs = std::experimental::filesystem; -} // namespace nlohmann::detail -#elif JSON_HAS_FILESYSTEM -#include -namespace nlohmann::detail -{ -namespace std_fs = std::filesystem; -} // namespace nlohmann::detail -#endif namespace nlohmann { namespace detail { -////////////////// -// constructors // -////////////////// -/* - * Note all external_constructor<>::construct functions need to call - * j.m_value.destroy(j.m_type) to avoid a memory leak in case j contains an - * allocated value (e.g., a string). See bug issue - * https://github.com/nlohmann/json/issues/2865 for more information. - */ +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} -template struct external_constructor; +/*! +@brief hash a JSON value -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::boolean; - j.m_value = b; - j.assert_invariant(); - } -}; +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. -template<> -struct external_constructor +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template +std::size_t hash(const BasicJsonType& j) { - template - static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::string; - j.m_value = s; - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::string; - j.m_value = std::move(s); - j.assert_invariant(); - } + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; - template < typename BasicJsonType, typename CompatibleStringType, - enable_if_t < !std::is_same::value, - int > = 0 > - static void construct(BasicJsonType& j, const CompatibleStringType& str) + const auto type = static_cast(j.type()); + switch (j.type()) { - j.m_value.destroy(j.m_type); - j.m_type = value_t::string; - j.m_value.string = j.template create(str); - j.assert_invariant(); - } -}; + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::binary; - j.m_value = typename BasicJsonType::binary_t(b); - j.assert_invariant(); - } + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } - template - static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::binary; - j.m_value = typename BasicJsonType::binary_t(std::move(b)); - j.assert_invariant(); - } -}; + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::number_float; - j.m_value = val; - j.assert_invariant(); - } -}; + case BasicJsonType::value_t::string: + { + const auto h = std::hash {}(j.template get_ref()); + return combine(type, h); + } -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::number_unsigned; - j.m_value = val; - j.assert_invariant(); - } -}; + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::number_integer; - j.m_value = val; - j.assert_invariant(); - } -}; + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::array; - j.m_value = arr; - j.set_parents(); - j.assert_invariant(); - } + case BasicJsonType::value_t::number_unsigned: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } - template - static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::array; - j.m_value = std::move(arr); - j.set_parents(); - j.assert_invariant(); - } - - template < typename BasicJsonType, typename CompatibleArrayType, - enable_if_t < !std::is_same::value, - int > = 0 > - static void construct(BasicJsonType& j, const CompatibleArrayType& arr) - { - using std::begin; - using std::end; - - j.m_value.destroy(j.m_type); - j.m_type = value_t::array; - j.m_value.array = j.template create(begin(arr), end(arr)); - j.set_parents(); - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, const std::vector& arr) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::array; - j.m_value = value_t::array; - j.m_value.array->reserve(arr.size()); - for (const bool x : arr) + case BasicJsonType::value_t::number_float: { - j.m_value.array->push_back(x); - j.set_parent(j.m_value.array->back()); + const auto h = std::hash {}(j.template get()); + return combine(type, h); } - j.assert_invariant(); - } - template::value, int> = 0> - static void construct(BasicJsonType& j, const std::valarray& arr) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::array; - j.m_value = value_t::array; - j.m_value.array->resize(arr.size()); - if (arr.size() > 0) + case BasicJsonType::value_t::binary: { - std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, static_cast(j.get_binary().subtype())); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash {}(byte)); + } + return seed; } - j.set_parents(); - j.assert_invariant(); - } -}; -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::object; - j.m_value = obj; - j.set_parents(); - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) - { - j.m_value.destroy(j.m_type); - j.m_type = value_t::object; - j.m_value = std::move(obj); - j.set_parents(); - j.assert_invariant(); + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return 0; // LCOV_EXCL_LINE } +} - template < typename BasicJsonType, typename CompatibleObjectType, - enable_if_t < !std::is_same::value, int > = 0 > - static void construct(BasicJsonType& j, const CompatibleObjectType& obj) - { - using std::begin; - using std::end; +} // namespace detail +} // namespace nlohmann - j.m_value.destroy(j.m_type); - j.m_type = value_t::object; - j.m_value.object = j.template create(begin(obj), end(obj)); - j.set_parents(); - j.assert_invariant(); - } -}; +// #include -///////////// -// to_json // -///////////// -template::value, int> = 0> -void to_json(BasicJsonType& j, T b) noexcept -{ - external_constructor::construct(j, b); -} +#include // generate_n +#include // array +#include // ldexp +#include // size_t +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // snprintf +#include // memcpy +#include // back_inserter +#include // numeric_limits +#include // char_traits, string +#include // make_pair, move +#include // vector -template::value, int> = 0> -void to_json(BasicJsonType& j, const CompatibleString& s) -{ - external_constructor::construct(j, s); -} +// #include -template -void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) -{ - external_constructor::construct(j, std::move(s)); -} +// #include -template::value, int> = 0> -void to_json(BasicJsonType& j, FloatType val) noexcept -{ - external_constructor::construct(j, static_cast(val)); -} -template::value, int> = 0> -void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept -{ - external_constructor::construct(j, static_cast(val)); -} +#include // array +#include // size_t +#include // strlen +#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include // shared_ptr, make_shared, addressof +#include // accumulate +#include // string, char_traits +#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include // pair, declval -template::value, int> = 0> -void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept -{ - external_constructor::construct(j, static_cast(val)); -} +#ifndef JSON_NO_IO + #include // FILE * + #include // istream +#endif // JSON_NO_IO -template::value, int> = 0> -void to_json(BasicJsonType& j, EnumType e) noexcept -{ - using underlying_type = typename std::underlying_type::type; - external_constructor::construct(j, static_cast(e)); -} +// #include -template -void to_json(BasicJsonType& j, const std::vector& e) -{ - external_constructor::construct(j, e); -} +// #include -template < typename BasicJsonType, typename CompatibleArrayType, - enable_if_t < is_compatible_array_type::value&& - !is_compatible_object_type::value&& - !is_compatible_string_type::value&& - !std::is_same::value&& - !is_basic_json::value, - int > = 0 > -void to_json(BasicJsonType& j, const CompatibleArrayType& arr) -{ - external_constructor::construct(j, arr); -} -template -void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +namespace nlohmann { - external_constructor::construct(j, bin); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, const std::valarray& arr) +namespace detail { - external_constructor::construct(j, std::move(arr)); -} +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson }; -template -void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) -{ - external_constructor::construct(j, std::move(arr)); -} +//////////////////// +// input adapters // +//////////////////// -template < typename BasicJsonType, typename CompatibleObjectType, - enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > -void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +#ifndef JSON_NO_IO +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter { - external_constructor::construct(j, obj); -} + public: + using char_type = char; -template -void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) -{ - external_constructor::construct(j, std::move(obj)); -} + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + {} -template < - typename BasicJsonType, typename T, std::size_t N, - enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) - int > = 0 > -void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -{ - external_constructor::construct(j, arr); -} + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) noexcept = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + ~file_input_adapter() = default; -template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > -void to_json(BasicJsonType& j, const std::pair& p) -{ - j = { p.first, p.second }; -} - -// for https://github.com/nlohmann/json/pull/1134 -template>::value, int> = 0> -void to_json(BasicJsonType& j, const T& b) -{ - j = { {b.key(), b.value()} }; -} + std::char_traits::int_type get_character() noexcept + { + return std::fgetc(m_file); + } -template -void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) -{ - j = { std::get(t)... }; -} + private: + /// the file pointer to read from + std::FILE* m_file; +}; -template::value, int > = 0> -void to_json(BasicJsonType& j, const T& t) -{ - to_json_tuple_impl(j, t, make_index_sequence::value> {}); -} -#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM -template -void to_json(BasicJsonType& j, const std_fs::path& p) +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter { - j = p.string(); -} -#endif + public: + using char_type = char; -struct to_json_fn -{ - template - auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) - -> decltype(to_json(j, std::forward(val)), void()) + ~input_stream_adapter() { - return to_json(j, std::forward(val)); + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } } -}; -} // namespace detail - -/// namespace to hold default `to_json` function -/// to see why this is required: -/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html -namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) -{ -constexpr const auto& to_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) -} // namespace -} // namespace nlohmann - -// #include - -// #include + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} -namespace nlohmann -{ + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; -/// @sa https://json.nlohmann.me/api/adl_serializer/ -template -struct adl_serializer -{ - /// @brief convert a JSON value to any value type - /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ - template - static auto from_json(BasicJsonType && j, TargetType& val) noexcept( - noexcept(::nlohmann::from_json(std::forward(j), val))) - -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) { - ::nlohmann::from_json(std::forward(j), val); + rhs.is = nullptr; + rhs.sb = nullptr; } - /// @brief convert a JSON value to any value type - /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ - template - static auto from_json(BasicJsonType && j) noexcept( - noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) - -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) + // std::istream/std::streambuf use std::char_traits::to_int_type, to + // ensure that std::char_traits::eof() and the character 0xFF do not + // end up as the same value, e.g. 0xFFFFFFFF. + std::char_traits::int_type get_character() { - return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; } - /// @brief convert any value type to a JSON value - /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ - template - static auto to_json(BasicJsonType& j, TargetType && val) noexcept( - noexcept(::nlohmann::to_json(j, std::forward(val)))) - -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) - { - ::nlohmann::to_json(j, std::forward(val)); - } + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; }; -} // namespace nlohmann - -// #include - - -#include // uint8_t, uint64_t -#include // tie -#include // move - -namespace nlohmann -{ +#endif // JSON_NO_IO -/// @brief an internal type for a backed binary type -/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ -template -class byte_container_with_subtype : public BinaryType +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter { public: - using container_type = BinaryType; - using subtype_type = std::uint64_t; - - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - byte_container_with_subtype() noexcept(noexcept(container_type())) - : container_type() - {} - - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) - : container_type(b) - {} - - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) - : container_type(std::move(b)) - {} - - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) - : container_type(b) - , m_subtype(subtype_) - , m_has_subtype(true) - {} + using char_type = typename std::iterator_traits::value_type; - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) - : container_type(std::move(b)) - , m_subtype(subtype_) - , m_has_subtype(true) + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) {} - bool operator==(const byte_container_with_subtype& rhs) const - { - return std::tie(static_cast(*this), m_subtype, m_has_subtype) == - std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); - } - - bool operator!=(const byte_container_with_subtype& rhs) const + typename std::char_traits::int_type get_character() { - return !(rhs == *this); - } + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } - /// @brief sets the binary subtype - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ - void set_subtype(subtype_type subtype_) noexcept - { - m_subtype = subtype_; - m_has_subtype = true; + return std::char_traits::eof(); } - /// @brief return the binary subtype - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ - constexpr subtype_type subtype() const noexcept - { - return m_has_subtype ? m_subtype : static_cast(-1); - } + private: + IteratorType current; + IteratorType end; - /// @brief return whether the value has a subtype - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ - constexpr bool has_subtype() const noexcept - { - return m_has_subtype; - } + template + friend struct wide_string_input_helper; - /// @brief clears the binary subtype - /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ - void clear_subtype() noexcept + bool empty() const { - m_subtype = 0; - m_has_subtype = false; + return current == end; } - - private: - subtype_type m_subtype = 0; - bool m_has_subtype = false; }; -} // namespace nlohmann - -// #include - -// #include - -// #include -// #include +template +struct wide_string_input_helper; +template +struct wide_string_input_helper +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; -#include // uint8_t -#include // size_t -#include // hash - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ - -// boost::hash_combine -inline std::size_t combine(std::size_t seed, std::size_t h) noexcept -{ - seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); - return seed; -} - -/*! -@brief hash a JSON value - -The hash function tries to rely on std::hash where possible. Furthermore, the -type of the JSON value is taken into account to have different hash values for -null, 0, 0U, and false, etc. - -@tparam BasicJsonType basic_json specialization -@param j JSON value to hash -@return hash value of j -*/ -template -std::size_t hash(const BasicJsonType& j) -{ - using string_t = typename BasicJsonType::string_t; - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - - const auto type = static_cast(j.type()); - switch (j.type()) - { - case BasicJsonType::value_t::null: - case BasicJsonType::value_t::discarded: + if (JSON_HEDLEY_UNLIKELY(input.empty())) { - return combine(type, 0); + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; } - - case BasicJsonType::value_t::object: + else { - auto seed = combine(type, j.size()); - for (const auto& element : j.items()) + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) { - const auto h = std::hash {}(element.key()); - seed = combine(seed, h); - seed = combine(seed, hash(element.value())); + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; } - return seed; - } - - case BasicJsonType::value_t::array: - { - auto seed = combine(type, j.size()); - for (const auto& element : j) + else if (wc <= 0x7FF) { - seed = combine(seed, hash(element)); + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; } - return seed; - } - - case BasicJsonType::value_t::string: - { - const auto h = std::hash {}(j.template get_ref()); - return combine(type, h); - } - - case BasicJsonType::value_t::boolean: - { - const auto h = std::hash {}(j.template get()); - return combine(type, h); } + } +}; - case BasicJsonType::value_t::number_integer: - { - const auto h = std::hash {}(j.template get()); - return combine(type, h); - } +template +struct wide_string_input_helper +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; - case BasicJsonType::value_t::number_unsigned: + if (JSON_HEDLEY_UNLIKELY(input.empty())) { - const auto h = std::hash {}(j.template get()); - return combine(type, h); + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; } - - case BasicJsonType::value_t::number_float: + else { - const auto h = std::hash {}(j.template get()); - return combine(type, h); - } + // get the current character + const auto wc = input.get_character(); - case BasicJsonType::value_t::binary: - { - auto seed = combine(type, j.get_binary().size()); - const auto h = std::hash {}(j.get_binary().has_subtype()); - seed = combine(seed, h); - seed = combine(seed, static_cast(j.get_binary().subtype())); - for (const auto byte : j.get_binary()) + // UTF-16 to UTF-8 encoding + if (wc < 0x80) { - seed = combine(seed, std::hash {}(byte)); + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } } - return seed; } - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE - return 0; // LCOV_EXCL_LINE } -} +}; -} // namespace detail -} // namespace nlohmann +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter +{ + public: + using char_type = char; -// #include + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + typename std::char_traits::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer(); -#include // generate_n -#include // array -#include // ldexp -#include // size_t -#include // uint8_t, uint16_t, uint32_t, uint64_t -#include // snprintf -#include // memcpy -#include // back_inserter -#include // numeric_limits -#include // char_traits, string -#include // make_pair, move -#include // vector + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } -// #include + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } -// #include + private: + BaseInputAdapter base_adapter; + template + void fill_buffer() + { + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } -#include // array -#include // size_t -#include // strlen -#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next -#include // shared_ptr, make_shared, addressof -#include // accumulate -#include // string, char_traits -#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer -#include // pair, declval + /// a buffer for UTF-8 bytes + std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; -#ifndef JSON_NO_IO - #include // FILE * - #include // istream -#endif // JSON_NO_IO + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; -// #include -// #include +template +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; -namespace nlohmann +template +struct is_iterator_of_multibyte { -namespace detail + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template +struct iterator_input_adapter_factory::value>> { -/// the supported input formats -enum class input_format_t { json, cbor, msgpack, ubjson, bson }; + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; -//////////////////// -// input adapters // -//////////////////// + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; -#ifndef JSON_NO_IO -/*! -Input adapter for stdio file access. This adapter read only 1 byte and do not use any - buffer. This adapter is a very low level adapter. -*/ -class file_input_adapter +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) { - public: - using char_type = char; + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} - JSON_HEDLEY_NON_NULL(2) - explicit file_input_adapter(std::FILE* f) noexcept - : m_file(f) - {} +// Convenience shorthand from container to iterator +// Enables ADL on begin(container) and end(container) +// Encloses the using declarations in namespace for not to leak them to outside scope - // make class move-only - file_input_adapter(const file_input_adapter&) = delete; - file_input_adapter(file_input_adapter&&) noexcept = default; - file_input_adapter& operator=(const file_input_adapter&) = delete; - file_input_adapter& operator=(file_input_adapter&&) = delete; - ~file_input_adapter() = default; +namespace container_input_adapter_factory_impl +{ - std::char_traits::int_type get_character() noexcept - { - return std::fgetc(m_file); - } +using std::begin; +using std::end; - private: - /// the file pointer to read from - std::FILE* m_file; -}; +template +struct container_input_adapter_factory {}; +template +struct container_input_adapter_factory< ContainerType, + void_t()), end(std::declval()))>> + { + using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); -/*! -Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at -beginning of input. Does not support changing the underlying std::streambuf -in mid-input. Maintains underlying std::istream and std::streambuf to support -subsequent use of standard std::istream operations to process any input -characters following those used in parsing the JSON input. Clears the -std::istream flags; any input errors (e.g., EOF) will be detected by the first -subsequent call for input from the std::istream. -*/ -class input_stream_adapter + static adapter_type create(const ContainerType& container) { - public: - using char_type = char; - - ~input_stream_adapter() - { - // clear stream flags; we use underlying streambuf I/O, do not - // maintain ifstream flags, except eof - if (is != nullptr) - { - is->clear(is->rdstate() & std::ios::eofbit); - } - } + return input_adapter(begin(container), end(container)); +} + }; - explicit input_stream_adapter(std::istream& i) - : is(&i), sb(i.rdbuf()) - {} +} // namespace container_input_adapter_factory_impl - // delete because of pointer members - input_stream_adapter(const input_stream_adapter&) = delete; - input_stream_adapter& operator=(input_stream_adapter&) = delete; - input_stream_adapter& operator=(input_stream_adapter&&) = delete; +template +typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) +{ + return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); +} - input_stream_adapter(input_stream_adapter&& rhs) noexcept - : is(rhs.is), sb(rhs.sb) - { - rhs.is = nullptr; - rhs.sb = nullptr; - } +#ifndef JSON_NO_IO +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} - // std::istream/std::streambuf use std::char_traits::to_int_type, to - // ensure that std::char_traits::eof() and the character 0xFF do not - // end up as the same value, e.g. 0xFFFFFFFF. - std::char_traits::int_type get_character() - { - auto res = sb->sbumpc(); - // set eof manually, as we don't use the istream interface. - if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) - { - is->clear(is->rdstate() | std::ios::eofbit); - } - return res; - } +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} - private: - /// the associated input stream - std::istream* is = nullptr; - std::streambuf* sb = nullptr; -}; +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} #endif // JSON_NO_IO -// General-purpose iterator-based adapter. It might not be as fast as -// theoretically possible for some containers, but it is extremely versatile. -template -class iterator_input_adapter +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + !std::is_array::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + const auto* ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitly cast +// to the correct adapter. +class span_input_adapter { public: - using char_type = typename std::iterator_traits::value_type; + template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} - iterator_input_adapter(IteratorType first, IteratorType last) - : current(std::move(first)), end(std::move(last)) - {} + template::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} - typename std::char_traits::int_type get_character() + contiguous_bytes_input_adapter&& get() { - if (JSON_HEDLEY_LIKELY(current != end)) - { - auto result = std::char_traits::to_int_type(*current); - std::advance(current, 1); - return result; - } - - return std::char_traits::eof(); + return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) } private: - IteratorType current; - IteratorType end; + contiguous_bytes_input_adapter ia; +}; +} // namespace detail +} // namespace nlohmann - template - friend struct wide_string_input_helper; +// #include - bool empty() const - { - return current == end; - } -}; +#include +#include // string +#include // move +#include // vector + +// #include -template -struct wide_string_input_helper; +// #include -template -struct wide_string_input_helper + +namespace nlohmann { - // UTF-32 - static void fill_buffer(BaseInputAdapter& input, - std::array::int_type, 4>& utf8_bytes, - size_t& utf8_bytes_index, - size_t& utf8_bytes_filled) - { - utf8_bytes_index = 0; - if (JSON_HEDLEY_UNLIKELY(input.empty())) - { - utf8_bytes[0] = std::char_traits::eof(); - utf8_bytes_filled = 1; - } - else - { - // get the current character - const auto wc = input.get_character(); - - // UTF-32 to UTF-8 encoding - if (wc < 0x80) - { - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - else if (wc <= 0x7FF) - { - utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); - utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 2; - } - else if (wc <= 0xFFFF) - { - utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 3; - } - else if (wc <= 0x10FFFF) - { - utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); - utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 4; - } - else - { - // unknown character - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - } - } -}; +/*! +@brief SAX interface -template -struct wide_string_input_helper +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template +struct json_sax { - // UTF-16 - static void fill_buffer(BaseInputAdapter& input, - std::array::int_type, 4>& utf8_bytes, - size_t& utf8_bytes_index, - size_t& utf8_bytes_filled) - { - utf8_bytes_index = 0; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; - if (JSON_HEDLEY_UNLIKELY(input.empty())) - { - utf8_bytes[0] = std::char_traits::eof(); - utf8_bytes_filled = 1; - } - else - { - // get the current character - const auto wc = input.get_character(); + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; - // UTF-16 to UTF-8 encoding - if (wc < 0x80) - { - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - else if (wc <= 0x7FF) - { - utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); - utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 2; - } - else if (0xD800 > wc || wc >= 0xE000) - { - utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 3; - } - else - { - if (JSON_HEDLEY_UNLIKELY(!input.empty())) - { - const auto wc2 = static_cast(input.get_character()); - const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); - utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); - utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); - utf8_bytes_filled = 4; - } - else - { - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - } - } - } -}; + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; -// Wraps another input apdater to convert wide character types into individual bytes. -template -class wide_string_input_adapter -{ - public: - using char_type = char; + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; - wide_string_input_adapter(BaseInputAdapter base) - : base_adapter(base) {} + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; - typename std::char_traits::int_type get_character() noexcept - { - // check if buffer needs to be filled - if (utf8_bytes_index == utf8_bytes_filled) - { - fill_buffer(); + /*! + @brief a floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; - JSON_ASSERT(utf8_bytes_filled > 0); - JSON_ASSERT(utf8_bytes_index == 0); - } + /*! + @brief a string value was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string value. + */ + virtual bool string(string_t& val) = 0; - // use buffer - JSON_ASSERT(utf8_bytes_filled > 0); - JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); - return utf8_bytes[utf8_bytes_index++]; - } + /*! + @brief a binary value was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary value. + */ + virtual bool binary(binary_t& val) = 0; - private: - BaseInputAdapter base_adapter; + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; - template - void fill_buffer() - { - wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); - } + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; - /// a buffer for UTF-8 bytes - std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; - /// index to the utf8_codes array for the next valid byte - std::size_t utf8_bytes_index = 0; - /// number of valid bytes in the utf8_codes array - std::size_t utf8_bytes_filled = 0; -}; + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; -template -struct iterator_input_adapter_factory -{ - using iterator_type = IteratorType; - using char_type = typename std::iterator_traits::value_type; - using adapter_type = iterator_input_adapter; + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; - static adapter_type create(IteratorType first, IteratorType last) - { - return adapter_type(std::move(first), std::move(last)); - } + json_sax() = default; + json_sax(const json_sax&) = default; + json_sax(json_sax&&) noexcept = default; + json_sax& operator=(const json_sax&) = default; + json_sax& operator=(json_sax&&) noexcept = default; + virtual ~json_sax() = default; }; -template -struct is_iterator_of_multibyte -{ - using value_type = typename std::iterator_traits::value_type; - enum - { - value = sizeof(value_type) > 1 - }; -}; -template -struct iterator_input_adapter_factory::value>> +namespace detail { - using iterator_type = IteratorType; - using char_type = typename std::iterator_traits::value_type; - using base_adapter_type = iterator_input_adapter; - using adapter_type = wide_string_input_adapter; - - static adapter_type create(IteratorType first, IteratorType last) - { - return adapter_type(base_adapter_type(std::move(first), std::move(last))); - } -}; +/*! +@brief SAX implementation to create a JSON value from SAX events -// General purpose iterator-based input -template -typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) -{ - using factory_type = iterator_input_adapter_factory; - return factory_type::create(first, last); -} +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. -// Convenience shorthand from container to iterator -// Enables ADL on begin(container) and end(container) -// Encloses the using declarations in namespace for not to leak them to outside scope +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. -namespace container_input_adapter_factory_impl +@tparam BasicJsonType the JSON type +*/ +template +class json_sax_dom_parser { + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; -using std::begin; -using std::end; - -template -struct container_input_adapter_factory {}; + /*! + @param[in,out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) + : root(r), allow_exceptions(allow_exceptions_) + {} -template -struct container_input_adapter_factory< ContainerType, - void_t()), end(std::declval()))>> - { - using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_parser() = default; - static adapter_type create(const ContainerType& container) -{ - return input_adapter(begin(container), end(container)); -} - }; + bool null() + { + handle_value(nullptr); + return true; + } -} // namespace container_input_adapter_factory_impl + bool boolean(bool val) + { + handle_value(val); + return true; + } -template -typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) -{ - return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); -} + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } -#ifndef JSON_NO_IO -// Special cases with fast paths -inline file_input_adapter input_adapter(std::FILE* file) -{ - return file_input_adapter(file); -} + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } -inline input_stream_adapter input_adapter(std::istream& stream) -{ - return input_stream_adapter(stream); -} + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } -inline input_stream_adapter input_adapter(std::istream&& stream) -{ - return input_stream_adapter(stream); -} -#endif // JSON_NO_IO + bool string(string_t& val) + { + handle_value(val); + return true; + } -using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } -// Null-delimited strings, and the like. -template < typename CharT, - typename std::enable_if < - std::is_pointer::value&& - !std::is_array::value&& - std::is_integral::type>::value&& - sizeof(typename std::remove_pointer::type) == 1, - int >::type = 0 > -contiguous_bytes_input_adapter input_adapter(CharT b) -{ - auto length = std::strlen(reinterpret_cast(b)); - const auto* ptr = reinterpret_cast(b); - return input_adapter(ptr, ptr + length); -} + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); -template -auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -{ - return input_adapter(array, array + N); -} + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); + } -// This class only handles inputs of input_buffer_adapter type. -// It's required so that expressions like {ptr, len} can be implicitly cast -// to the correct adapter. -class span_input_adapter -{ - public: - template < typename CharT, - typename std::enable_if < - std::is_pointer::value&& - std::is_integral::type>::value&& - sizeof(typename std::remove_pointer::type) == 1, - int >::type = 0 > - span_input_adapter(CharT b, std::size_t l) - : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} + return true; + } - template::iterator_category, std::random_access_iterator_tag>::value, - int>::type = 0> - span_input_adapter(IteratorType first, IteratorType last) - : ia(input_adapter(first, last)) {} + bool key(string_t& val) + { + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_value.object->operator[](val)); + return true; + } - contiguous_bytes_input_adapter&& get() + bool end_object() { - return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; } - private: - contiguous_bytes_input_adapter ia; -}; -} // namespace detail -} // namespace nlohmann + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); -// #include + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); + } + return true; + } -#include -#include // string -#include // move -#include // vector + bool end_array() + { + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } -// #include + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } -// #include + constexpr bool is_errored() const + { + return errored; + } + private: + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward(v)); + return &root; + } -namespace nlohmann -{ - -/*! -@brief SAX interface - -This class describes the SAX interface used by @ref nlohmann::json::sax_parse. -Each function is called in different situations while the input is parsed. The -boolean return value informs the parser whether to continue processing the -input. -*/ -template -struct json_sax -{ - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - - /*! - @brief a null value was read - @return whether parsing should proceed - */ - virtual bool null() = 0; - - /*! - @brief a boolean value was read - @param[in] val boolean value - @return whether parsing should proceed - */ - virtual bool boolean(bool val) = 0; - - /*! - @brief an integer number was read - @param[in] val integer value - @return whether parsing should proceed - */ - virtual bool number_integer(number_integer_t val) = 0; - - /*! - @brief an unsigned integer number was read - @param[in] val unsigned integer value - @return whether parsing should proceed - */ - virtual bool number_unsigned(number_unsigned_t val) = 0; - - /*! - @brief a floating-point number was read - @param[in] val floating-point value - @param[in] s raw token value - @return whether parsing should proceed - */ - virtual bool number_float(number_float_t val, const string_t& s) = 0; - - /*! - @brief a string value was read - @param[in] val string value - @return whether parsing should proceed - @note It is safe to move the passed string value. - */ - virtual bool string(string_t& val) = 0; - - /*! - @brief a binary value was read - @param[in] val binary value - @return whether parsing should proceed - @note It is safe to move the passed binary value. - */ - virtual bool binary(binary_t& val) = 0; - - /*! - @brief the beginning of an object was read - @param[in] elements number of object elements or -1 if unknown - @return whether parsing should proceed - @note binary formats may report the number of elements - */ - virtual bool start_object(std::size_t elements) = 0; - - /*! - @brief an object key was read - @param[in] val object key - @return whether parsing should proceed - @note It is safe to move the passed string. - */ - virtual bool key(string_t& val) = 0; - - /*! - @brief the end of an object was read - @return whether parsing should proceed - */ - virtual bool end_object() = 0; - - /*! - @brief the beginning of an array was read - @param[in] elements number of array elements or -1 if unknown - @return whether parsing should proceed - @note binary formats may report the number of elements - */ - virtual bool start_array(std::size_t elements) = 0; + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); - /*! - @brief the end of an array was read - @return whether parsing should proceed - */ - virtual bool end_array() = 0; + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::forward(v)); + return &(ref_stack.back()->m_value.array->back()); + } - /*! - @brief a parse error occurred - @param[in] position the position in the input where the error occurs - @param[in] last_token the last read token - @param[in] ex an exception object describing the error - @return whether parsing should proceed (must return false) - */ - virtual bool parse_error(std::size_t position, - const std::string& last_token, - const detail::exception& ex) = 0; + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward(v)); + return object_element; + } - json_sax() = default; - json_sax(const json_sax&) = default; - json_sax(json_sax&&) noexcept = default; - json_sax& operator=(const json_sax&) = default; - json_sax& operator=(json_sax&&) noexcept = default; - virtual ~json_sax() = default; + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; }; - -namespace detail -{ -/*! -@brief SAX implementation to create a JSON value from SAX events - -This class implements the @ref json_sax interface and processes the SAX events -to create a JSON value which makes it basically a DOM parser. The structure or -hierarchy of the JSON value is managed by the stack `ref_stack` which contains -a pointer to the respective array or object for each recursion depth. - -After successful parsing, the value that is passed by reference to the -constructor contains the parsed value. - -@tparam BasicJsonType the JSON type -*/ template -class json_sax_dom_parser +class json_sax_dom_callback_parser { public: using number_integer_t = typename BasicJsonType::number_integer_t; @@ -6903,22 +6161,23 @@ class json_sax_dom_parser using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; - /*! - @param[in,out] r reference to a JSON value that is manipulated while - parsing - @param[in] allow_exceptions_ whether parse errors yield exceptions - */ - explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) - : root(r), allow_exceptions(allow_exceptions_) - {} + json_sax_dom_callback_parser(BasicJsonType& r, + const parser_callback_t cb, + const bool allow_exceptions_ = true) + : root(r), callback(cb), allow_exceptions(allow_exceptions_) + { + keep_stack.push_back(true); + } // make class move-only - json_sax_dom_parser(const json_sax_dom_parser&) = delete; - json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) - json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; - json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) - ~json_sax_dom_parser() = default; + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_callback_parser() = default; bool null() { @@ -6964,9 +6223,15 @@ class json_sax_dom_parser bool start_object(std::size_t len) { - ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + // check callback for object start + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); - if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + // check object limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); } @@ -6976,23 +6241,67 @@ class json_sax_dom_parser bool key(string_t& val) { - // add null at given key and store the reference for later - object_element = &(ref_stack.back()->m_value.object->operator[](val)); + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); + } + return true; } bool end_object() { - ref_stack.back()->set_parents(); + if (ref_stack.back()) + { + if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + } + else + { + ref_stack.back()->set_parents(); + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + return true; } bool start_array(std::size_t len) { - ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); - if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + // check array limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); } @@ -7002,232 +6311,7 @@ class json_sax_dom_parser bool end_array() { - ref_stack.back()->set_parents(); - ref_stack.pop_back(); - return true; - } - - template - bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, - const Exception& ex) - { - errored = true; - static_cast(ex); - if (allow_exceptions) - { - JSON_THROW(ex); - } - return false; - } - - constexpr bool is_errored() const - { - return errored; - } - - private: - /*! - @invariant If the ref stack is empty, then the passed value will be the new - root. - @invariant If the ref stack contains a value, then it is an array or an - object to which we can add elements - */ - template - JSON_HEDLEY_RETURNS_NON_NULL - BasicJsonType* handle_value(Value&& v) - { - if (ref_stack.empty()) - { - root = BasicJsonType(std::forward(v)); - return &root; - } - - JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); - - if (ref_stack.back()->is_array()) - { - ref_stack.back()->m_value.array->emplace_back(std::forward(v)); - return &(ref_stack.back()->m_value.array->back()); - } - - JSON_ASSERT(ref_stack.back()->is_object()); - JSON_ASSERT(object_element); - *object_element = BasicJsonType(std::forward(v)); - return object_element; - } - - /// the parsed JSON value - BasicJsonType& root; - /// stack to model hierarchy of values - std::vector ref_stack {}; - /// helper to hold the reference for the next object element - BasicJsonType* object_element = nullptr; - /// whether a syntax error occurred - bool errored = false; - /// whether to throw exceptions in case of errors - const bool allow_exceptions = true; -}; - -template -class json_sax_dom_callback_parser -{ - public: - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - using parser_callback_t = typename BasicJsonType::parser_callback_t; - using parse_event_t = typename BasicJsonType::parse_event_t; - - json_sax_dom_callback_parser(BasicJsonType& r, - const parser_callback_t cb, - const bool allow_exceptions_ = true) - : root(r), callback(cb), allow_exceptions(allow_exceptions_) - { - keep_stack.push_back(true); - } - - // make class move-only - json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) - json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) - ~json_sax_dom_callback_parser() = default; - - bool null() - { - handle_value(nullptr); - return true; - } - - bool boolean(bool val) - { - handle_value(val); - return true; - } - - bool number_integer(number_integer_t val) - { - handle_value(val); - return true; - } - - bool number_unsigned(number_unsigned_t val) - { - handle_value(val); - return true; - } - - bool number_float(number_float_t val, const string_t& /*unused*/) - { - handle_value(val); - return true; - } - - bool string(string_t& val) - { - handle_value(val); - return true; - } - - bool binary(binary_t& val) - { - handle_value(std::move(val)); - return true; - } - - bool start_object(std::size_t len) - { - // check callback for object start - const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); - keep_stack.push_back(keep); - - auto val = handle_value(BasicJsonType::value_t::object, true); - ref_stack.push_back(val.second); - - // check object limit - if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) - { - JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); - } - - return true; - } - - bool key(string_t& val) - { - BasicJsonType k = BasicJsonType(val); - - // check callback for key - const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); - key_keep_stack.push_back(keep); - - // add discarded value at given key and store the reference for later - if (keep && ref_stack.back()) - { - object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); - } - - return true; - } - - bool end_object() - { - if (ref_stack.back()) - { - if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) - { - // discard object - *ref_stack.back() = discarded; - } - else - { - ref_stack.back()->set_parents(); - } - } - - JSON_ASSERT(!ref_stack.empty()); - JSON_ASSERT(!keep_stack.empty()); - ref_stack.pop_back(); - keep_stack.pop_back(); - - if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) - { - // remove discarded value - for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) - { - if (it->is_discarded()) - { - ref_stack.back()->erase(it); - break; - } - } - } - - return true; - } - - bool start_array(std::size_t len) - { - const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); - keep_stack.push_back(keep); - - auto val = handle_value(BasicJsonType::value_t::array, true); - ref_stack.push_back(val.second); - - // check array limit - if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) - { - JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); - } - - return true; - } - - bool end_array() - { - bool keep = true; + bool keep = true; if (ref_stack.back()) { @@ -23138,10 +22222,946 @@ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std -#endif // INCLUDE_NLOHMANN_JSON_HPP_ +#endif // INCLUDE_NLOHMANN_JSON_HPP_ + + +// end --- json.hpp --- + + + +// begin --- vec3.hpp --- + +#ifndef FLIPPY_VEC3_HPP +#define FLIPPY_VEC3_HPP +/** + * @file + * @brief Header file containing the definition and implementation a 3 dimensional vector class, with useful + * mathematical operations like cross and dot products as member methods. + */ + + +#include +#include +#include + + +namespace fp{ + +/** + * \brief Internal implementation of a 3D vector. + * + * !!! vec3 does not throw !!! This means that if you ask vec3 to divide a vector by 0 or more realistically if you + * normalize a zero length vector vec3 will not check for the division by zero and will return a nan result! + * Since vec3 is used everywhere in flippy, including in very expensive calculations, I decided to omit the security check + * for the sake of speed. + * + * To keep the external dependencies low, flippy implements it's own 3D vector class with basic functionality like dot product and cross product + * + * Example: + * ```c++ + * fp::vec3 v1{1,0,0}; + * fp::vec3 v2{0,0,1}; + * + * assert(v1.dot(v2)==0); + * assert(v1.cross(v2).norm()==1); + * assert(((v1-v2)==fp::vec3{1.,0.,-1.})); + * ``` + * + * @tparam Real @RealStub + */ + +template +class vec3 +{ +public: + + Real x; //!< The x component of the vector. + Real y; //!< The y component of the vector. + Real z; //!< The z component of the vector. + + //! In place addition method. + /** + * Example: + * ```c++ + * fp::vec3 v1{1,0,0}; + * fp::vec3 v2{0,0,1}; + * v1.add(v2); // v1 will contain {1, 0, 1} + * ``` + * @param v add this vector elementwise to the vector that is calling the *add* method. + */ + void add(vec3 const& v) + { + x += v.x; + y += v.y; + z += v.z; + } + + //! In place subtraction method. + /** + * Example: + * ```c++ + * fp::vec3 v1{2,0,0}; + * fp::vec3 v2{1,0,1}; + * v1.subtract(v2); // v1 will contain {1, 0, -1} + * ``` + * @param v subtract this vector elementwise from the vector that is calling the *subtract* method. + */ + void subtract(vec3 const& v) + { + x -= v.x; + y -= v.y; + z -= v.z; + } + //! Scale the vector by a real number s. + /** + * This function scales the vector in-place by the provided number `s`. + * @param s multiplicative prefactor. + */ + void scale(Real s) + { + x = s*x; + y = s*y; + z = s*z; + } + + //! Calculate dot product with another vector. + /** + * Example: + * @code{c++} + * fp::vec3 v1{1,0,0}; + * fp::vec3 v2{2,0,1}; + * double res = v1.dot(v2); // res will contain 2*1 + 0*0 + 0*1=2 + * @endcode + * @param v the other vec3 vector + * @return result of the dot product between the original vector and `v`. + */ + Real dot(vec3 const& v) const + { + Real res = x*v.x + y*v.y + z*v.z; + return res; + } + + //! Always returns 3. + /** + * This function always returns 3 since vec3 can only have three elements. + * It was implemented for completeness, to make it more easy for vec3 to be used as a drop-in replacement for other vector types. + * @return Size (number of elements) of vec3. + */ + [[nodiscard]] constexpr std::size_t size() const { return 3; } + + //! Calculate cross product between two vectors. + /** + * A static method to calculate cross product between two vectors. + * Example: + * @code{c++} + * fp::vec3 v1{1,0,0}; + * fp::vec3 v2{0,1,0}; + * fp::vec3 v3 = cross(v1, v2); // v3 will contain {0,0,1} + * @endcode + * @param a first vector of the cross product + * @param b second vector of the cross product + * @return result of the cross product between the original vector and `v`. + */ + static inline vec3 cross(vec3 const& a, vec3 const& b) + { + vec3 res; + res.x = a.y*b.z - a.z*b.y; + res.y = a.z*b.x - a.x*b.z; + res.z = a.x*b.y - a.y*b.x; + return res; + } + + //! Calculate cross product with another vector. + /** + * Example: + * @code{c++} + * fp::vec3 v1{1,0,0}; + * fp::vec3 v2{0,1,0}; + * fp::vec3 v3 = v1.cross(v2); // v3 will contain {0,0,1} + * @endcode + * @param other the other vec3 vector. + * @return result of the cross product between the original vector and `other`. + */ + vec3 cross(vec3 const& other) const { return cross(*this, other); } + + //! Returns the norm of the vector. + /** + * Example: + * @code{c++} + * fp::vec3 v{1,0,1}; + * double res = v.norm(); // res will contain 1,4142135624... i.e. sqrt(2) + * @endcode + * @return The euclidian norm of the vector. + */ + Real norm() const { return std::sqrt(this->dot(*this)); } + + //! Returns the square of the norm of the vector. + /** + * Example: + * @code{c++} + * fp::vec3 v{1,0,1}; + * double res = v.norm_square(); // res will contain 2 + * @endcode + * @return Square of the euclidian norm of the vector. + */ + Real norm_square() const { return this->dot(*this); } + + //! Normalize the vector in place. And return a reference to the new normalized vector. + /** + * @warning If you normalize a zero length vector, you effectively + * demand to divide by zero! this function will not do a security check + * for you and will just return nan! + * @return Reference to the normalized vector. + */ + vec3const& normalize(){ + *this= *this/this->norm(); + return *this; + } + + //! Streaming operator for easy printing of the vector. + friend std::ostream& operator<<(std::ostream& os, const vec3& obj) + { + os << "{" << obj.x << ',' << obj.y << ',' << obj.z << '}'; + return os; + } + + //! default equality operator. + /** + * @param other vec3 on the right hand side of the comparison operator. + * @return `true` if all elements of the compared vectors are equal and to `false` otherwise. + */ + bool operator==(vec3 const& other) const =default; + + + //! Overloaded operator defined in terms of vec2::add. + /** + * + * @param lhs left hand side of the `+` operator + * @param rhs right hand side oif the `+` operator + * @return equivalent to a new copy of `lhs.add(rhs)`. + */ + friend vec3 operator+(vec3 lhs, vec3 const& rhs) + { + lhs+=rhs; + return lhs; + } + + //! Overloaded operator defined in terms of vec3::add. + /** + * Equivalent to `lhs.add(rhs)`. + * @param lhs left hand side of the `+=` operator + * @param rhs right hand side oif the `+=` operator + */ + friend void operator+=(vec3& lhs, vec3 const& rhs) + { + lhs.add(rhs); + } + + //! Overloaded operator defined in terms of vec3::subtract. + /** + * + * @param lhs left hand side of the `-` operator + * @param rhs right hand side oif the `-` operator + * @return equivalent to a new copy of `lhs.subtract(rhs)`. + */ + friend vec3 operator-(vec3 lhs, vec3 const& rhs) + { + lhs-=rhs; + return lhs; + } + + //! Overloaded operator defined in terms of vec3::subtract. + /** + * Equivalent to `lhs.subtract(rhs)`. + * @param lhs left hand side of the `-=` operator + * @param rhs right hand side oif the `-=` operator + */ + friend void operator-=(vec3& lhs, vec3 const& rhs) + { + lhs.subtract(rhs); + } + + //! Overloaded operator defined in terms of vec3::scale. + /** + * Left multiplication by a scalar `s*v`. + * @param lhs left hand side of the `*` operator + * @param rhs right hand side oif the `*` operator + * @return equivalent to a new copy of `rhs.scale(lhs)`. + */ + friend vec3 operator*(Real const& lhs, vec3 rhs) + { + rhs.scale(lhs); + return rhs; + } + + //! Overloaded operator defined in terms of vec3::scale. + /** + * Right multiplication by a scalar `v*s`. + * @param lhs left hand side of the `*` operator + * @param rhs right hand side oif the `*` operator + * @return equivalent to a new copy of `lhs.scale(rhs)`. + */ + friend vec3 operator*(vec3 lhs, Real const& rhs) + { + lhs.scale(rhs); + return lhs; + } + + //! Overloaded operator defined in terms of vec3::scale. + /** + * In place division by a scalar `v/s`, equivalent to `lhs.scale(1/rhs)`. + * @param lhs left hand side of the `/=` operator + * @param rhs right hand side oif the `/=` operator + * @warning for performance reasons, this function will not check for zero division! + */ + friend void operator/=(vec3& lhs, Real const& rhs){ + lhs.scale((Real)1/rhs); + } + + //! Overloaded operator defined in terms of vec3::scale. + /** + * Division by a scalar `v/s`. + * @param lhs left hand side of the `/` operator + * @param rhs right hand side oif the `/` operator + * @return equivalent to a new copu of `lhs.scale(1/rhs)`. + * @warning for performance reasons, this function will not check for zero division! + */ + friend vec3 operator/(vec3 lhs, Real const& rhs) + { + lhs/=rhs; + return lhs; + } + + //! element access operator. + /** + * @tparam Index automatically deduced type of the index. + * @param idx can only be 0 1 or 2. Any other number will cause the program to exit with an error. + * @return for a vec3 v: v[1] returns v.x, v[2] returns v.y and v[3] returns v.z. + * + * @note: The use of the subscription operator might be slower than the direct access of the data member. + */ + template + requires std::is_integral_v + Real& operator[](Index idx) + { + switch (idx) { + case 0:return x; + case 1:return y; + case 2:return z; + default:std::cerr << idx << "is out of range for as vec3 index"; + exit(12); + } + } + + //! element access operator for constant environments. + /** + * @tparam Index automatically deduced type of the index. + * @param idx can only be 0 1 or 2. Any other number will cause the program to exit with an error. + * @return for a vec3 v: v[1] returns a constant reference to v.x, v[2] returns a constant reference to v.y and v[3] returns a constant reference to v.z. + * + * @note: The use of the subscription operator might be slower than the direct access of the data member. + */ + template + requires std::is_integral_v + const Real& operator[](Index idx) const + { + switch (idx) { + case 0:return x; + case 1:return y; + case 2:return z; + default:std::cerr << idx << "is out of range for as vec3 index"; + exit(12); + } + } + + //! Unary minus operator. + /** + * + * @param v original vector. + * @return A copy of -v the vector v itself stays unaffected. + */ + friend vec3 operator-(vec3 v) + { + v.x = -v.x; + v.y = -v.y; + v.z = -v.z; + return v; + } + + //! Unary minus operator for rvalues. + /** + * + * @param v an rvalue vec3 vector. + * @return The rvalue vector `v` is moved into the function and `-v` is returned. + */ + friend vec3 operator-(vec3&& v) + { + v.x = -v.x; + v.y = -v.y; + v.z = -v.z; + return v; + } + +}; +} + +#endif //FLIPPY_VEC3_HPP + + +// end --- vec3.hpp --- + + + +namespace fp { +using Json = nlohmann::json; +//! A data structure containing all geometric and topological information associated with a node. +/** + * This is a DUMB DATA STRUCTURE, meaning that it is not responsible for the coherence of the data it contains. + * For performance reasons, methods associated with Node struct will never check if the Node::curvature is the norm of the + * Node::curvature_vector or if the Node::nn_ids and Node::nn_distances are in the correct order. + * It is the responsibility of higher-order structures like Nodes and Triangulation to check that correct data is stored and updated correctly. + * However, it does check the data for consistency. + * It will match the length of Node::nn_ids and Node::nn_distances and pop and add both of them together. + * @tparam Real @RealStub + * @tparam Index @IndexStub + */ +template +struct Node +{ + //! @NodeIDStub + Index id; + //! Voronoi area associated with the node. + /** + * The Voronoi area is the sum of (mixed) Voronoi areas inside the triangles, incident to the node. + * Definition follows [Gueguen et al. 2017](https://doi.org/10.1039/C7SM01272A). + * \f[ + * A_{i} = \sum_{j} A'_{ij}. + * \f] + * + * @see Triangulation::mixed_area + * See Figure tr1. C in Triangulation. + * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) + */ + Real area; + //! If the node is part of a closed surface triangulation, then the `volume` contains the volume of the tetrahedron connected to each voronoi cell sub-triangle and the center of the lab coordinate system as defined in [Gueguen et al. 2017](https://doi.org/10.1039/C7SM01272A). + /** + * This means that the volume of an individual node does not have a proper physical interpretation. + * Only the sum of all node volumes, which is given by the triangulation + * is interpretable as a physical volume of an object. + * The definition follows [Gueguen et al. 2017](https://doi.org/10.1039/C7SM01272A). + * \f[ + * V_{ij} = A_{ij} \vec{x}_{i}\cdot \frac{\vec{n}_{ij,j+1}}{\| \vec{n}_{ij,j+1} \|}. + * \f] + * See Figure tr1. D in Triangulation. + * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) + */ + Real volume; + //! `unit_bending_energy` corresponds to the [Helfrich bending energy](https://en.wikipedia.org/wiki/Elasticity_of_cell_membranes) with bending rigidity 1 and gaussian bending stiffness 0. + /** + * \f[ + * \mathrm{unit\_bending\_energy} = \frac{1}{2} A_{\mathrm{node}} (2 H_{node})^2 + * \f] + * where \f$ H_{node} \f$ is the mean curvature of the node given by: + * \f[ + * H_{node}^2 = \frac{\vec{K}_{node}}{2A_{node}} \cdot \frac{\vec{K}_{node}}{2A_{node}} + * \f], + * with \f$ \vec{K} \f$ denoting the Node::curvature_vector. + * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) + */ + Real unit_bending_energy; + //! Position of the node in the lab frame. + vec3 pos; + //! Curvature vector of the node. + /** + * The definition of the curvature vector follows [Meyer et al. 2003](https://doi.org/10.1007/978-3-662-05105-4_2). + * \f[ + * \vec{K}_i = \frac{1}{2A_i}\sum_{j(i)} \left( \cot\left(\alpha_{ij}^{j+1}\right) + \cot\left(\alpha_{ij}^{j-1}\right) \right)\vec{\ell}_{ij} + * \f] + * See Figure tr1. B in Triangulation. + * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) + */ + vec3 curvature_vec; + //! A vector containing the global ids of the current node's next neighbors. + /** + * `nn_ids` contains the ids of nodes that are connected to this node in the triangulation. + * The next neighbors that are also mutual neighbors in the triangulation are stored sequentially in the vector. + * The last and the first elements are also neighbors, i.e., the nn_ids vector wraps around. + * During the calculation, this is facilitated through the use of @ref fp::Neighbors. + * @note The order of the next neighbors matters for the proper function of fp::Triangulation but is not guaranteed by this data structure. + * See Figure tr1. A, in Triangulation. + */ + std::vector nn_ids; + //! Distance vectors pointing from the node to its next neighbors. + std::vector> nn_distances; + //! The Verlet list contains the ids of nodes that are close to this node. + std::vector verlet_list; + + // unit-tested + //! Find and deletes the element with the id `to_pop_nn_id` in the `nn_id` vector. + void pop_nn(Index to_pop_nn_id) + { + /** + * @param to_pop_nn_id @NNIDStub This id is supposed to be removed from the next neighbor id vector. + * @see Node::nn_ids + * @note this will lead to resizing of the vector, which can be expensive! + * @warning If the provided next neighbor id is not part of the Node::nn_ids, this function will fail silently. + * It will not delete anything and won't throw any errors or warnings; + */ + auto pop_pos = find_nns_loc_pointer(to_pop_nn_id); + auto dist = pop_pos - nn_ids.begin(); + + if (pop_pos!=nn_ids.end()) { + // I checked that this would work on example code on cppreference https://godbolt.org/z/6qf8c9nTz + nn_ids.erase(pop_pos); + nn_distances.erase(nn_distances.begin() + dist); + } + } + + auto find_nns_loc_pointer(Index nn_id){ + /** + * @brief Given the global id of the next neighbor, this function can be used to locate it in the Node::nn_ids vector. + * + * This function is just a convenient wrapper around the [std::find](https://en.cppreference.com/w/cpp/algorithm/find) function. + * ``` + * std::find(nn_ids.begin(), nn_ids.end(), to_pop_nn_id); + * ``` + * @param nn_id @NNIDStub + * @return if `nn_id` is contained in Node::nn_ids then the pointer to the position of that id in the `nn_ids` vector will be returned. + * Otherwise `nn_ids.end()`. + * @warning This function is not responsible for graceful handling of `nn_id`'s that are not found in the Node::nn_ids vector. + * If the `nn_id` is not contained in Node::nn_ids then the `nn_ids.end()` iterator will be returned. + * It is up to the user to perform the necessary checks to avoid undefined behavior that might result from trying to delete uninitiated memory. + */ + return std::find(nn_ids.begin(), nn_ids.end(), nn_id); + } + + // unit-tested + void emplace_nn_id(Index to_emplace_nn_id, vec3 const& to_emplace_nn_pos, Index loc_idx) + { + /** + * @brief This function can be used to add new next neighbors to this node. + * + * This function constructs `to_emplace_nn_id` right before `to_emplace_pos`, + * i.e. if to_emplace_nn_id is 3, to_emplace_nn_id will be constructed right before the + * 3rd element and will become the new 3rd element. + * @param to_emplace_nn_id @NNIDStub This id is supposed to be added to the Node::nn_ids vector of this node. + * @param to_emplace_nn_pos const reference to the 3 dimensional position vector (type vec3) containing the position of the new next neighbour. + * This input is used to calculate the correct distance between this node and the new next neighbor, which will then be added to the Node::nn_distances vector. + * @param loc_idx @LocNNIndexStub + * @note This function causes the resizing of two vectors, which can be costly. + * @warning Making next neighbors is a symmetric operation. I.e., if node one becomes the next neighbor of node two, node two also has to become the next neighbor of node one. + * However, this function is not responsible for this relationship. It only adds a new next neighbor to this node, and the higher-order structures, like Triangulation, are responsible for guaranteeing the reciprocal relationship. + * @see Triangulation::emplace_before(Index, Index, Index) + */ + if (loc_idx(loc_idx); + nn_ids.emplace(nn_ids.begin() + signed_loc_idx, to_emplace_nn_id); + nn_distances.emplace(nn_distances.begin() + signed_loc_idx, to_emplace_nn_pos - pos); + } + } + + //unit-tested + //! This function can provide the stored distance vector to the next neighbor. + vec3 const& get_distance_vector_to(Index nn_id) const + { + /** + * @param nn_id @NNIDStub. + * @return returns the distance currently stored in the Node::nn_distances vector for the requested next neighbor. + * If the provided `nn_id` can not be found in the Node::nn_ids vector, then the function writes an error message + * to standard error output and terminates the program with exit code 12. + * @note @TerminationNoteStub + */ + auto id_pos = std::find(nn_ids.begin(), nn_ids.end(), nn_id); + if (id_pos!=nn_ids.end()) { + return nn_distances[static_cast(id_pos - nn_ids.begin())]; + } + else { + std::cerr << "nn_id:" << nn_id << " provided to `get_distance_vector_to` is not a next neighbour of the node " + << id; + exit(12); + } + } + + //defaulted operators are not explicitly unit-tested + /** + * @brief Default equality operator. + * + * @param other_node constant reference to the other Node. + * @return True if both nodes are equal. + */ + bool operator==(Node const& other_node) const = default; + + /** + * @brief Streaming operator that can print formatted output to standard out with all Node data fields. + * + * @param os This is intended to be std::cout or any other std::ofstream reference. + * @param node The streamed node. + * @return Updated stream. + */ + friend std::ostream& operator<<(std::ostream& os, Node const& node) + { + + os << "node: " << node.id << '\n' + << "area: " << node.area << '\n' + << "volume: " << node.volume << '\n' + << "unit_bending_energy: " << node.unit_bending_energy << '\n' + << "curvature_vec: " << node.curvature_vec << '\n' + << "pos: " << node.pos << '\n' + << "nn_ids: "; + for (auto const& nn_id: node.nn_ids) { + os << nn_id << ' '; + } + os << '\n' + << "nn_distances: "; + for (auto const& nn_dist: node.nn_distances) { + os << nn_dist << '\n'; + } + os << '\n'; + + return os; + } + +}; + +/** + * @brief Data structure containing all nodes of the Triangulation. + * + * The Nodes struct is capable of reinitializing nodes from a well-formed JSON object or from a simple [std::vector](https://en.cppreference.com/w/cpp/container/vector) that contains all nodes of a triangulation. + * The nodes class is basically a wrapper around a vector of nodes, i.e., `std::vector>`, and provides additional functionality to manipulate and query this data structure. + * Nodes class is also meant to be the interface with which the end user is manipulating individual nodes. + * @tparam Real @RealStub + * @tparam Index @IndexStub + */ +template +struct Nodes +{ + std::vector> data; //!< Data member that contains the individual nodes. + + Nodes() = default; //!< Default constructor. + explicit Nodes(std::vector > data_inp):data(data_inp) + { + /** + * Copies the data from a vector of nodes and creates a new Nodes struct. + * @param data_inp A standard vector containing all the nodes that are supposed to create a new Nodes class. + */ + } //!< Constructor from a vector. + explicit Nodes(Json const& node_dict) + { + /** + * Initiating nodes from a JSON object of a node collection. + * The nodes in the JSON file must be sequentially numbered from 0 to Number_of_nodes - 1. + * @param node_dict JSON object that contains a collection of nodes. + * @warning If the JSON object is malformed, then the constructor will fail and propagate a runtime error from the JSON parser. + */ + std::vector nn_ids_temp, verlet_list_temp; + data.resize((node_dict.size())); + for (auto const& node: node_dict.items()) { + auto const& node_id = node.key(); + fp::indexing_number auto node_index = static_cast(std::stol(node_id)); + auto const& raw_pos = node.value()["pos"]; + vec3 pos{(Real) raw_pos[0], (Real) raw_pos[1], (Real) raw_pos[2]}; + + auto const& raw_curv = node.value()["curvature_vec"]; + vec3 curvature_vec{(Real) raw_curv[0], (Real) raw_curv[1], (Real) raw_curv[2]}; + Real unit_bending_energy = node.value()["unit_bending_energy"]; + Real area = node.value()["area"]; + Real volume = node.value()["volume"]; + + nn_ids_temp = node_dict[node_id]["nn_ids"].get>(); + verlet_list_temp = node_dict[node_id]["verlet_list"].get>(); + std::vector> nn_distances; + + data[static_cast(node_index)] = Node{ + .id{node_index}, + .area{area}, + .volume{volume}, + .unit_bending_energy{unit_bending_energy}, + .pos{pos}, + .curvature_vec{curvature_vec}, + .nn_ids{nn_ids_temp}, + .nn_distances{nn_distances}, + .verlet_list{verlet_list_temp} + }; + } + } //!< Constructor from JSON. + + typename std::vector>::iterator begin() + { + /** + * This function allows the Nodes struct to be used in range-based `for` loops. + * @return `data.begin()` + */ + return data.begin();} //!< Returns an iterator to the beginning of the underlying data member that contains the collection of the nodes. + typename std::vector>::const_iterator begin() const + { + /** + * This function allows the Nodes struct to be used in range-based `for` loops in constant environments. + * @return a constant iterator `data.begin()`. + */ + return data.begin(); + } //!< \overload + + typename std::vector>::iterator end() + { + /** + * This function allows the Nodes struct to be used in range-based `for` loops. + * @return `data.end()`. + */ + return data.end(); + } //!< Returns an iterator to the end of the underlying data member that contains the collection of the nodes. + typename std::vector>::const_iterator end() const + { + /** + * This function allows the Nodes struct to be used in range-based `for` loops in constant environments. + * @return a constant iterator `data.end()`. + */ + return data.end();} //!< \overload + + // getters and setters + + // Position block + //unit-tested + [[nodiscard]] const vec3& pos(Index node_id) const + { + /** + * @param node_id @NodeIDStub + * @return Constant reference to the 3D vector of the node position, Node::pos. + */ + return data[node_id].pos; + } //!< Given a node id, return the constant reference to the node position. + //unit-tested + void set_pos(Index node_id, vec3 const& new_pos){ + /** + * @param node_id @NodeIDStub This node needs to be moved. + * @param new_pos new position of the node to which the node needs to be moved. + */ + data[node_id].pos=new_pos; + } //!< Sets the position of the requested node to a given position. + void set_pos(Index node_id, vec3 && new_pos){ + /** + * @param node_id @NodeIDStub This node needs to be moved. + * @param new_pos new position of the node to which the node needs to be moved. + */ + data[node_id].pos=new_pos; + } //!< \overload + void displace(Index node_id, vec3const& displacement){ + /** + * @param node_id @NodeIDStub This node needs to be moved. + * @param displacement The displacement vector that will be added to the position vector of the node. + */ + data[node_id].pos+=displacement; + } //!< Changes the position of the requested node by a given displacement. + void displace(Index node_id, vec3&& displacement) + { + /** + * @param node_id @NodeIDStub This node needs to be moved. + * @param displacement The displacement vector that will be added to the position vector of the node. + */ + data[node_id].pos+=displacement; + } //!< \overload + + // Curvature vector block + [[nodiscard]] const vec3& curvature_vec(Index node_id) const { + /** + * @param node_id @NodeIDStub + * @return Constant reference to the 3D vector of the node curvature, Node::curvature_vec. + */ + return data[node_id].curvature_vec; + } //!< Given a node id, return the constant reference to the node curvature vector. + void set_curvature_vec(Index node_id, vec3 const& new_cv) { + /** + * @param node_id @NodeIDStub + * @param new_cv Constant lvalue reference to the new 3d curvature vector Node::curvature_vec. + */ + data[node_id].curvature_vec=new_cv; + } //!< Given a node id and a new curvature vector, reset the node's current curvature vector. + void set_curvature_vec(Index node_id, vec3 && new_cv) { + /** + * @param node_id @NodeIDStub + * @param new_cv rvalue reference to the new 3d curvature vector Node::curvature_vec. + */ + data[node_id].curvature_vec=new_cv; + } //!< @overload + + // Area block + [[nodiscard]] Real area(Index node_id)const{ + /** + * @param node_id @NodeIDStub + * @return Area associated with the node, Node::area. + */ + return data[node_id].area; + } //!< Given a node id, return node associated area. + void set_area(Index node_id, Real new_area){ + /** + * @param node_id @NodeIDStub + * @param new_area Value for the new node associated area Node::area. + * + */ + data[node_id].area = new_area; + } //!< Given a node id and a new area value, reset the current value of the node area. + + // Volume block + [[nodiscard]] Real volume(Index node_id)const{ + /** + * @param node_id @NodeIDStub + * @return Area associated to the node, Node::volume. + */ + return data[node_id].volume; + } //!< Given a node id, return node associated volume. + void set_volume(Index node_id, Real new_volume){ + /** + * @param node_id @NodeIDStub + * @param new_volume Value for the new node associated volume Node::volume. + * + */ + data[node_id].volume = new_volume; + } //!< Given a node id and a new volume value, reset the current value of the node volume. + + // Unit bending rigidity block + [[nodiscard]] Real unit_bending_energy(Index node_id)const{ + /** + * + * @param node_id @NodeIDStub + * @return Area associated to the node, Node::unit_bending_energy. + */ + return data[node_id].unit_bending_energy; + } //!< Given a node id, return node-associated unit bending energy. + void set_unit_bending_energy(Index node_id, Real new_ube){ + /** + * + * @param node_id @NodeIDStub + * @param new_ube New value of the unit bending energy (mathematical definition can be found at Node::unit_bending_energy). + */ + data[node_id].unit_bending_energy=new_ube; + } //! Given a node id and a new value for the node-associated unit bending energy, update the current value of Node::unit_bending_energy. + + // nn_id[s] block + //unit-tested + [[nodiscard]] const auto& nn_ids(Index node_id)const{ + /** + * @param node_id @NodeIDStub + * @return Constant reference to the std::vector containing next neighbour ids of the node, Node::nn_ids. + */ + return data[node_id].nn_ids; + } //!< Given a node id, return the constant reference to the nn_ids std::vector. + //unit-tested + void set_nn_ids(Index node_id, std::vectorconst& new_nn_ids){ + /** + * @param node_id @NodeIDStub + * @param new_nn_ids const reference to the standard vector containing new values of nn_ids + * @warning This function does not check the provided `new_nn_ids` vector on correctness. + * If the content is wrong in any way (order is wrong or contained ids are not actual next neighbors of the node), + * then the update will cause problems with the proper function of flippy later! + */ + data[node_id].nn_ids = new_nn_ids; + } //!< For a Node specified by `node_id`, overwrite the entire Node::nn_ids vector. + //unit-tested + [[nodiscard]] Index nn_id(Index node_id, Index loc_nn_index)const{ + /** + * @param node_id @NodeIDStub + * @param loc_nn_index @LocNNIndexStub + * @return The global id of the next neighbor that was stored at the position `loc_nn_index` in the Node::nn_ids vector of the node with the id of `node_id`. + */ + return data[node_id].nn_ids[loc_nn_index]; + } //!< Given a node id and the local index in the Node::nn_ids vector, returns the next neighbour id. + //unit-tested + void set_nn_id(Index node_id, Index loc_nn_index, Index nn_id){ + /** + * @param node_id @NodeIDStub + * @param loc_nn_index @LocNNIndexStub + * @param nn_id @NNIDStub + */ + data[node_id].nn_ids[loc_nn_index]=nn_id; + } //!< For a node specified by `node_id`, resets the value of the requested `nn_id`. + void emplace_nn_id(Index node_id, Index to_emplace_nn_id, Index loc_nn_index){ + /** + * This function is a wrapper around Node::emplace_nn_id(Index , vec3 const& , Index). + * @param node_id @NodeIDStub + * @param to_emplace_nn_id @NNIDStub + * @param loc_nn_index @LocNNIndexStub + */ + data[node_id].emplace_nn_id(to_emplace_nn_id, pos(to_emplace_nn_id), loc_nn_index); + } //!< Emplace a the id of a new node in the Node::nn_ids vector, in front of the loc_idx position. + + [[nodiscard]] const auto& nn_distances(Index node_id)const{ + /** + * The order of Node::nn_distances is the same as that of Node::nn_ids, this is guaranteed by Triangulation::update_nn_distance_vectors(Index node_id) + * @param node_id @NodeIDStub + * @return Associated std::vector containing all vec3 distance vectors from the node to its neighbors, Node::nn_distances. + */ + return data[node_id].nn_distances; + } //!< Given a node id, returns the std::vector containing distance vectors to next neighbours. + [[nodiscard]] const auto& get_nn_distance_vector_between(Index node_id, Index nn_id) const{ + /** + * This function is a wrapper around fp::Node::get_distance_vector_to(Index) const. + * @param node_id @NodeIDStub + * @param nn_id @NNIDStub + * @return Looks in the Node::nn_distances vector of the node (specified by node_id) for the distance to nn_id. A proper distance vector will be returned if the two nodes are neighbors. Otherwise, the program will terminate. + * @note @TerminationNoteStub + */ + return data[node_id].get_distance_vector_to(nn_id); + } //!< Given two global node ids, returns a distance vector (if the nodes are neighbors). + void set_nn_distance(Index node_id, Index loc_nn_index, vec3&& dist){ + /** + * @param node_id @NNIDStub + * @param loc_nn_index @LocNNIndexStub + * @param dist rvalue reference to a 3D distance vector (that points from node_id to its next neighbour). + */ + data[node_id].nn_distances[loc_nn_index]=dist; + } //!< Overwrite the next neighbor distance with a new 3d vector. + void set_nn_distance(Index node_id, Index loc_nn_index, vec3 const& dist){ + /** + * @param node_id @NNIDStub + * @param loc_nn_index @LocNNIndexStub + * @param dist lvalue constant reference to a 3D distance vector (that points from node_id to its next neighbour). + */ + data[node_id].nn_distances[loc_nn_index]=dist; + } //!< \overload + + [[nodiscard]] Index size() const { return static_cast(data.size()); } //!< Size of the Nodes data member. @return Size of the data vector, same as the number of nodes. + + Node& operator[](Index node_id) { + /** + * Nodes[node_id] is the same as Nodes.data[node_id]. + * @param node_id @NodeIDStub + * @return Reference to the Node struct with the id corresponding to node_id. + */ + return data[node_id]; + } //!< Square bracket operator overload for convenient indexing of the Nodes struct. + const Node& operator[](Index node_id) const { + /** + * Nodes[node_id] in the constant environment is the same as Nodes.data.at(node_id). + * @param node_id @NodeIDStub + * @return Constant reference to the Node struct with the id corresponding to node_id. + */ + return data.at(node_id); + } //!< @overload + + [[nodiscard]] Json make_data() const{ + /** + * @return JSON object that represents a serialization of the data contained in Nodes. + * This JSON object can later be used to reconstruct the Nodes object. + */ + Json json_data; + for (auto& node : data) { + json_data[std::to_string(node.id)] = { + {"area", node.area}, + {"volume", node.volume}, + {"unit_bending_energy", node.unit_bending_energy}, + {"pos", {node.pos[0], node.pos[1], node.pos[2]}}, + {"curvature_vec", {node.curvature_vec[0], node.curvature_vec[1], node.curvature_vec[2]}}, + {"nn_ids", node.nn_ids}, + {"verlet_list", node.verlet_list}, + }; + } + return json_data; + } //!< Serialize the Nodes struct to a JSON object. +}; +} +#endif //FLIPPY_NODES_HPP -// end --- json.hpp --- +// end --- Nodes.hpp --- @@ -23179,623 +23199,556 @@ static inline void json_dump(std::string const& file_name, const Json& data) o.close(); } -/** - * @brief Simple wrapper function that reads the content of a text file into a json object. - * - * The file name onb the disk needs to end in '.json' for this function to work. - * @param file_name @FileNameOrPathFileNameStub - * @return Json object that was parsed from the provided file. - * - * @warning This function will stream any file into the json object. - * If the provided file is not a valid json file this will cause runtime errors. - */ -static Json inline json_read(std::string file_name) -{ - auto pos_json = file_name.find_last_of(".json"); - auto not_json = (file_name.size() - 1!=pos_json); - if (not_json) { file_name = file_name + ".json"; } - std::ifstream o(file_name); - Json data; - o >> data; - o.close(); - return data; -} +/** + * @brief Simple wrapper function that reads the content of a text file into a json object. + * + * The file name onb the disk needs to end in '.json' for this function to work. + * @param file_name @FileNameOrPathFileNameStub + * @return Json object that was parsed from the provided file. + * + * @warning This function will stream any file into the json object. + * If the provided file is not a valid json file this will cause runtime errors. + */ +static Json inline json_read(std::string file_name) +{ + auto pos_json = file_name.find_last_of(".json"); + auto not_json = (file_name.size() - 1!=pos_json); + if (not_json) { file_name = file_name + ".json"; } + std::ifstream o(file_name); + Json data; + o >> data; + o.close(); + return data; +} + +/** + * @brief Convenient wrapper around std::find, which only works for std::vectors. + * + * @tparam T type of the vector elements. + * @param v std::vector in which we want to search. + * @param el the value of the element that we want to check for. + * @return The function returns `true` if `el` is contained in vector `v` (at least once), otherwise it returns `false`. + */ +template +[[maybe_unused]] static bool is_member(std::vector const& v, T const& el){ + return (std::find(v.begin(),v.end(), el) != v.end()); +} + /**@}*/ +} +#endif + +// end --- utils.hpp --- + + + +// begin --- Triangulator.hpp --- + +#ifndef FLIPPY_TRIANGULATOR_HPP +#define FLIPPY_TRIANGULATOR_HPP +/** + * @file + * @brief This file contains internal implementation details and is not part of the stable public api. + * The classes and methods implemented here are responsible for creating the intitial triangulations. + */ + +#include +#include +#include +#include +#include + + +/** + * @GlobalsStub + * @{ + */ +//! The M_PI macro is not defined on for all compilers, so it is defined here (if a definition does not already exist). +#ifndef M_PI +#define M_PI 3.14159265358979323846 /* pi */ +#endif +/**@}*/ + +/** + * The API stability of the functions in the implementation namespace is not guaranteed! + * Functions that are part of the implementation namespace are not part of the public facing API and are not intended fot the end-user. + * Since flippy is a headers only library this could not be hidden in source files. + */ +namespace fp::implementation{ + +//! @private +template +struct SimpleNodeData{ + std::string hash{}; + Index id{}; + vec3 pos{}; + std::unordered_set nn_hashes{}; +}; + +//! @private +template +class IcosahedronSubTriangulation +{ +public: + static std::string hash_node(Index c) + { + /** + * returns a unique hash for a corner node, which is just the id of that corner node. + */ + return std::to_string(c); + } + + static std::string hash_node(Index c0, Index c1, Index n) + { + /** + * returns a unique hash for a node on one of the sides of the initial triangle. + * This hash is determined by the (ordered) corner nodes of the initial edge and the index of the node. + */ + Index a = std::min(c0, c1); + Index b = std::max(c0, c1); + return std::to_string(a) + "_" + std::to_string(b) + "_" + std::to_string(n); + } + + static std::string hash_node(Index c0, Index c1, Index c2, Index i, Index j) + { + /** + * returns a unique hash for a node in the bulk of the subtriangulation. + */ + std::vector cv{c0, c1, c2}; + std::sort(cv.begin(), cv.end()); + + return std::to_string(cv[0]) + "_" + std::to_string(cv[1]) + "_" + std::to_string(cv[2]) + + "_" + std::to_string(i) + "_" + std::to_string(j); + } + + static vec3 r_S1(Real R, Real t, Real f) { + vec3 r{R * std::sin(t) * std::cos(f), R * std::sin(t) * std::sin(f), R * std::cos(t)}; + return r; + } + + static constexpr int N_ICOSA_FACEs = 20; + static constexpr int N_ICOSA_EDGEs = 30; + static constexpr int N_ICOSA_NODEs = 12; + + static constexpr std::array FACE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; + static constexpr std::array NODE_IDs{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + static constexpr std::array, N_ICOSA_FACEs> FACE_CORNER_NODES_ = { + std::array{NODE_IDs[0], NODE_IDs[5], NODE_IDs[1]}, + std::array{NODE_IDs[0], NODE_IDs[1], NODE_IDs[2]}, + std::array{NODE_IDs[0], NODE_IDs[2], NODE_IDs[3]}, + std::array{NODE_IDs[0], NODE_IDs[3], NODE_IDs[4]}, + std::array{NODE_IDs[0], NODE_IDs[4], NODE_IDs[5]}, + std::array{NODE_IDs[10], NODE_IDs[5], NODE_IDs[4]}, + std::array{NODE_IDs[10], NODE_IDs[6], NODE_IDs[5]}, + std::array{NODE_IDs[6], NODE_IDs[1], NODE_IDs[5]}, + std::array{NODE_IDs[6], NODE_IDs[7], NODE_IDs[1]}, + std::array{NODE_IDs[7], NODE_IDs[2], NODE_IDs[1]}, + std::array{NODE_IDs[7], NODE_IDs[8], NODE_IDs[2]}, + std::array{NODE_IDs[8], NODE_IDs[3], NODE_IDs[2]}, + std::array{NODE_IDs[8], NODE_IDs[9], NODE_IDs[3]}, + std::array{NODE_IDs[9], NODE_IDs[4], NODE_IDs[3]}, + std::array{NODE_IDs[9], NODE_IDs[10], NODE_IDs[4]}, + std::array{NODE_IDs[11], NODE_IDs[10], NODE_IDs[9]}, + std::array{NODE_IDs[11], NODE_IDs[6], NODE_IDs[10]}, + std::array{NODE_IDs[11], NODE_IDs[7], NODE_IDs[6]}, + std::array{NODE_IDs[11], NODE_IDs[8], NODE_IDs[7]}, + std::array{NODE_IDs[11], NODE_IDs[9], NODE_IDs[8]} + }; -/** - * @brief Convenient wrapper around std::find, which only works for std::vectors. - * - * @tparam T type of the vector elements. - * @param v std::vector in which we want to search. - * @param el the value of the element that we want to check for. - * @return The function returns `true` if `el` is contained in vector `v` (at least once), otherwise it returns `false`. - */ -template -[[maybe_unused]] static bool is_member(std::vector const& v, T const& el){ - return (std::find(v.begin(),v.end(), el) != v.end()); -} - /**@}*/ -} -#endif + static constexpr const std::array, N_ICOSA_FACEs> FACE_CORNER_NODES = { + std::array{0, 5, 1}, + std::array{0, 1, 2}, + std::array{0, 2, 3}, + std::array{0, 3, 4}, + std::array{0, 4, 5}, + std::array{10, 5, 4}, + std::array{10, 6, 5}, + std::array{6, 1, 5}, + std::array{6, 7, 1}, + std::array{7, 2, 1}, + std::array{7, 8, 2}, + std::array{8, 3, 2}, + std::array{8, 9, 3}, + std::array{9, 4, 3}, + std::array{9, 10, 4}, + std::array{11, 10, 9}, + std::array{11, 6, 10}, + std::array{11, 7, 6}, + std::array{11, 8, 7}, + std::array{11, 9, 8} + }; -// end --- utils.hpp --- + static std::unordered_map> make_corner_nodes() + { + Real R = 1.; + std::unordered_map> base_nodes(N_ICOSA_NODEs); + base_nodes[hash_node(0)] = {.hash=hash_node(0), .id=0, .pos=r_S1(R, 0., 0.)}; + std::string hash; + hash.reserve(2); + for (Index i = 1; i<6; ++i) { + hash = hash_node(i); + base_nodes[hash] = { + .hash=hash, + .id=i, + .pos=r_S1(R, + static_cast(M_PI/2. - std::atan(0.5)), + static_cast(2.*M_PI*(static_cast(i) - 1.)/5.))}; + } + for (Index i = 6; i(M_PI/2. + std::atan(0.5)), + static_cast(2.*M_PI*(static_cast(i) - 6.5)/5.))}; + } + hash = hash_node(N_ICOSA_NODEs - 1); + base_nodes[hash] = { + .hash=hash, + .id=static_cast(N_ICOSA_NODEs - 1), + .pos=r_S1(R, static_cast(M_PI), static_cast(0.))}; + return base_nodes; + } -// begin --- Nodes.hpp --- + enum TriangleRegion + { + TOP_CORNER, BOTTOM_LEFT_CORNER, BOTTOM_RIGHT_CORNER, LEFT_EDGE, BOTTOM_EDGE, DIAGONAL_EDGE, BULK + }; -#ifndef FLIPPY_NODES_HPP -#define FLIPPY_NODES_HPP -/** - * @file - * @brief This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node of the triangulation - * and the collection of all nodes of the triangulation, respectively. - */ -#include -#include + static TriangleRegion get_region(Index i, Index j, Index sizeMinOne) + { + if (i==0) { return TOP_CORNER; } + else if (j==0 && i==sizeMinOne) { return BOTTOM_LEFT_CORNER; } + else if (j==sizeMinOne && i==sizeMinOne) { return BOTTOM_RIGHT_CORNER; } + else if (j==0) { return LEFT_EDGE; } + else if (i==sizeMinOne) { return BOTTOM_EDGE; } + else if (i==j) { return DIAGONAL_EDGE; } + else { return BULK; } + } -namespace fp { -using Json = nlohmann::json; -//! A data structure containing all geometric and topological information associated with a node. -/** - * This is a DUMB DATA STRUCTURE, meaning that it is not responsible for the coherence of the data it contains. - * For performance reasons, methods associated with Node struct will never check if the Node::curvature is the norm of the - * Node::curvature_vector or if the Node::nn_ids and Node::nn_distances are in the correct order. - * It is the responsibility of higher-order structures like Nodes and Triangulation to check that correct data is stored and updated correctly. - * However, it does check the data for consistency. - * It will match the length of Node::nn_ids and Node::nn_distances and pop and add both of them together. - * @tparam Real @RealStub - * @tparam Index @IndexStub - */ -template -struct Node -{ - //! @NodeIDStub - Index id; - //! Voronoi area associated with the node. - /** - * The Voronoi area is the sum of (mixed) Voronoi areas inside the triangles, incident to the node. - * Definition follows [Gueguen et al. 2017](https://doi.org/10.1039/C7SM01272A). - * \f[ - * A_{i} = \sum_{j} A'_{ij}. - * \f] - * - * @see Triangulation::mixed_area - * See Figure tr1. C in Triangulation. - * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) - */ - Real area; - //! If the node is part of a closed surface triangulation, then the `volume` contains the volume of the tetrahedron connected to each voronoi cell sub-triangle and the center of the lab coordinate system as defined in [Gueguen et al. 2017](https://doi.org/10.1039/C7SM01272A). - /** - * This means that the volume of an individual node does not have a proper physical interpretation. - * Only the sum of all node volumes, which is given by the triangulation - * is interpretable as a physical volume of an object. - * The definition follows [Gueguen et al. 2017](https://doi.org/10.1039/C7SM01272A). - * \f[ - * V_{ij} = A_{ij} \vec{x}_{i}\cdot \frac{\vec{n}_{ij,j+1}}{\| \vec{n}_{ij,j+1} \|}. - * \f] - * See Figure tr1. D in Triangulation. - * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) - */ - Real volume; - //! `unit_bending_energy` corresponds to the [Helfrich bending energy](https://en.wikipedia.org/wiki/Elasticity_of_cell_membranes) with bending rigidity 1 and gaussian bending stiffness 0. - /** - * \f[ - * \mathrm{unit\_bending\_energy} = \frac{1}{2} A_{\mathrm{node}} (2 H_{node})^2 - * \f] - * where \f$ H_{node} \f$ is the mean curvature of the node given by: - * \f[ - * H_{node}^2 = \frac{\vec{K}_{node}}{2A_{node}} \cdot \frac{\vec{K}_{node}}{2A_{node}} - * \f], - * with \f$ \vec{K} \f$ denoting the Node::curvature_vector. - * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) - */ - Real unit_bending_energy; - //! Position of the node in the lab frame. - vec3 pos; - //! Curvature vector of the node. - /** - * The definition of the curvature vector follows [Meyer et al. 2003](https://doi.org/10.1007/978-3-662-05105-4_2). - * \f[ - * \vec{K}_i = \frac{1}{2A_i}\sum_{j(i)} \left( \cot\left(\alpha_{ij}^{j+1}\right) + \cot\left(\alpha_{ij}^{j-1}\right) \right)\vec{\ell}_{ij} - * \f] - * See Figure tr1. B in Triangulation. - * @see Node::curvature_vec Triangulation::update_bulk_node_geometry(Index) - */ - vec3 curvature_vec; - //! A vector containing the global ids of the current node's next neighbors. - /** - * `nn_ids` contains the ids of nodes that are connected to this node in the triangulation. - * The next neighbors that are also mutual neighbors in the triangulation are stored sequentially in the vector. - * The last and the first elements are also neighbors, i.e., the nn_ids vector wraps around. - * During the calculation, this is facilitated through the use of @ref fp::Neighbors. - * @note The order of the next neighbors matters for the proper function of fp::Triangulation but is not guaranteed by this data structure. - * See Figure tr1. A, in Triangulation. - */ - std::vector nn_ids; - //! Distance vectors pointing from the node to its next neighbors. - std::vector> nn_distances; - //! The Verlet list contains the ids of nodes that are close to this node. - std::vector verlet_list; + static std::string hash_any(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx) + { + switch (get_region(i, j, maxIdx)) { + case TOP_CORNER:return hash_node(c0); + case BOTTOM_LEFT_CORNER:return hash_node(c1); + case BOTTOM_RIGHT_CORNER:return hash_node(c2); + case LEFT_EDGE:return hash_node(c0, c1, i); + case BOTTOM_EDGE:return hash_node(c1, c2, j); + case DIAGONAL_EDGE:return hash_node(c0, c2, j); + case BULK:return hash_node(c0, c1, c2, i, j); + default: + std::cerr<<"something went wrong! provided indices i: " + < neighbour_hash_vec(Index c0, Index c1, Index c2, Index i, Index j, Index maxIdx) + { + std::vector neighbour_hash; + neighbour_hash.reserve(6); + switch (get_region(i, j, maxIdx)) { - if (pop_pos!=nn_ids.end()) { - // I checked that this would work on example code on cppreference https://godbolt.org/z/6qf8c9nTz - nn_ids.erase(pop_pos); - nn_distances.erase(nn_distances.begin() + dist); - } - } + case TOP_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 0, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, 1, 1, maxIdx)); + return neighbour_hash; - auto find_nns_loc_pointer(Index nn_id){ - /** - * @brief Given the global id of the next neighbor, this function can be used to locate it in the Node::nn_ids vector. - * - * This function is just a convenient wrapper around the [std::find](https://en.cppreference.com/w/cpp/algorithm/find) function. - * ``` - * std::find(nn_ids.begin(), nn_ids.end(), to_pop_nn_id); - * ``` - * @param nn_id @NNIDStub - * @return if `nn_id` is contained in Node::nn_ids then the pointer to the position of that id in the `nn_ids` vector will be returned. - * Otherwise `nn_ids.end()`. - * @warning This function is not responsible for graceful handling of `nn_id`'s that are not found in the Node::nn_ids vector. - * If the `nn_id` is not contained in Node::nn_ids then the `nn_ids.end()` iterator will be returned. - * It is up to the user to perform the necessary checks to avoid undefined behavior that might result from trying to delete uninitiated memory. - */ - return std::find(nn_ids.begin(), nn_ids.end(), nn_id); - } + case BOTTOM_LEFT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); + return neighbour_hash; - // unit-tested - void emplace_nn_id(Index to_emplace_nn_id, vec3 const& to_emplace_nn_pos, Index loc_idx) - { - /** - * @brief This function can be used to add new next neighbors to this node. - * - * This function constructs `to_emplace_nn_id` right before `to_emplace_pos`, - * i.e. if to_emplace_nn_id is 3, to_emplace_nn_id will be constructed right before the - * 3rd element and will become the new 3rd element. - * @param to_emplace_nn_id @NNIDStub This id is supposed to be added to the Node::nn_ids vector of this node. - * @param to_emplace_nn_pos const reference to the 3 dimensional position vector (type vec3) containing the position of the new next neighbour. - * This input is used to calculate the correct distance between this node and the new next neighbor, which will then be added to the Node::nn_distances vector. - * @param loc_idx @LocNNIndexStub - * @note This function causes the resizing of two vectors, which can be costly. - * @warning Making next neighbors is a symmetric operation. I.e., if node one becomes the next neighbor of node two, node two also has to become the next neighbor of node one. - * However, this function is not responsible for this relationship. It only adds a new next neighbor to this node, and the higher-order structures, like Triangulation, are responsible for guaranteeing the reciprocal relationship. - * @see Triangulation::emplace_before(Index, Index, Index) - */ - if (loc_idx(loc_idx); - nn_ids.emplace(nn_ids.begin() + signed_loc_idx, to_emplace_nn_id); - nn_distances.emplace(nn_distances.begin() + signed_loc_idx, to_emplace_nn_pos - pos); - } - } + case BOTTOM_RIGHT_CORNER:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); + return neighbour_hash; - //unit-tested - //! This function can provide the stored distance vector to the next neighbor. - vec3 const& get_distance_vector_to(Index nn_id) const - { - /** - * @param nn_id @NNIDStub. - * @return returns the distance currently stored in the Node::nn_distances vector for the requested next neighbor. - * If the provided `nn_id` can not be found in the Node::nn_ids vector, then the function writes an error message - * to standard error output and terminates the program with exit code 12. - * @note @TerminationNoteStub - */ - auto id_pos = std::find(nn_ids.begin(), nn_ids.end(), nn_id); - if (id_pos!=nn_ids.end()) { - return nn_distances[static_cast(id_pos - nn_ids.begin())]; - } - else { - std::cerr << "nn_id:" << nn_id << " provided to `get_distance_vector_to` is not a next neighbour of the node " - << id; - exit(12); - } - } + case LEFT_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx)); + return neighbour_hash; - //defaulted operators are not explicitly unit-tested - /** - * @brief Default equality operator. - * - * @param other_node constant reference to the other Node. - * @return True if both nodes are equal. - */ - bool operator==(Node const& other_node) const = default; + case BOTTOM_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); + return neighbour_hash; - /** - * @brief Streaming operator that can print formatted output to standard out with all Node data fields. - * - * @param os This is intended to be std::cout or any other std::ofstream reference. - * @param node The streamed node. - * @return Updated stream. - */ - friend std::ostream& operator<<(std::ostream& os, Node const& node) - { + case DIAGONAL_EDGE:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx)); + return neighbour_hash; - os << "node: " << node.id << '\n' - << "area: " << node.area << '\n' - << "volume: " << node.volume << '\n' - << "unit_bending_energy: " << node.unit_bending_energy << '\n' - << "curvature_vec: " << node.curvature_vec << '\n' - << "pos: " << node.pos << '\n' - << "nn_ids: "; - for (auto const& nn_id: node.nn_ids) { - os << nn_id << ' '; - } - os << '\n' - << "nn_distances: "; - for (auto const& nn_dist: node.nn_distances) { - os << nn_dist << '\n'; - } - os << '\n'; + case BULK:neighbour_hash.push_back(hash_any(c0, c1, c2, i, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j - 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i - 1, j, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i, j + 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j + 1, maxIdx)); + neighbour_hash.push_back(hash_any(c0, c1, c2, i + 1, j, maxIdx)); + return neighbour_hash; + default: + std::cerr<<"something went wrong! provided indices i: " + <(k)/static_cast(n); + Real denominator = static_cast(l + std::sqrt(4.*R*R - l*l)/std::tan(fr*2.*asin(l/(2.*R)))); + return static_cast(2.)*R*R/denominator; + } + } + static vec3 get_pos(vec3 const& p0, vec3 const& p1, vec3 const& p2, Index i, Index j, Index maxIdx) + { /** - * @brief Data structure containing all nodes of the Triangulation. - * - * The Nodes struct is capable of reinitializing nodes from a well-formed JSON object or from a simple [std::vector](https://en.cppreference.com/w/cpp/container/vector) that contains all nodes of a triangulation. - * The nodes class is basically a wrapper around a vector of nodes, i.e., `std::vector>`, and provides additional functionality to manipulate and query this data structure. - * Nodes class is also meant to be the interface with which the end user is manipulating individual nodes. - * @tparam Real @RealStub - * @tparam Index @IndexStub + * get the position o a node in the sub triangulation of a face of the initial icosahedron. + * ```{.txt} + * p0 + * /___\ + * e1 /__\/__\ e2 + * / \ / \ / \ + * p1 --------- p3 + * e3 + * ``` */ + vec3 e1 = p1 - p0; + vec3 e2 = p2 - p0; + auto e = e1.norm(); + Real wi = even_angular_distance_length(e, i, maxIdx); + + e1.normalize(); + e2.normalize(); + + vec3 li{}; + Real li_norm{0}; + vec3 interm_1 = p0 + wi*e1; + interm_1.normalize(); + if (i!=0) { + vec3 interm_2 = p0 + wi*e2; + interm_2.normalize(); + + li = interm_2 - interm_1; + li_norm = li.norm(); + li.normalize(); + } + Real wj = even_angular_distance_length(li_norm, j, i); + return interm_1 + wj*li; + } + + static std::tuple get_sorted_face_nodes(std::array face) + { + std::sort(face.begin(), face.end()); + return {static_cast(face[0]), + static_cast(face[1]), + static_cast(face[2])}; + } + static void make_face_nodes(std::unordered_map>& node_cache, Index nIter) + { + vec3 p0, p1, p2, pos; + Index nEdge = nIter + 2;// total Number of nodes on an edge + Index maxIdx = nIter + 1;// max value i or j can have + + std::string hash; + hash.reserve(10); + + std::string c0_h, c1_h, c2_h; + for (auto face: FACE_CORNER_NODES) { + auto[c0, c1, c2] = get_sorted_face_nodes(face); + c0_h = hash_node(c0); + c1_h = hash_node(c1); + c2_h = hash_node(c2); + p0 = node_cache[c0_h].pos; + p1 = node_cache[c1_h].pos; + p2 = node_cache[c2_h].pos; + for (Index i = 0; i neighbour_hashes = neighbour_hash_vec(c0, c1, c2, i, j, maxIdx); + for (auto const& neighbour_hash: neighbour_hashes) { + node_cache[hash].nn_hashes.insert(neighbour_hash); + node_cache[neighbour_hash].nn_hashes.insert(hash); + } + } + } + for (Index idx = 0; auto& nodeEl: node_cache) { + nodeEl.second.id = idx; + ++idx; + } + + } + + } +}; + +//! @private template -struct Nodes -{ - std::vector> data; //!< Data member that contains the individual nodes. +class PlanarTriangulation{ + Index n_length; +public: + std::vector> nn_ids; + std::vector is_bulk; + [[nodiscard]] Index ij_to_id(Index i, Index j){return i*n_length+j;} + [[nodiscard]] Index id_to_i(Index id){return id/n_length;} + [[nodiscard]] Index id_to_j(Index id){return id%n_length;} - Nodes() = default; //!< Default constructor. - explicit Nodes(std::vector > data_inp):data(data_inp) - { - /** - * Copies the data from a vector of nodes and creates a new Nodes struct. - * @param data_inp A standard vector containing all the nodes that are supposed to create a new Nodes class. - */ - } //!< Constructor from a vector. - explicit Nodes(Json const& node_dict) - { - /** - * Initiating nodes from a JSON object of a node collection. - * The nodes in the JSON file must be sequentially numbered from 0 to Number_of_nodes - 1. - * @param node_dict JSON object that contains a collection of nodes. - * @warning If the JSON object is malformed, then the constructor will fail and propagate a runtime error from the JSON parser. - */ - std::vector nn_ids_temp, verlet_list_temp; - data.resize((node_dict.size())); - for (auto const& node: node_dict.items()) { - auto const& node_id = node.key(); - fp::indexing_number auto node_index = static_cast(std::stol(node_id)); - auto const& raw_pos = node.value()["pos"]; - vec3 pos{(Real) raw_pos[0], (Real) raw_pos[1], (Real) raw_pos[2]}; + // TL T TR + // L R + // BL B BR - auto const& raw_curv = node.value()["curvature_vec"]; - vec3 curvature_vec{(Real) raw_curv[0], (Real) raw_curv[1], (Real) raw_curv[2]}; - Real unit_bending_energy = node.value()["unit_bending_energy"]; - Real area = node.value()["area"]; - Real volume = node.value()["volume"]; + [[nodiscard]] Index TL(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)-1);} + [[nodiscard]] Index T (Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id) );} + [[nodiscard]] Index TR(Index id){ return ij_to_id(id_to_i(id)-1, id_to_j(id)+1);} + [[nodiscard]] Index L(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)-1);} + [[nodiscard]] Index R(Index id){ return ij_to_id(id_to_i(id) , id_to_j(id)+1);} + [[nodiscard]] Index BL(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)-1);} + [[nodiscard]] Index B (Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id) );} + [[nodiscard]] Index BR(Index id){ return ij_to_id(id_to_i(id)+1, id_to_j(id)+1);} - nn_ids_temp = node_dict[node_id]["nn_ids"].get>(); - verlet_list_temp = node_dict[node_id]["verlet_list"].get>(); - std::vector> nn_distances; + [[nodiscard]] std::vector bulk_odd_j_neighbor_ids(Index id){ + return { B(id), R(id), TR(id), T(id), TL(id), L(id) }; + } - data[static_cast(node_index)] = Node{ - .id{node_index}, - .area{area}, - .volume{volume}, - .unit_bending_energy{unit_bending_energy}, - .pos{pos}, - .curvature_vec{curvature_vec}, - .nn_ids{nn_ids_temp}, - .nn_distances{nn_distances}, - .verlet_list{verlet_list_temp} - }; - } - } //!< Constructor from JSON. + [[nodiscard]] std::vector bulk_even_j_neighbor_ids(Index id){ + return { T(id), L(id), BL(id), B(id), BR(id), R(id) }; + } - typename std::vector>::iterator begin() - { - /** - * This function allows the Nodes struct to be used in range-based `for` loops. - * @return `data.begin()` - */ - return data.begin();} //!< Returns an iterator to the beginning of the underlying data member that contains the collection of the nodes. - typename std::vector>::const_iterator begin() const - { - /** - * This function allows the Nodes struct to be used in range-based `for` loops in constant environments. - * @return a constant iterator `data.begin()`. - */ - return data.begin(); - } //!< \overload + [[nodiscard]] std::vector top_boundary_odd_j_neighbor_ids(Index id){ + return { L(id), B(id), R(id) }; + } - typename std::vector>::iterator end() - { - /** - * This function allows the Nodes struct to be used in range-based `for` loops. - * @return `data.end()`. - */ - return data.end(); - } //!< Returns an iterator to the end of the underlying data member that contains the collection of the nodes. - typename std::vector>::const_iterator end() const - { - /** - * This function allows the Nodes struct to be used in range-based `for` loops in constant environments. - * @return a constant iterator `data.end()`. - */ - return data.end();} //!< \overload + [[nodiscard]] std::vector top_boundary_even_j_neighbor_ids(Index id){ + return { L(id), BL(id), B(id), BR(id), R(id) }; + } - // getters and setters + [[nodiscard]] std::vector bottom_boundary_odd_j_neighbor_ids(Index id){ + return { R(id), TR(id), T(id), TL(id), L(id) }; + } - // Position block - //unit-tested - [[nodiscard]] const vec3& pos(Index node_id) const - { - /** - * @param node_id @NodeIDStub - * @return Constant reference to the 3D vector of the node position, Node::pos. - */ - return data[node_id].pos; - } //!< Given a node id, return the constant reference to the node position. - //unit-tested - void set_pos(Index node_id, vec3 const& new_pos){ - /** - * @param node_id @NodeIDStub This node needs to be moved. - * @param new_pos new position of the node to which the node needs to be moved. - */ - data[node_id].pos=new_pos; - } //!< Sets the position of the requested node to a given position. - void set_pos(Index node_id, vec3 && new_pos){ - /** - * @param node_id @NodeIDStub This node needs to be moved. - * @param new_pos new position of the node to which the node needs to be moved. - */ - data[node_id].pos=new_pos; - } //!< \overload - void displace(Index node_id, vec3const& displacement){ - /** - * @param node_id @NodeIDStub This node needs to be moved. - * @param displacement The displacement vector that will be added to the position vector of the node. - */ - data[node_id].pos+=displacement; - } //!< Changes the position of the requested node by a given displacement. - void displace(Index node_id, vec3&& displacement) - { - /** - * @param node_id @NodeIDStub This node needs to be moved. - * @param displacement The displacement vector that will be added to the position vector of the node. - */ - data[node_id].pos+=displacement; - } //!< \overload + [[nodiscard]] std::vector bottom_boundary_even_j_neighbor_ids(Index id){ + return { T(id), L(id), R(id) }; + } - // Curvature vector block - [[nodiscard]] const vec3& curvature_vec(Index node_id) const { - /** - * @param node_id @NodeIDStub - * @return Constant reference to the 3D vector of the node curvature, Node::curvature_vec. - */ - return data[node_id].curvature_vec; - } //!< Given a node id, return the constant reference to the node curvature vector. - void set_curvature_vec(Index node_id, vec3 const& new_cv) { - /** - * @param node_id @NodeIDStub - * @param new_cv Constant lvalue reference to the new 3d curvature vector Node::curvature_vec. - */ - data[node_id].curvature_vec=new_cv; - } //!< Given a node id and a new curvature vector, reset the node's current curvature vector. - void set_curvature_vec(Index node_id, vec3 && new_cv) { - /** - * @param node_id @NodeIDStub - * @param new_cv rvalue reference to the new 3d curvature vector Node::curvature_vec. - */ - data[node_id].curvature_vec=new_cv; - } //!< @overload + [[nodiscard]] std::vector left_boundary_neighbor_ids(Index id){ + return { T(id), B(id), BR(id), R(id)}; + } - // Area block - [[nodiscard]] Real area(Index node_id)const{ - /** - * @param node_id @NodeIDStub - * @return Area associated with the node, Node::area. - */ - return data[node_id].area; - } //!< Given a node id, return node associated area. - void set_area(Index node_id, Real new_area){ - /** - * @param node_id @NodeIDStub - * @param new_area Value for the new node associated area Node::area. - * - */ - data[node_id].area = new_area; - } //!< Given a node id and a new area value, reset the current value of the node area. + [[nodiscard]] std::vector right_boundary_odd_j_neighbor_ids(Index id){ + return { T(id), TL(id), L(id), B(id) }; + } - // Volume block - [[nodiscard]] Real volume(Index node_id)const{ - /** - * @param node_id @NodeIDStub - * @return Area associated to the node, Node::volume. - */ - return data[node_id].volume; - } //!< Given a node id, return node associated volume. - void set_volume(Index node_id, Real new_volume){ - /** - * @param node_id @NodeIDStub - * @param new_volume Value for the new node associated volume Node::volume. - * - */ - data[node_id].volume = new_volume; - } //!< Given a node id and a new volume value, reset the current value of the node volume. + [[nodiscard]] std::vector right_boundary_even_j_neighbor_ids(Index id){ + return { T(id), L(id), BL(id), B(id) }; + } - // Unit bending rigidity block - [[nodiscard]] Real unit_bending_energy(Index node_id)const{ - /** - * - * @param node_id @NodeIDStub - * @return Area associated to the node, Node::unit_bending_energy. - */ - return data[node_id].unit_bending_energy; - } //!< Given a node id, return node-associated unit bending energy. - void set_unit_bending_energy(Index node_id, Real new_ube){ - /** - * - * @param node_id @NodeIDStub - * @param new_ube New value of the unit bending energy (mathematical definition can be found at Node::unit_bending_energy). - */ - data[node_id].unit_bending_energy=new_ube; - } //! Given a node id and a new value for the node-associated unit bending energy, update the current value of Node::unit_bending_energy. + PlanarTriangulation(Index n_length_inp, Index n_width):n_length(n_length_inp){ + Index N_nodes = n_length*n_width; + + nn_ids.resize(N_nodes); + is_bulk.resize(N_nodes,false); + // populate_bulk + for(Index i=1; iconst& new_nn_ids){ - /** - * @param node_id @NodeIDStub - * @param new_nn_ids const reference to the standard vector containing new values of nn_ids - * @warning This function does not check the provided `new_nn_ids` vector on correctness. - * If the content is wrong in any way (order is wrong or contained ids are not actual next neighbors of the node), - * then the update will cause problems with the proper function of flippy later! - */ - data[node_id].nn_ids = new_nn_ids; - } //!< For a Node specified by `node_id`, overwrite the entire Node::nn_ids vector. - //unit-tested - [[nodiscard]] Index nn_id(Index node_id, Index loc_nn_index)const{ - /** - * @param node_id @NodeIDStub - * @param loc_nn_index @LocNNIndexStub - * @return The global id of the next neighbor that was stored at the position `loc_nn_index` in the Node::nn_ids vector of the node with the id of `node_id`. - */ - return data[node_id].nn_ids[loc_nn_index]; - } //!< Given a node id and the local index in the Node::nn_ids vector, returns the next neighbour id. - //unit-tested - void set_nn_id(Index node_id, Index loc_nn_index, Index nn_id){ - /** - * @param node_id @NodeIDStub - * @param loc_nn_index @LocNNIndexStub - * @param nn_id @NNIDStub - */ - data[node_id].nn_ids[loc_nn_index]=nn_id; - } //!< For a node specified by `node_id`, resets the value of the requested `nn_id`. - void emplace_nn_id(Index node_id, Index to_emplace_nn_id, Index loc_nn_index){ - /** - * This function is a wrapper around Node::emplace_nn_id(Index , vec3 const& , Index). - * @param node_id @NodeIDStub - * @param to_emplace_nn_id @NNIDStub - * @param loc_nn_index @LocNNIndexStub - */ - data[node_id].emplace_nn_id(to_emplace_nn_id, pos(to_emplace_nn_id), loc_nn_index); - } //!< Emplace a the id of a new node in the Node::nn_ids vector, in front of the loc_idx position. + // populate top and bottom boundaries + for (Index j = 1; j&& dist){ - /** - * @param node_id @NNIDStub - * @param loc_nn_index @LocNNIndexStub - * @param dist rvalue reference to a 3D distance vector (that points from node_id to its next neighbour). - */ - data[node_id].nn_distances[loc_nn_index]=dist; - } //!< Overwrite the next neighbor distance with a new 3d vector. - void set_nn_distance(Index node_id, Index loc_nn_index, vec3 const& dist){ - /** - * @param node_id @NNIDStub - * @param loc_nn_index @LocNNIndexStub - * @param dist lvalue constant reference to a 3D distance vector (that points from node_id to its next neighbour). - */ - data[node_id].nn_distances[loc_nn_index]=dist; - } //!< \overload + i = n_width-1; + id = ij_to_id(i,j); + if (j%2==0) { + nn_ids[id] = bottom_boundary_even_j_neighbor_ids(id); + }else{ + nn_ids[id] = bottom_boundary_odd_j_neighbor_ids(id); + } + } - [[nodiscard]] Index size() const { return static_cast(data.size()); } //!< Size of the Nodes data member. @return Size of the data vector, same as the number of nodes. + // populate left and right boundaries + for (Index i = 1; i& operator[](Index node_id) { - /** - * Nodes[node_id] is the same as Nodes.data[node_id]. - * @param node_id @NodeIDStub - * @return Reference to the Node struct with the id corresponding to node_id. - */ - return data[node_id]; - } //!< Square bracket operator overload for convenient indexing of the Nodes struct. - const Node& operator[](Index node_id) const { - /** - * Nodes[node_id] in the constant environment is the same as Nodes.data.at(node_id). - * @param node_id @NodeIDStub - * @return Constant reference to the Node struct with the id corresponding to node_id. - */ - return data.at(node_id); - } //!< @overload + j = n_length-1; + id = ij_to_id(i,j); + if (j%2==0) { + nn_ids[id] = right_boundary_even_j_neighbor_ids(id); + }else{ + nn_ids[id] = right_boundary_odd_j_neighbor_ids(id); + } + } - [[nodiscard]] Json make_data() const{ - /** - * @return JSON object that represents a serialization of the data contained in Nodes. - * This JSON object can later be used to reconstruct the Nodes object. - */ - Json json_data; - for (auto& node : data) { - json_data[std::to_string(node.id)] = { - {"area", node.area}, - {"volume", node.volume}, - {"unit_bending_energy", node.unit_bending_energy}, - {"pos", {node.pos[0], node.pos[1], node.pos[2]}}, - {"curvature_vec", {node.curvature_vec[0], node.curvature_vec[1], node.curvature_vec[2]}}, - {"nn_ids", node.nn_ids}, - {"verlet_list", node.verlet_list}, - }; + // populate top left corner + nn_ids[0] = std::vector{B(0), BR(0), R(0)}; + // populate bottom left corner + Index bottom_left_id = ij_to_id(n_width-1,0); + nn_ids[bottom_left_id] = std::vector{R(bottom_left_id), T(bottom_left_id)}; //Todo this bond will never flip + // populate top and bottom right corner + Index top_right_id = n_length-1; + Index bottom_right_id = N_nodes-1; + if((n_length-1)%2==0){ + nn_ids[top_right_id] = {L(top_right_id), BL(top_right_id), B(top_right_id)}; + nn_ids[bottom_right_id] = {T(bottom_right_id), L(bottom_right_id)};// Todo this bond will never flip + }else{ + nn_ids[top_right_id] = {L(top_right_id), /*BL(top_right_id),*/ B(top_right_id)}; // Todo this bond will never flip + nn_ids[bottom_right_id] = {T(bottom_right_id), TL(bottom_right_id), L(bottom_right_id),};// Todo this bond will never flip } - return json_data; - } //!< Serialize the Nodes struct to a JSON object. -}; -} -#endif //FLIPPY_NODES_HPP -// end --- Nodes.hpp --- + } +}; +} +#endif //FLIPPY_TRIANGULATOR_HPP +// end --- Triangulator.hpp --- -// begin --- Triangulation.hpp --- -#ifndef FLIPPY_TRIANGULATION_HPP -#define FLIPPY_TRIANGULATION_HPP -/** - * @file - * @brief This file contains the fp::Triangulation class and several related helper classes. This is the core of flippy. - */ -#include -#include // begin --- stlSerializer.hpp --- @@ -25372,6 +25325,90 @@ class Triangulation +namespace fp{ +template +class GradientDecentUpdater{ + static constexpr Real max_float = 3.40282347e+38; + fp::Triangulation& triangulation; + EnergyFunctionParameters const& prms; + std::function const&, fp::Triangulation const&, EnergyFunctionParameters const&)> energy_function; + Real min_bond_length_square{0.}, max_bond_length_square{max_float}; + unsigned long move_attempt{0}, bond_length_move_rejection{0},move_back{0}; + unsigned long flip_attempt{0}, bond_length_flip_rejection{0}, flip_back{0}; + +private: + GradientDecentUpdater(fp::Triangulation& triangulation_inp, + EnergyFunctionParameters const& prms_inp, + std::function const&, fp::Triangulation const&, EnergyFunctionParameters const&)> energy_function_inp, + Real min_bond_length, Real max_bond_length) + :triangulation(triangulation_inp), prms(prms_inp), energy_function(energy_function_inp), + min_bond_length_square(min_bond_length*min_bond_length), max_bond_length_square(max_bond_length*max_bond_length) + {} + + + +}; +} + +#endif + + +// end --- GradientDescentUpdater.h --- + + + +// begin --- flippy.hpp --- + +/* + *```txt + * + * .d888 888 d8b + * d88P" 888 Y8P + * 888 888 + * 888888 888 888 88888b. 88888b. 888 888 + * 888 888 888 888 "88b 888 "88b 888 888 simulating package for + * 888 888 888 888 888 888 888 888 888 dynamically triangulated + * 888 888 888 888 d88P 888 d88P Y88b 888 surfaces + * 888 888 888 88888P" 88888P" "Y88888 + * 888 888 888 version 1.0.0 + * 888 888 Y8b d88P + * 888 888 "Y88P" + * + * https://github.com/flippy-software-package/flippy + * + * + * MIT License + * + * Copyright (c) 2021 George Dadunashvili + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *``` + */ + + +/** + * @file + * @brief This header file exists for convenience. Including this header will automatically include all parts of flippy in the project. + */ +#ifndef FLIPPY_FLIPPY_HPP +#define FLIPPY_FLIPPY_HPP + // begin --- MonteCarloUpdater.hpp --- #ifndef FLIPPY_MONTECARLOUPDATER_HPP From 389e6f8e6829f25290c4b8db382e290c087a6f29 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:22:36 +0200 Subject: [PATCH 07/59] simplified math expression cot_between_vectors is antisymmetric, which can be used to simplify the expression --- flippy/Triangulation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index 7fe0263..089093b 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -676,7 +676,7 @@ class Triangulation lij_p_1 = nodes_.nn_distances(node_id)[j_p_1]; ljj_p_1 = lij_p_1 - lij; - cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1); + cot_at_j = -cot_between_vectors(lij, ljj_p_1); cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1); From af09f69a8605b71800960c1103bd27b5fef9ae65 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:26:01 +0200 Subject: [PATCH 08/59] find common_neighbours with less vector allocations this function runs in hot loops, and the reduction of allocations significantly improves the performance --- flippy/Triangulation.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index 089093b..992943d 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -1207,13 +1207,13 @@ class Triangulation { std::vector res; res.reserve(2); - std::vector nn_ids0 = nodes_[node_id_0].nn_ids; - std::vector nn_ids1 = nodes_[node_id_1].nn_ids; - std::sort(nn_ids0.begin(), nn_ids0.end()); - std::sort(nn_ids1.begin(), nn_ids1.end()); - std::set_intersection(nn_ids0.begin(), nn_ids0.end(), - nn_ids1.begin(), nn_ids1.end(), - std::back_inserter(res)); + for (Index nn_of_n0: nodes_[node_id_0].nn_ids){ + for (Index nn_of_n1: nodes_[node_id_1].nn_ids) { + if (nn_of_n0 == nn_of_n1){ + res.push_back(nn_of_n1); + } + } + } return res; } From 9181904c12b247a8f1c6cc7de3940db4358e78ac Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:28:27 +0200 Subject: [PATCH 09/59] check if two nn nodes have two common neighbors this function just checks if the number of common neighbors is two without having to remember what the common neighbors are which was not actually required by the triangulation --- flippy/Triangulation.hpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index 992943d..e401727 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -1202,6 +1202,17 @@ class Triangulation } } + bool has_two_common_neighbours(Index node_id_0, Index node_id_1) const + { + int nn_count = 0; + for (Index nn_of_n0: nodes_[node_id_0].nn_ids){ + for (Index nn_of_n1: nodes_[node_id_1].nn_ids) { + if(nn_of_n0 == nn_of_n1){ ++nn_count; } + } + if(nn_count>2){return false;} + } + return nn_count==2; + } //unit tested std::vector common_neighbours(Index node_id_0, Index node_id_1) const { From 738d030dbeef922b710914ce75c05c9c847c40c3 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:40:23 +0200 Subject: [PATCH 10/59] simple style refactoring --- flippy/Triangulation.hpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index e401727..b9fe452 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -1371,9 +1371,7 @@ class Triangulation } } void all_nodes_are_bulk(){ - for(auto const& node: nodes_){ - bulk_nodes_ids.push_back(node.id); - } + for(auto const& node: nodes_){ bulk_nodes_ids.push_back(node.id); } } From ee1e46c8d14d060c8dde0657c93fa2ded1c82a0c Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:43:00 +0200 Subject: [PATCH 11/59] better two common neighbor check during flipping Instead of finding common neighbors and checking if there are two, we now just check if there are two, not remembering already checked neighbors. in the bond flip routine for closed topologies we also omit the first check, since we know a valid triangulation before a flip will always have a correct number of neighbours --- flippy/Triangulation.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/flippy/Triangulation.hpp b/flippy/Triangulation.hpp index b9fe452..49b4da8 100644 --- a/flippy/Triangulation.hpp +++ b/flippy/Triangulation.hpp @@ -1385,11 +1385,11 @@ class Triangulation Neighbors common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id); Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square(); if ((bond_length_square < max_bond_length_square) && (bond_length_square > min_bond_length_square)) { - if (common_neighbours(node_id, nn_id).size() == 2) { +// if (has_two_common_neighbours(node_id, nn_id)) { pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); - if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) { + if (has_two_common_neighbours(bfd.common_nn_0, bfd.common_nn_1)) { update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); @@ -1398,7 +1398,7 @@ class Triangulation flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id); bfd.flipped = false; } - } +// } } } } @@ -1412,10 +1412,10 @@ class Triangulation BondFlipData bfd{}; Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square(); if ((bond_length_squaremin_bond_length_square)) { - if (common_neighbours(node_id, nn_id).size() == 2) { + if (has_two_common_neighbours(node_id, nn_id)) { pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); - if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) { + if (has_two_common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size()) { update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1); From d2afd41f672226c2f9f42f4fe4b6972be24a2727 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:53:20 +0200 Subject: [PATCH 12/59] static_cast instead of c style cast --- flippy/vec3.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flippy/vec3.hpp b/flippy/vec3.hpp index 868cb70..a2af9b2 100755 --- a/flippy/vec3.hpp +++ b/flippy/vec3.hpp @@ -283,7 +283,7 @@ class vec3 * @warning for performance reasons, this function will not check for zero division! */ friend void operator/=(vec3& lhs, Real const& rhs){ - lhs.scale((Real)1/rhs); + lhs.scale(static_cast(1.)/rhs); } //! Overloaded operator defined in terms of vec3::scale. From fa68b27b8a4e028109242c5c7c728344d53d1b79 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 15:56:40 +0200 Subject: [PATCH 13/59] this rvalue ref overload led to overload conflicts it's not really necessary and it's absence has no adverse effects on the performance --- flippy/vec3.hpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/flippy/vec3.hpp b/flippy/vec3.hpp index a2af9b2..ed0a7a5 100755 --- a/flippy/vec3.hpp +++ b/flippy/vec3.hpp @@ -356,20 +356,6 @@ class vec3 return v; } - //! Unary minus operator for rvalues. - /** - * - * @param v an rvalue vec3 vector. - * @return The rvalue vector `v` is moved into the function and `-v` is returned. - */ - friend vec3 operator-(vec3&& v) - { - v.x = -v.x; - v.y = -v.y; - v.z = -v.z; - return v; - } - }; } From 708171d7c3b077c58186befd4b51d5b308a47dbf Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 16:13:32 +0200 Subject: [PATCH 14/59] builder script for sh flippy & docs before commit --- build-commit | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 build-commit diff --git a/build-commit b/build-commit new file mode 100755 index 0000000..d86bc66 --- /dev/null +++ b/build-commit @@ -0,0 +1,8 @@ +#!/bin/bash + +npx embedme ./README.md || exit 1 + +./make_single_header_flippy.sh || exit 1 +bash make_doxygen_html.sh + + From a3a7b5550d9c18a08c8d4fec1582c3159ddfab57 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 16:14:08 +0200 Subject: [PATCH 15/59] new rvaue -vec test --- tests/vec3_test.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/vec3_test.cpp b/tests/vec3_test.cpp index 4a1e878..71d3149 100755 --- a/tests/vec3_test.cpp +++ b/tests/vec3_test.cpp @@ -206,10 +206,10 @@ TEST_CASE("check -v correctness"){ CHECK(-v == v_min); } SECTION("rvalue - is correctly returned"){ - auto make_min = [](fp::vec3&& v){return -v;}; - auto v_min = fp::vec3{-1.3f, -6.8f, -2.4f}; - auto v = make_min({1.3f, 6.8f, 2.4f}); - CHECK(v == v_min); +// auto make_min = [](fp::vec3&& v){return -v;}; +// auto v_min = fp::vec3{-1.3f, -6.8f, -2.4f}; + auto v = fp::vec3{1.3f, 6.8f, 2.4f}; + CHECK(v == -(fp::vec3{-1.3f, -6.8f, -2.4f})); } SECTION("rvalue - is correctly returned 2"){ From a06964584b3f152bb75beb31ae2afc5de385ca19 Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 16:14:53 +0200 Subject: [PATCH 16/59] removed prototype of unimplemented minimizer --- flippy/GradientDescentMinimizer.h | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 flippy/GradientDescentMinimizer.h diff --git a/flippy/GradientDescentMinimizer.h b/flippy/GradientDescentMinimizer.h deleted file mode 100644 index 303ce4e..0000000 --- a/flippy/GradientDescentMinimizer.h +++ /dev/null @@ -1,8 +0,0 @@ -// -// Created by George Dadunashvili on 26.12.23. -// - -#ifndef NODES_HPP_GRADIENTDESCENTMINIMIZER_H -#define NODES_HPP_GRADIENTDESCENTMINIMIZER_H - -#endif //NODES_HPP_GRADIENTDESCENTMINIMIZER_H From a4cdbc497cbb4af58c3954b8bbca40ee5632f39d Mon Sep 17 00:00:00 2001 From: dadu Date: Sat, 8 Jun 2024 16:15:41 +0200 Subject: [PATCH 17/59] new dependent files single header flippy and docs --- docs/_gradient_descent_updater_8h_source.html | 162 - docs/_monte_carlo_updater_8hpp_source.html | 145 +- docs/_nodes_8hpp.html | 22 +- docs/_nodes_8hpp__dep__incl.map | 22 +- docs/_nodes_8hpp__dep__incl.md5 | 2 +- docs/_nodes_8hpp__dep__incl.png | Bin 21969 -> 17946 bytes docs/_triangulation_8hpp.html | 14 +- docs/_triangulation_8hpp__dep__incl.map | 14 +- docs/_triangulation_8hpp__dep__incl.md5 | 2 +- docs/_triangulation_8hpp__dep__incl.png | Bin 13200 -> 10447 bytes docs/_triangulation_8hpp_source.html | 417 +- docs/_triangulator_8hpp.html | 18 +- docs/_triangulator_8hpp__dep__incl.map | 18 +- docs/_triangulator_8hpp__dep__incl.md5 | 2 +- docs/_triangulator_8hpp__dep__incl.png | Bin 16018 -> 13136 bytes docs/annotated.html | 13 +- docs/annotated_dup.js | 1 - docs/classes.html | 2 +- ...p_1_1_gradient_decent_updater-members.html | 123 - docs/classfp_1_1_gradient_decent_updater.html | 127 - docs/classfp_1_1_monte_carlo_updater.html | 49 +- ...172728bb0764e21ba1e44aa76cce83_icgraph.map | 12 +- ...172728bb0764e21ba1e44aa76cce83_icgraph.md5 | 2 +- ...172728bb0764e21ba1e44aa76cce83_icgraph.png | Bin 15382 -> 11989 bytes ...de725c1ae28fd44d096ffb82467b598_cgraph.map | 28 +- ...de725c1ae28fd44d096ffb82467b598_cgraph.md5 | 2 +- ...de725c1ae28fd44d096ffb82467b598_cgraph.png | Bin 45696 -> 4204 bytes ...e725c1ae28fd44d096ffb82467b598_icgraph.map | 4 + ...e725c1ae28fd44d096ffb82467b598_icgraph.md5 | 1 + ...e725c1ae28fd44d096ffb82467b598_icgraph.png | Bin 0 -> 4204 bytes docs/classfp_1_1_triangulation.html | 68 +- ...7d1be6c31f16241e9035c5a0f93652_icgraph.map | 12 +- ...7d1be6c31f16241e9035c5a0f93652_icgraph.md5 | 2 +- ...7d1be6c31f16241e9035c5a0f93652_icgraph.png | Bin 14120 -> 7660 bytes ...ee6051e9db388def8aaed68b1841d4_icgraph.map | 16 +- ...ee6051e9db388def8aaed68b1841d4_icgraph.md5 | 2 +- ...ee6051e9db388def8aaed68b1841d4_icgraph.png | Bin 17796 -> 10598 bytes ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map | 6 +- ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 | 2 +- ...43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png | Bin 33795 -> 28257 bytes ...1ec431a7a0040d7963e4297a80faaa_icgraph.map | 8 +- ...1ec431a7a0040d7963e4297a80faaa_icgraph.md5 | 2 +- ...1ec431a7a0040d7963e4297a80faaa_icgraph.png | Bin 10836 -> 5679 bytes ...5763865ac706a2e800ed306d070d68_icgraph.map | 6 +- ...5763865ac706a2e800ed306d070d68_icgraph.md5 | 2 +- ...5763865ac706a2e800ed306d070d68_icgraph.png | Bin 24467 -> 17297 bytes ...33f13e1fd24b039ca1ad2969b8d267_icgraph.map | 8 +- ...33f13e1fd24b039ca1ad2969b8d267_icgraph.md5 | 2 +- ...33f13e1fd24b039ca1ad2969b8d267_icgraph.png | Bin 10792 -> 5634 bytes ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.map | 12 +- ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 | 2 +- ...2c6430c00d719a8ea5a4a3e89715a8_icgraph.png | Bin 16993 -> 10039 bytes docs/classfp_1_1vec3-members.html | 27 +- docs/classfp_1_1vec3.html | 61 +- docs/classfp_1_1vec3.js | 1 - ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.map | 22 +- ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.md5 | 2 +- ...97ff5c62f8bb0da1c5e87fb9384da9_icgraph.png | Bin 51538 -> 47694 bytes ...68d337f067bd43b63508174f047df2_icgraph.map | 6 +- ...68d337f067bd43b63508174f047df2_icgraph.md5 | 2 +- ...68d337f067bd43b63508174f047df2_icgraph.png | Bin 37245 -> 31738 bytes ...4d6fa0ceec87d5a26cac17560f1d7c_icgraph.map | 6 +- ...4d6fa0ceec87d5a26cac17560f1d7c_icgraph.md5 | 2 +- ...4d6fa0ceec87d5a26cac17560f1d7c_icgraph.png | Bin 32670 -> 27132 bytes docs/custom__concepts_8hpp.html | 53 +- docs/custom__concepts_8hpp__dep__incl.map | 53 +- docs/custom__concepts_8hpp__dep__incl.md5 | 2 +- docs/custom__concepts_8hpp__dep__incl.png | Bin 58697 -> 50341 bytes .../dir_6b186b4a3fa96a5ae1faf2feaa17366f.html | 2 - docs/dir_6b186b4a3fa96a5ae1faf2feaa17366f.js | 1 - docs/doxygen_crawl.html | 6 - docs/files.html | 13 +- docs/namespacefp.html | 2 - docs/namespacefp.js | 1 - docs/namespaces.html | 17 +- docs/navtreedata.js | 4 +- docs/navtreeindex0.js | 342 +- docs/navtreeindex1.js | 213 +- docs/search/all_6.js | 3 +- docs/search/all_d.js | 2 +- docs/search/classes_1.js | 3 +- docs/search/related_0.js | 2 +- docs/structfp_1_1_neighbors.html | 6 +- ...501864ac7f34bd676aa97d9faf68cc_icgraph.map | 6 +- ...501864ac7f34bd676aa97d9faf68cc_icgraph.md5 | 2 +- ...501864ac7f34bd676aa97d9faf68cc_icgraph.png | Bin 25794 -> 20251 bytes docs/utils_8hpp.html | 20 +- docs/utils_8hpp__dep__incl.map | 20 +- docs/utils_8hpp__dep__incl.md5 | 2 +- docs/utils_8hpp__dep__incl.png | Bin 19272 -> 16036 bytes docs/vec3_8hpp.html | 42 +- docs/vec3_8hpp__dep__incl.map | 42 +- docs/vec3_8hpp__dep__incl.md5 | 2 +- docs/vec3_8hpp__dep__incl.png | Bin 40696 -> 36312 bytes docs/vec3_8hpp_source.html | 22 +- single_header_flippy/flippy.hpp | 39419 ++++++++-------- 96 files changed, 20578 insertions(+), 21205 deletions(-) delete mode 100644 docs/_gradient_descent_updater_8h_source.html delete mode 100644 docs/classfp_1_1_gradient_decent_updater-members.html delete mode 100644 docs/classfp_1_1_gradient_decent_updater.html create mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.map create mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.md5 create mode 100644 docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.png diff --git a/docs/_gradient_descent_updater_8h_source.html b/docs/_gradient_descent_updater_8h_source.html deleted file mode 100644 index ecb5412..0000000 --- a/docs/_gradient_descent_updater_8h_source.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -flippy: flippy/GradientDescentUpdater.h Source File - - - - - - - - - - - - - - - - - - -
-
- - - - - - - -
-
flippy -
-
a c++20 package for dynamically triangulated membrane simulations.
-
-
- - - - - - - - -
-
- -
-
-
- -
- -
-
- - -
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
-
- -
-
GradientDescentUpdater.h
-
-
-
1#ifndef FLIPPY_HPP_GRADIENTDESCENTUPDATER_H
-
2#define FLIPPY_HPP_GRADIENTDESCENTUPDATER_H
-
3
-
4#include "custom_concepts.hpp"
-
5#include "Triangulation.hpp"
-
6
-
7namespace fp{
-
8template<floating_point_number Real, indexing_number Index, typename EnergyFunctionParameters, TriangulationType triangulation_type>
-
- -
10 static constexpr Real max_float = 3.40282347e+38;
- -
12 EnergyFunctionParameters const& prms;
-
13 std::function<Real(fp::Node<Real, Index> const&, fp::Triangulation<Real, Index, triangulation_type> const&, EnergyFunctionParameters const&)> energy_function;
-
14 Real min_bond_length_square{0.}, max_bond_length_square{max_float};
-
15 unsigned long move_attempt{0}, bond_length_move_rejection{0},move_back{0};
-
16 unsigned long flip_attempt{0}, bond_length_flip_rejection{0}, flip_back{0};
-
17
-
18private:
- -
20 EnergyFunctionParameters const& prms_inp,
-
21 std::function<Real(fp::Node<Real, Index> const&, fp::Triangulation<Real, Index, triangulation_type> const&, EnergyFunctionParameters const&)> energy_function_inp,
-
22 Real min_bond_length, Real max_bond_length)
-
23 :triangulation(triangulation_inp), prms(prms_inp), energy_function(energy_function_inp),
-
24 min_bond_length_square(min_bond_length*min_bond_length), max_bond_length_square(max_bond_length*max_bond_length)
-
25 {}
-
26
-
27
-
28
-
29};
-
-
30}
-
31
-
32#endif
-
This file contains the fp::Triangulation class and several related helper classes....
-
Definition GradientDescentUpdater.h:9
-
Implementation of Triangulation of two-dimensional surfaces in 3D.
Definition Triangulation.hpp:297
-
This file contains the concepts that are costomly defined for the flippy class templates.
-
Definition custom_concepts.hpp:8
-
A data structure containing all geometric and topological information associated with a node.
Definition Nodes.hpp:30
-
-
- - - - diff --git a/docs/_monte_carlo_updater_8hpp_source.html b/docs/_monte_carlo_updater_8hpp_source.html index 72d0a72..fd71ddf 100644 --- a/docs/_monte_carlo_updater_8hpp_source.html +++ b/docs/_monte_carlo_updater_8hpp_source.html @@ -234,99 +234,100 @@
195 {
-
196 ++flip_attempt;
-
197 e_old = energy_function(node, triangulation, prms);
-
198 Index number_nn_ids = node.nn_ids.size();
-
199 Index nn_id = node.nn_ids[std::uniform_int_distribution<Index>(0, number_nn_ids-1)(rng)];
-
200 auto bfd = triangulation.flip_bond(node.id, nn_id, min_bond_length_square, max_bond_length_square);
-
201 if (bfd.flipped) {
-
202 e_new = energy_function(node, triangulation, prms);
-
203 if (move_needs_undoing()) { triangulation.unflip_bond(node.id, nn_id, bfd); ++flip_back;}
-
204 }else{++bond_length_flip_rejection;}
-
205 }
+
196 Index number_nn_ids = static_cast<Index>(node.nn_ids.size());
+
197 Index nn_id = node.nn_ids[std::uniform_int_distribution<Index>(0, number_nn_ids-1)(rng)];
+
198 flip_MC_updater(node, nn_id);
+
199// ++flip_attempt;
+
200// e_old = energy_function(node, triangulation, prms);
+
201// auto bfd = triangulation.flip_bond(node.id, nn_id, min_bond_length_square, max_bond_length_square);
+
202// if (bfd.flipped) {
+
203// e_new = energy_function(node, triangulation, prms);
+
204// if (move_needs_undoing()) { triangulation.unflip_bond(node.id, nn_id, bfd); ++flip_back;}
+
205// }else{++bond_length_flip_rejection;}
+
206 }
-
206
-
208
-
-
218 void flip_MC_updater(fp::Node<Real, Index> const& node, Index id_in_nn_ids)
-
219 {
-
220 ++flip_attempt;
-
221 e_old = energy_function(node, triangulation, prms);
-
222 Index number_nn_ids = node.nn_ids.size();
-
223// Index nn_id = index_in_nn_ids;//node.nn_ids[std::uniform_int_distribution<Index>(0, number_nn_ids-1)(rng)];
-
224 auto bfd = triangulation.flip_bond(node.id, id_in_nn_ids, min_bond_length_square, max_bond_length_square);
-
225 if (bfd.flipped) {
-
226 e_new = energy_function(node, triangulation, prms);
-
227 if (move_needs_undoing()) { triangulation.unflip_bond(node.id, id_in_nn_ids, bfd); ++flip_back;}
-
228 }else{++bond_length_flip_rejection;}
-
229 }
+
207
+
209
+
+
219 void flip_MC_updater(fp::Node<Real, Index> const& node, Index id_in_nn_ids)
+
220 {
+
221 ++flip_attempt;
+
222 e_old = energy_function(node, triangulation, prms);
+
223// Index number_nn_ids = node.nn_ids.size();
+
224// Index nn_id = index_in_nn_ids;//node.nn_ids[std::uniform_int_distribution<Index>(0, number_nn_ids-1)(rng)];
+
225 auto bfd = triangulation.flip_bond(node.id, id_in_nn_ids, min_bond_length_square, max_bond_length_square);
+
226 if (bfd.flipped) {
+
227 e_new = energy_function(node, triangulation, prms);
+
228 if (move_needs_undoing()) { triangulation.unflip_bond(node.id, id_in_nn_ids, bfd); ++flip_back;}
+
229 }else{++bond_length_flip_rejection;}
+
230 }
-
230
-
-
232 void reset_kBT(Real kBT){
-
238 kBT_=kBT;
-
239 }
+
231
+
+
233 void reset_kBT(Real kBT){
+
239 kBT_=kBT;
+
240 }
-
240
-
-
242 [[nodiscard]] Real kBT(){
-
248 return kBT_;
-
249 }
+
241
+
+
243 [[nodiscard]] Real kBT(){
+
249 return kBT_;
+
250 }
-
-
251 [[nodiscard]] unsigned long move_attempt_count() const {
-
258 return move_attempt;
-
259 }
+
+
252 [[nodiscard]] unsigned long move_attempt_count() const {
+
259 return move_attempt;
+
260 }
-
-
261 [[nodiscard]] unsigned long bond_length_move_rejection_count() const {
-
270 return bond_length_move_rejection;
-
271 }
+
+
262 [[nodiscard]] unsigned long bond_length_move_rejection_count() const {
+
271 return bond_length_move_rejection;
+
272 }
-
-
273 [[nodiscard]] unsigned long move_back_count() const {
-
281 return move_back;
-
282 }
+
+
274 [[nodiscard]] unsigned long move_back_count() const {
+
282 return move_back;
+
283 }
-
-
284 [[nodiscard]] unsigned long flip_attempt_count() const {
-
290 return flip_attempt;
-
291 }
+
+
285 [[nodiscard]] unsigned long flip_attempt_count() const {
+
291 return flip_attempt;
+
292 }
-
-
293 [[nodiscard]] unsigned long bond_length_flip_rejection_count() const {
-
301 return bond_length_flip_rejection;
-
302 }
+
+
294 [[nodiscard]] unsigned long bond_length_flip_rejection_count() const {
+
302 return bond_length_flip_rejection;
+
303 }
-
-
304 [[nodiscard]] unsigned long flip_back_count() const {
-
313 return flip_back;
-
314 }
+
+
305 [[nodiscard]] unsigned long flip_back_count() const {
+
314 return flip_back;
+
315 }
-
315
-
316};
+
316
+
317};
-
317}
-
318#endif //FLIPPY_MONTECARLOUPDATER_HPP
+
318}
+
319#endif //FLIPPY_MONTECARLOUPDATER_HPP
This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o...
This file contains the fp::Triangulation class and several related helper classes....
A helper class for updating the triangulation, using Metropolis–Hastings algorithm....
Definition MonteCarloUpdater.hpp:33
-
unsigned long move_back_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:273
-
unsigned long flip_attempt_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:284
-
unsigned long move_attempt_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:251
-
unsigned long bond_length_flip_rejection_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:293
-
Real kBT()
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:242
+
unsigned long move_back_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:274
+
unsigned long flip_attempt_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:285
+
unsigned long move_attempt_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:252
+
unsigned long bond_length_flip_rejection_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:294
+
Real kBT()
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:243
bool new_verlet_neighbour_distances_are_between_min_and_max_length(fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
Pre-update check to test that the update step will not result in an unphysical configuration.
Definition MonteCarloUpdater.hpp:150
bool move_needs_undoing()
Implementation of the Metropolis algorithm.
Definition MonteCarloUpdater.hpp:78
void flip_MC_updater(fp::Node< Real, Index > const &node)
Attempt a flip Monte Carlo Step.
Definition MonteCarloUpdater.hpp:194
-
void reset_kBT(Real kBT)
Reset the temperature of the Monte Carlo updater, at which the Boltzmann weights are evaluated.
Definition MonteCarloUpdater.hpp:232
+
void reset_kBT(Real kBT)
Reset the temperature of the Monte Carlo updater, at which the Boltzmann weights are evaluated.
Definition MonteCarloUpdater.hpp:233
void move_MC_updater(fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
Attempt a move Monte Carlo Step.
Definition MonteCarloUpdater.hpp:173
MonteCarloUpdater(fp::Triangulation< Real, Index, triangulation_type > &triangulation_inp, EnergyFunctionParameters const &prms_inp, std::function< Real(fp::Node< Real, Index > const &, fp::Triangulation< Real, Index, triangulation_type > const &, EnergyFunctionParameters const &)> energy_function_inp, RandomNumberEngine &rng_inp, Real min_bond_length, Real max_bond_length)
Definition MonteCarloUpdater.hpp:60
-
void flip_MC_updater(fp::Node< Real, Index > const &node, Index id_in_nn_ids)
Attempt a flip Monte Carlo Step.
Definition MonteCarloUpdater.hpp:218
+
void flip_MC_updater(fp::Node< Real, Index > const &node, Index id_in_nn_ids)
Attempt a flip Monte Carlo Step.
Definition MonteCarloUpdater.hpp:219
bool new_next_neighbour_distances_are_between_min_and_max_length(fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
Pre-update check to test that the update step will not result in an unphysical configuration.
Definition MonteCarloUpdater.hpp:120
-
unsigned long flip_back_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:304
+
unsigned long flip_back_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:305
bool new_neighbour_distances_are_between_min_and_max_length(fp::Node< Real, Index > const &node, fp::vec3< Real > const &displacement)
Pre-update check to test that the update step will not result in an unphysical configuration.
Definition MonteCarloUpdater.hpp:100
-
unsigned long bond_length_move_rejection_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:261
+
unsigned long bond_length_move_rejection_count() const
A getter function that returns a value of a state variable.
Definition MonteCarloUpdater.hpp:262
Implementation of Triangulation of two-dimensional surfaces in 3D.
Definition Triangulation.hpp:297
void unflip_bond(Index node_id, Index nn_id, BondFlipData< Index > const &common_nns)
Un-flip a bond that was just flipped.
Definition Triangulation.hpp:610
BondFlipData< Index > flip_bond(Index node_id, Index nn_id, Real min_bond_length_square, Real max_bond_length_square)
Securely flip the bond inside a quadrilateral formed by the nodes given by node_id,...
Definition Triangulation.hpp:523
diff --git a/docs/_nodes_8hpp.html b/docs/_nodes_8hpp.html index 7ceb2f9..2f26c5b 100644 --- a/docs/_nodes_8hpp.html +++ b/docs/_nodes_8hpp.html @@ -151,18 +151,16 @@
- - - - - - - - - - - - + + + + + + + + + +
diff --git a/docs/_nodes_8hpp__dep__incl.map b/docs/_nodes_8hpp__dep__incl.map index 6637906..e52744f 100644 --- a/docs/_nodes_8hpp__dep__incl.map +++ b/docs/_nodes_8hpp__dep__incl.map @@ -1,14 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + diff --git a/docs/_nodes_8hpp__dep__incl.md5 b/docs/_nodes_8hpp__dep__incl.md5 index 3d2fb77..331cf7f 100644 --- a/docs/_nodes_8hpp__dep__incl.md5 +++ b/docs/_nodes_8hpp__dep__incl.md5 @@ -1 +1 @@ -1b3c86753f7a94350eb5cd83c2cb4865 \ No newline at end of file +b9f99cf1aa0a69bc78189d9b8612e9d1 \ No newline at end of file diff --git a/docs/_nodes_8hpp__dep__incl.png b/docs/_nodes_8hpp__dep__incl.png index 5128565f8c477a09a0da2ed5b7094c4ae429a218..9dfaaada5462f1c03a4e58c6aadae96bf38bb6b9 100644 GIT binary patch literal 17946 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

wRP1ujP7cTbEo{ zNH|fqW*3nR+Dqh@Sj2efcnq=-GQ@`yfe`8A+j~FxeBLFikC*uz!J?5U%%QT3hMOV> xLQ9?>r;jB5X?(SN5>6z8#qi%hPp2Nxh2cfxvPiNP;FrB1DaonJR?5KM{txytPn!S$ literal 21969 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

- - - - - - - - + + + + + +
diff --git a/docs/_triangulation_8hpp__dep__incl.map b/docs/_triangulation_8hpp__dep__incl.map index 421a0ae..fd4d2d7 100644 --- a/docs/_triangulation_8hpp__dep__incl.map +++ b/docs/_triangulation_8hpp__dep__incl.map @@ -1,10 +1,8 @@ - - - - - - - - + + + + + + diff --git a/docs/_triangulation_8hpp__dep__incl.md5 b/docs/_triangulation_8hpp__dep__incl.md5 index 908b915..829c17b 100644 --- a/docs/_triangulation_8hpp__dep__incl.md5 +++ b/docs/_triangulation_8hpp__dep__incl.md5 @@ -1 +1 @@ -4566a57fd71ad54fc6abd4c07e53bd7e \ No newline at end of file +44c66dac469ced2b1a41e76b1b9f1d67 \ No newline at end of file diff --git a/docs/_triangulation_8hpp__dep__incl.png b/docs/_triangulation_8hpp__dep__incl.png index fdc1d6b2466b3dc8cf3a844498e8022c340bcf9a..2f70c19588783eec4e8a739ed80bb3b69c03365e 100644 GIT binary patch literal 10447 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 G_`d+DUvNzT diff --git a/docs/_triangulation_8hpp_source.html b/docs/_triangulation_8hpp_source.html index 56ab4cc..b457001 100644 --- a/docs/_triangulation_8hpp_source.html +++ b/docs/_triangulation_8hpp_source.html @@ -474,7 +474,7 @@
676 lij_p_1 = nodes_.nn_distances(node_id)[j_p_1];
677 ljj_p_1 = lij_p_1 - lij;
678
-
679 cot_at_j = cot_between_vectors(lij, (-1)*ljj_p_1);
+
679 cot_at_j = -cot_between_vectors(lij, ljj_p_1);
680 cot_at_j_p_1 = cot_between_vectors(lij_p_1, ljj_p_1);
681
682
@@ -839,210 +839,219 @@
1202 }
1203 }
1204
-
1205 //unit tested
-
1206 std::vector<Index> common_neighbours(Index node_id_0, Index node_id_1) const
-
1207 {
-
1208 std::vector<Index> res;
-
1209 res.reserve(2);
-
1210 std::vector<Index> nn_ids0 = nodes_[node_id_0].nn_ids;
-
1211 std::vector<Index> nn_ids1 = nodes_[node_id_1].nn_ids;
-
1212 std::sort(nn_ids0.begin(), nn_ids0.end());
-
1213 std::sort(nn_ids1.begin(), nn_ids1.end());
-
1214 std::set_intersection(nn_ids0.begin(), nn_ids0.end(),
-
1215 nn_ids1.begin(), nn_ids1.end(),
-
1216 std::back_inserter(res));
-
1217 return res;
-
1218 }
-
1219
-
1220 //unit tested
-
1221 std::array<Index, 2> two_common_neighbours(Index node_id_0, Index node_id_1) const
-
1222 {
-
1223 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
-
1224 std::array<Index, 2> res{vln, vln};
-
1225 //todo safe remove const& in the loop
-
1226 for (auto res_p = res.begin(); auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
-
1227 if (res_p==res.end()) { break; }
-
1228 else {
-
1229 if (is_member(nodes_[node_id_1].nn_ids, n0_nn_id)) {
-
1230 *res_p = n0_nn_id;
-
1231 ++res_p;
-
1232 }
-
1233 }
-
1234 }
-
1235 return res;
-
1236 }
-
1237
-
1238 std::array<Index, 2> fast_two_common_neighbours(Index node_id_0, Index node_id_1) const
-
1239 {
-
1240
-
1241 Index j = nodes_.find_nns_loc_idx(node_id_0, node_id_1);
-
1242 indexing_number auto nn_number = (Index)nodes_.nn_ids(node_id_0).size();
-
1243 Index j_p_1 = Neighbors<Index>::plus_one(j, nn_number);
-
1244 Index j_m_1 = Neighbors<Index>::plus_one(j, nn_number);
-
1245 std::array<Index, 2> res{nodes_.nn_id(node_id_0,j_m_1),
-
1246 nodes_.nn_id(node_id_0,j_p_1)};
-
1247 return res;
-
1248 }
-
1249
-
1250 std::array<Index, 2> two_common_neighbour_positions(Index node_id_0, Index node_id_1) const
-
1251 {
-
1252 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
-
1253 std::array<Index, 2> res{vln, vln};
-
1254 short counter = 0;
-
1255 for (auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
-
1256 if (counter==2) { break; }
-
1257 else {
-
1258 auto pos = std::find(nodes_[node_id_1].nn_ids.begin(), nodes_[node_id_1].nn_ids.end(), n0_nn_id);
-
1259 if (pos!=nodes_[node_id_1].nn_ids.end()) {
-
1260 res[counter] = (Index) (pos - nodes_[node_id_1].nn_ids.begin());
-
1261 ++counter;
-
1262 }
-
1263 }
-
1264 }
-
1265 return res;
-
1266 }
-
1267
-
1268 //Todo unittest
-
1269 //unit tested
-
1270 Neighbors<Index> previous_and_next_neighbour_local_ids(Index node_id, Index nn_id) const
-
1271 {
-
1282 auto const& nn_ids_view = nodes_[node_id].nn_ids;
-
1283 auto const local_nn_id = (Index) (std::find(nn_ids_view.begin(), nn_ids_view.end(), nn_id)
-
1284 - nn_ids_view.begin());
-
1285 auto const nn_number = (Index) nn_ids_view.size();
-
1286 return {.j_m_1= Neighbors<Index>::minus_one(local_nn_id, nn_number),
-
1287 .j_p_1 = Neighbors<Index>::plus_one(local_nn_id, nn_number)};
-
1288 }
-
1289
-
1290 //unit tested
-
1291 Neighbors<Index> previous_and_next_neighbour_global_ids(Index node_id, Index nn_id) const
-
1292 {
-
1303 auto const& nn_ids_view = nodes_[node_id].nn_ids;
-
1304 Neighbors<Index> neighbors = previous_and_next_neighbour_local_ids(node_id, nn_id);
-
1305 return {.j_m_1=nn_ids_view[neighbors.j_m_1], .j_p_1=nn_ids_view[neighbors.j_p_1]};
-
1306 }
-
1307
-
1308 void update_global_geometry(Geometry<Real, Index> const& lg_old, Geometry<Real, Index> const& lg_new)
-
1309 {
-
1310 global_geometry_ += lg_new - lg_old;
-
1311 }
-
1312
-
1313 // Todo unittest
-
1314 void delete_connection_between_nodes_of_old_edge(Index old_node_id0, Index old_node_id1)
-
1315 {
-
1316 nodes_[old_node_id0].pop_nn(old_node_id1);
-
1317 nodes_[old_node_id1].pop_nn(old_node_id0);
-
1318 }
-
1319
-
1320 static Nodes<Real, Index> triangulate_sphere_nodes(Index n_iter){
-
1321 std::unordered_map<std::string,fp::implementation::SimpleNodeData<Real, Index>> simpleNodeData =
-
1322 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_corner_nodes();
-
1323 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_face_nodes(simpleNodeData, n_iter);
-
1324
-
1325 fp::indexing_number auto nNewNodesOnEdge = static_cast<Index>(n_iter - 1);
-
1326 fp::indexing_number auto nBulk = static_cast<Index>(nNewNodesOnEdge*(nNewNodesOnEdge+1)/2);
-
1327 fp::indexing_number auto nNodes = static_cast<Index>(fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_NODEs
-
1328 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_EDGEs*n_iter
-
1329 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_FACEs*nBulk);
-
1330 std::vector<Node<Real, Index>> nodeData(nNodes);
-
1331 for(Index id; auto & nodeEl :simpleNodeData){
-
1332 id = nodeEl.second.id;
-
1333 nodeData[id].id = nodeEl.second.id;
-
1334 nodeData[id].pos = nodeEl.second.pos;
-
1335 for(auto const& hash: nodeEl.second.nn_hashes){
-
1336 nodeData[id].nn_ids.push_back(simpleNodeData[hash].id);
-
1337 }
-
1338 }
-
1339 return Nodes<Real, Index>(nodeData);
-
1340 }
-
1341
-
1342 void triangulate_planar_nodes(Index n_length, Index n_width, Real length, Real width){
-
1343 Index N_nodes = n_length*n_width;
-
1344 fp::implementation::PlanarTriangulation<Real, Index> triang(n_length, n_width);
-
1345// Nodes<Real, Index> bulk_nodes;
-
1346 Node<Real, Index> node{};
-
1347 node.curvature_vec=fp::vec3<Real>{0.,0.,0.};
-
1348 for(Index node_id=0; node_id<N_nodes; ++node_id){
-
1349 node.id = node_id;
-
1350 node.pos = fp::vec3<Real>{
-
1351 triang.id_to_j(node_id)*length/n_length,
-
1352 triang.id_to_i(node_id)*width/n_width,
-
1353 0.
-
1354 };
-
1355
-
1356 node.nn_ids = triang.nn_ids[node_id];
-
1357 nodes_.data.push_back(node);
-
1358 if(triang.is_bulk[node_id]){bulk_nodes_ids.push_back(node_id);}
-
1359 else{boundary_nodes_ids_set_.insert(node_id);}
-
1360 }
-
1361 }
-
1362 void all_nodes_are_bulk(){
-
1363 for(auto const& node: nodes_){
-
1364 bulk_nodes_ids.push_back(node.id);
-
1365 }
-
1366 }
-
1367
-
1368
-
1369 //unit tested
-
1370 BondFlipData<Index> flip_bulk_bond(Index node_id, Index nn_id,
-
1371 Real min_bond_length_square,
-
1372 Real max_bond_length_square) {
-
1373 BondFlipData<Index> bfd{};
-
1374 if (nodes_.nn_ids(node_id).size() > BOND_DONATION_CUTOFF) {
-
1375 if (nodes_.nn_ids(nn_id).size() > BOND_DONATION_CUTOFF) {
-
1376 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
-
1377 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
-
1378 if ((bond_length_square < max_bond_length_square) && (bond_length_square > min_bond_length_square)) {
-
1379 if (common_neighbours(node_id, nn_id).size() == 2) {
-
1380 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
-
1381 common_nns.j_p_1);
-
1382 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1383 if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) {
-
1384 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1385 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
-
1386 common_nns.j_p_1);
-
1387 update_global_geometry(pre_update_geometry, post_update_geometry);
-
1388 } else {
-
1389 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
-
1390 bfd.flipped = false;
-
1391 }
-
1392 }
-
1393 }
-
1394 }
-
1395 }
-
1396 return bfd;
-
1397 }
-
1398
-
1400 BondFlipData <Index>
-
1401 flip_bond_in_quadrilateral(Index node_id, Index nn_id, const Neighbors <Index> &common_nns,
-
1402 Real min_bond_length_square, Real max_bond_length_square) {
-
1403 BondFlipData<Index> bfd{};
-
1404 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
-
1405 if ((bond_length_square<max_bond_length_square) && (bond_length_square>min_bond_length_square)) {
-
1406 if (common_neighbours(node_id, nn_id).size() == 2) {
-
1407 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1408 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1409 if (common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size() == 2) {
-
1410 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
-
1411 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
-
1412 common_nns.j_p_1);
-
1413 update_global_geometry(pre_update_geometry, post_update_geometry);
-
1414 }
-
1415 else {
-
1416 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
-
1417 bfd.flipped = false;
-
1418 }
-
1419 }
-
1420 }
-
1421 return bfd;
-
1422 }
-
1423
-
1424};
+
1205 bool has_two_common_neighbours(Index node_id_0, Index node_id_1) const
+
1206 {
+
1207 int nn_count = 0;
+
1208 for (Index nn_of_n0: nodes_[node_id_0].nn_ids){
+
1209 for (Index nn_of_n1: nodes_[node_id_1].nn_ids) {
+
1210 if(nn_of_n0 == nn_of_n1){ ++nn_count; }
+
1211 }
+
1212 if(nn_count>2){return false;}
+
1213 }
+
1214 return nn_count==2;
+
1215 }
+
1216 //unit tested
+
1217 std::vector<Index> common_neighbours(Index node_id_0, Index node_id_1) const
+
1218 {
+
1219 std::vector<Index> res;
+
1220 res.reserve(2);
+
1221 for (Index nn_of_n0: nodes_[node_id_0].nn_ids){
+
1222 for (Index nn_of_n1: nodes_[node_id_1].nn_ids) {
+
1223 if (nn_of_n0 == nn_of_n1){
+
1224 res.push_back(nn_of_n1);
+
1225 }
+
1226 }
+
1227 }
+
1228 return res;
+
1229 }
+
1230
+
1231 //unit tested
+
1232 std::array<Index, 2> two_common_neighbours(Index node_id_0, Index node_id_1) const
+
1233 {
+
1234 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
+
1235 std::array<Index, 2> res{vln, vln};
+
1236 //todo safe remove const& in the loop
+
1237 for (auto res_p = res.begin(); auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
+
1238 if (res_p==res.end()) { break; }
+
1239 else {
+
1240 if (is_member(nodes_[node_id_1].nn_ids, n0_nn_id)) {
+
1241 *res_p = n0_nn_id;
+
1242 ++res_p;
+
1243 }
+
1244 }
+
1245 }
+
1246 return res;
+
1247 }
+
1248
+
1249 std::array<Index, 2> fast_two_common_neighbours(Index node_id_0, Index node_id_1) const
+
1250 {
+
1251
+
1252 Index j = nodes_.find_nns_loc_idx(node_id_0, node_id_1);
+
1253 indexing_number auto nn_number = (Index)nodes_.nn_ids(node_id_0).size();
+
1254 Index j_p_1 = Neighbors<Index>::plus_one(j, nn_number);
+
1255 Index j_m_1 = Neighbors<Index>::plus_one(j, nn_number);
+
1256 std::array<Index, 2> res{nodes_.nn_id(node_id_0,j_m_1),
+
1257 nodes_.nn_id(node_id_0,j_p_1)};
+
1258 return res;
+
1259 }
+
1260
+
1261 std::array<Index, 2> two_common_neighbour_positions(Index node_id_0, Index node_id_1) const
+
1262 {
+
1263 static const Index vln = static_cast<const Index>(VERY_LARGE_NUMBER_);
+
1264 std::array<Index, 2> res{vln, vln};
+
1265 short counter = 0;
+
1266 for (auto const& n0_nn_id: nodes_[node_id_0].nn_ids) {
+
1267 if (counter==2) { break; }
+
1268 else {
+
1269 auto pos = std::find(nodes_[node_id_1].nn_ids.begin(), nodes_[node_id_1].nn_ids.end(), n0_nn_id);
+
1270 if (pos!=nodes_[node_id_1].nn_ids.end()) {
+
1271 res[counter] = (Index) (pos - nodes_[node_id_1].nn_ids.begin());
+
1272 ++counter;
+
1273 }
+
1274 }
+
1275 }
+
1276 return res;
+
1277 }
+
1278
+
1279 //Todo unittest
+
1280 //unit tested
+
1281 Neighbors<Index> previous_and_next_neighbour_local_ids(Index node_id, Index nn_id) const
+
1282 {
+
1293 auto const& nn_ids_view = nodes_[node_id].nn_ids;
+
1294 auto const local_nn_id = (Index) (std::find(nn_ids_view.begin(), nn_ids_view.end(), nn_id)
+
1295 - nn_ids_view.begin());
+
1296 auto const nn_number = (Index) nn_ids_view.size();
+
1297 return {.j_m_1= Neighbors<Index>::minus_one(local_nn_id, nn_number),
+
1298 .j_p_1 = Neighbors<Index>::plus_one(local_nn_id, nn_number)};
+
1299 }
+
1300
+
1301 //unit tested
+
1302 Neighbors<Index> previous_and_next_neighbour_global_ids(Index node_id, Index nn_id) const
+
1303 {
+
1314 auto const& nn_ids_view = nodes_[node_id].nn_ids;
+
1315 Neighbors<Index> neighbors = previous_and_next_neighbour_local_ids(node_id, nn_id);
+
1316 return {.j_m_1=nn_ids_view[neighbors.j_m_1], .j_p_1=nn_ids_view[neighbors.j_p_1]};
+
1317 }
+
1318
+
1319 void update_global_geometry(Geometry<Real, Index> const& lg_old, Geometry<Real, Index> const& lg_new)
+
1320 {
+
1321 global_geometry_ += lg_new - lg_old;
+
1322 }
+
1323
+
1324 // Todo unittest
+
1325 void delete_connection_between_nodes_of_old_edge(Index old_node_id0, Index old_node_id1)
+
1326 {
+
1327 nodes_[old_node_id0].pop_nn(old_node_id1);
+
1328 nodes_[old_node_id1].pop_nn(old_node_id0);
+
1329 }
+
1330
+
1331 static Nodes<Real, Index> triangulate_sphere_nodes(Index n_iter){
+
1332 std::unordered_map<std::string,fp::implementation::SimpleNodeData<Real, Index>> simpleNodeData =
+
1333 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_corner_nodes();
+
1334 fp::implementation::IcosahedronSubTriangulation<Real,Index>::make_face_nodes(simpleNodeData, n_iter);
+
1335
+
1336 fp::indexing_number auto nNewNodesOnEdge = static_cast<Index>(n_iter - 1);
+
1337 fp::indexing_number auto nBulk = static_cast<Index>(nNewNodesOnEdge*(nNewNodesOnEdge+1)/2);
+
1338 fp::indexing_number auto nNodes = static_cast<Index>(fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_NODEs
+
1339 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_EDGEs*n_iter
+
1340 + fp::implementation::IcosahedronSubTriangulation<Real,Index>::N_ICOSA_FACEs*nBulk);
+
1341 std::vector<Node<Real, Index>> nodeData(nNodes);
+
1342 for(Index id; auto & nodeEl :simpleNodeData){
+
1343 id = nodeEl.second.id;
+
1344 nodeData[id].id = nodeEl.second.id;
+
1345 nodeData[id].pos = nodeEl.second.pos;
+
1346 for(auto const& hash: nodeEl.second.nn_hashes){
+
1347 nodeData[id].nn_ids.push_back(simpleNodeData[hash].id);
+
1348 }
+
1349 }
+
1350 return Nodes<Real, Index>(nodeData);
+
1351 }
+
1352
+
1353 void triangulate_planar_nodes(Index n_length, Index n_width, Real length, Real width){
+
1354 Index N_nodes = n_length*n_width;
+
1355 fp::implementation::PlanarTriangulation<Real, Index> triang(n_length, n_width);
+
1356// Nodes<Real, Index> bulk_nodes;
+
1357 Node<Real, Index> node{};
+
1358 node.curvature_vec=fp::vec3<Real>{0.,0.,0.};
+
1359 for(Index node_id=0; node_id<N_nodes; ++node_id){
+
1360 node.id = node_id;
+
1361 node.pos = fp::vec3<Real>{
+
1362 triang.id_to_j(node_id)*length/n_length,
+
1363 triang.id_to_i(node_id)*width/n_width,
+
1364 0.
+
1365 };
+
1366
+
1367 node.nn_ids = triang.nn_ids[node_id];
+
1368 nodes_.data.push_back(node);
+
1369 if(triang.is_bulk[node_id]){bulk_nodes_ids.push_back(node_id);}
+
1370 else{boundary_nodes_ids_set_.insert(node_id);}
+
1371 }
+
1372 }
+
1373 void all_nodes_are_bulk(){
+
1374 for(auto const& node: nodes_){ bulk_nodes_ids.push_back(node.id); }
+
1375 }
+
1376
+
1377
+
1378 //unit tested
+
1379 BondFlipData<Index> flip_bulk_bond(Index node_id, Index nn_id,
+
1380 Real min_bond_length_square,
+
1381 Real max_bond_length_square) {
+
1382 BondFlipData<Index> bfd{};
+
1383 if (nodes_.nn_ids(node_id).size() > BOND_DONATION_CUTOFF) {
+
1384 if (nodes_.nn_ids(nn_id).size() > BOND_DONATION_CUTOFF) {
+
1385 Neighbors<Index> common_nns = previous_and_next_neighbour_global_ids(node_id, nn_id);
+
1386 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
+
1387 if ((bond_length_square < max_bond_length_square) && (bond_length_square > min_bond_length_square)) {
+
1388// if (has_two_common_neighbours(node_id, nn_id)) {
+
1389 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
+
1390 common_nns.j_p_1);
+
1391 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1392 if (has_two_common_neighbours(bfd.common_nn_0, bfd.common_nn_1)) {
+
1393 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1394 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
+
1395 common_nns.j_p_1);
+
1396 update_global_geometry(pre_update_geometry, post_update_geometry);
+
1397 } else {
+
1398 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
+
1399 bfd.flipped = false;
+
1400 }
+
1401// }
+
1402 }
+
1403 }
+
1404 }
+
1405 return bfd;
+
1406 }
+
1407
+
1409 BondFlipData <Index>
+
1410 flip_bond_in_quadrilateral(Index node_id, Index nn_id, const Neighbors <Index> &common_nns,
+
1411 Real min_bond_length_square, Real max_bond_length_square) {
+
1412 BondFlipData<Index> bfd{};
+
1413 Real bond_length_square = (nodes_.pos(common_nns.j_m_1) - nodes_.pos(common_nns.j_p_1)).norm_square();
+
1414 if ((bond_length_square<max_bond_length_square) && (bond_length_square>min_bond_length_square)) {
+
1415 if (has_two_common_neighbours(node_id, nn_id)) {
+
1416 pre_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1417 bfd = flip_bond_unchecked(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1418 if (has_two_common_neighbours(bfd.common_nn_0, bfd.common_nn_1).size()) {
+
1419 update_diamond_geometry(node_id, nn_id, common_nns.j_m_1, common_nns.j_p_1);
+
1420 post_update_geometry = calculate_diamond_geometry(node_id, nn_id, common_nns.j_m_1,
+
1421 common_nns.j_p_1);
+
1422 update_global_geometry(pre_update_geometry, post_update_geometry);
+
1423 }
+
1424 else {
+
1425 flip_bond_unchecked(bfd.common_nn_0, bfd.common_nn_1, nn_id, node_id);
+
1426 bfd.flipped = false;
+
1427 }
+
1428 }
+
1429 }
+
1430 return bfd;
+
1431 }
+
1432
+
1433};
-
1425
-
1426}
-
1427#endif //FLIPPY_TRIANGULATION_HPP
-
1428
+
1434
+
1435}
+
1436#endif //FLIPPY_TRIANGULATION_HPP
+
1437
This file contains the fp::Node and fp::Nodes classes, data structures that represent a single node o...
This file contains internal implementation details and is not part of the stable public api....
Implementation of Triangulation of two-dimensional surfaces in 3D.
Definition Triangulation.hpp:297
diff --git a/docs/_triangulator_8hpp.html b/docs/_triangulator_8hpp.html index f8dd3ee..c2f7573 100644 --- a/docs/_triangulator_8hpp.html +++ b/docs/_triangulator_8hpp.html @@ -159,16 +159,14 @@
- - - - - - - - - - + + + + + + + +
diff --git a/docs/_triangulator_8hpp__dep__incl.map b/docs/_triangulator_8hpp__dep__incl.map index 4b7dff7..f5668d1 100644 --- a/docs/_triangulator_8hpp__dep__incl.map +++ b/docs/_triangulator_8hpp__dep__incl.map @@ -1,12 +1,10 @@ - - - - - - - - - - + + + + + + + + diff --git a/docs/_triangulator_8hpp__dep__incl.md5 b/docs/_triangulator_8hpp__dep__incl.md5 index 835225a..0f922e5 100644 --- a/docs/_triangulator_8hpp__dep__incl.md5 +++ b/docs/_triangulator_8hpp__dep__incl.md5 @@ -1 +1 @@ -da6d1d3fef5d71d837342be6e36d6c58 \ No newline at end of file +f64377a55b65863823a917576d2e078a \ No newline at end of file diff --git a/docs/_triangulator_8hpp__dep__incl.png b/docs/_triangulator_8hpp__dep__incl.png index a79d5459f9eb265d059cdfda40685155f5ce51f4..9770adcc1453547d234cd94b0c87679ad913b7f5 100644 GIT binary patch literal 13136 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 literal 16018 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 G-G2j&zUu`5 diff --git a/docs/annotated.html b/docs/annotated.html index 372e846..884d1ab 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -120,13 +120,12 @@  CstlTriangle  CBondFlipDataA helper struct; keeps track of bond flips  CGeometryA helper struct. Used by the triangulation class to pass data around in one convenient package - CGradientDecentUpdater - CMonteCarloUpdaterA helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations - CNeighbors - CNodeA data structure containing all geometric and topological information associated with a node - CNodesData structure containing all nodes of the Triangulation - CTriangulationImplementation of Triangulation of two-dimensional surfaces in 3D - Cvec3Internal implementation of a 3D vector + CMonteCarloUpdaterA helper class for updating the triangulation, using Metropolis–Hastings algorithm. This is a high-level interface intended to implement a basic Monte-Carlo updating scheme, which should be sufficient for a lot of simple situations + CNeighbors + CNodeA data structure containing all geometric and topological information associated with a node + CNodesData structure containing all nodes of the Triangulation + CTriangulationImplementation of Triangulation of two-dimensional surfaces in 3D + Cvec3Internal implementation of a 3D vector
diff --git a/docs/annotated_dup.js b/docs/annotated_dup.js index 4e03891..63192df 100644 --- a/docs/annotated_dup.js +++ b/docs/annotated_dup.js @@ -10,7 +10,6 @@ var annotated_dup = ] ], [ "BondFlipData", "structfp_1_1_bond_flip_data.html", "structfp_1_1_bond_flip_data" ], [ "Geometry", "structfp_1_1_geometry.html", "structfp_1_1_geometry" ], - [ "GradientDecentUpdater", "classfp_1_1_gradient_decent_updater.html", null ], [ "MonteCarloUpdater", "classfp_1_1_monte_carlo_updater.html", "classfp_1_1_monte_carlo_updater" ], [ "Neighbors", "structfp_1_1_neighbors.html", "structfp_1_1_neighbors" ], [ "Node", "structfp_1_1_node.html", "structfp_1_1_node" ], diff --git a/docs/classes.html b/docs/classes.html index bd825d5..6b74c29 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -116,7 +116,7 @@
BondFlipData (fp)

G
-
Geometry (fp)
GradientDecentUpdater (fp)
+
Geometry (fp)

M
MonteCarloUpdater (fp)
diff --git a/docs/classfp_1_1_gradient_decent_updater-members.html b/docs/classfp_1_1_gradient_decent_updater-members.html deleted file mode 100644 index 75fbf80..0000000 --- a/docs/classfp_1_1_gradient_decent_updater-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -flippy: Member List - - - - - - - - - - - - - - - - - - -
-
- - - - - - - -
-
flippy -
-
a c++20 package for dynamically triangulated membrane simulations.
-
-
- - - - - - - - -
-
- -
-
-
- -
- -
-
- - -
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
-
- -
-
fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type > Member List
-
-
- -

This is the complete list of members for fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type >, including all inherited members.

-
-
- - - - diff --git a/docs/classfp_1_1_gradient_decent_updater.html b/docs/classfp_1_1_gradient_decent_updater.html deleted file mode 100644 index 75dd1b8..0000000 --- a/docs/classfp_1_1_gradient_decent_updater.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -flippy: fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type > Class Template Reference - - - - - - - - - - - - - - - - - - -
-
- - - - - - - -
-
flippy -
-
a c++20 package for dynamically triangulated membrane simulations.
-
-
- - - - - - - - -
-
- -
-
-
- -
- -
-
- - -
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
-
- -
- -
fp::GradientDecentUpdater< Real, Index, EnergyFunctionParameters, triangulation_type > Class Template Reference
-
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/classfp_1_1_monte_carlo_updater.html b/docs/classfp_1_1_monte_carlo_updater.html index 840e8eb..864a60d 100644 --- a/docs/classfp_1_1_monte_carlo_updater.html +++ b/docs/classfp_1_1_monte_carlo_updater.html @@ -277,13 +277,11 @@

- - - - - - - + + + + + @@ -557,32 +555,17 @@

- - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +
+Here is the caller graph for this function:
+
+
+ + +
diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map index 588d640..39f0ed3 100644 --- a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map +++ b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.map @@ -1,9 +1,7 @@ - - - - - - - + + + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 index 9a1ad7f..4d9c340 100644 --- a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 +++ b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.md5 @@ -1 +1 @@ -26ffce743d462981e58202959e0ed313 \ No newline at end of file +75a411c201fa0503b4fc0578bbb5b4f0 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_a7e172728bb0764e21ba1e44aa76cce83_icgraph.png index 75867a5deda25b8eb622d4ad9be82a30ab47dbc3..0d26f5863cfbd10894b5bdff27e51a0d7e186b70 100644 GIT binary patch literal 11989 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 A#sB~S literal 15382 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 diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map index b70535e..64d3aff 100644 --- a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map +++ b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.map @@ -1,28 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 index 5a7c25e..dff505d 100644 --- a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 +++ b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.md5 @@ -1 +1 @@ -d4ea5c1a41fda752cdac87904876a521 \ No newline at end of file +ec3db38059abdefaf7ce57554287ced8 \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.png b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_cgraph.png index f913fb07f3599149f7a2eeb522d89f33452a7b3c..42d8b91e8e48eccaf56f824510bc1dfd2cddea35 100644 GIT binary patch literal 4204 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 M>bhz*DwYxd0cNi@K>z>% literal 45696 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 + + + diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.md5 b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.md5 new file mode 100644 index 0000000..3df6e54 --- /dev/null +++ b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.md5 @@ -0,0 +1 @@ +d5392c5fc537b4434f8e86b61c5cf1cf \ No newline at end of file diff --git a/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.png b/docs/classfp_1_1_monte_carlo_updater_a8de725c1ae28fd44d096ffb82467b598_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..39e460c4bd10306a4bd203702e683c3976387886 GIT binary patch literal 4204 zcmX|F2UHV5w?^qo?^S=05|An#q(}>hbdX*|2vtCOM-f5kLNo+IF&Mh^1f^FI6oPaJ zozO8LLg?_;|DE^Fo-Jo*&fJ;%l{>p{O^m>_H@I$)kdV;o>uH+-cNB0MP*DI^MmI1B zxKX$mfVD}k{vCy_C0QgS41D_94=lnEzw;t3poay0P79Q}gg5;28vQ26A|iaE{gU^( zy;0j}B2O&t4;5y8a@FTztp3nEc_gsmDJJ*;Z)!I1v%abhl|LRJIQL;TlVQ&c&L2nh zCIu-q3khpGOO#fkk@+b_O1jc=xqmVg7#^#JP261#pO=ZFq`!4PY;Upi6(xNdpS^ft zW9_l}C#Qur8j91#1_ls|tma~3QZ<8YMWNP6DM%Jn=zXxfM)1_!_L^&@Ha5j*MKoDd z83{c813|p77O3q2IfI59nM*1uA7A#E<4&L*S$zY~+c~)9$gX?uw}hC5mRo znpoyD#Rrcuve56vtS8*_H_HQx1#s+|$Lx zxat}07t6i>Ax|iaThila?d&$YcZ=#e*UKmYutk3?L`^&<#EmZE27QpJgeqV3d)-S@ zMzMENtfjC$bv+}he(LI%h~1=oF;xdq!K~vflk69Gtfmw@huD&pP8~fhP7N;Pt9aJb z`kJy1r_tp^MrP3OEBStq z6Z>YN$u7Mjd@rQHH7 zi?WsXw#2P$I@GJFW&s113yiT(tP+0x$jpsu?$L3;~}e5D`H_H&BQkA zo55B-=)4`^Sv(&q(P^tdDGmUz6hU_=#o7qa!arvHTe>z5Np@@~76Iz-&(U=5e9rWR zwR^QJ{*b;=WT}c=u%NFE^g2?&-XCa`-T@o^r^a>I<6WHUoM>tCb1agD%;3wm7w-_i zszd4W{M`{^g1@9>Z*+pM|0oj5#1|i_`pQz!$yqJFLN8`k+5y_6X>PUjL5JF&ongs~ zamaO2%oIe{&Y$u5nHm4++NUAlx0n0)9_vc@U_)3nl>_6a3<4dVPWV zwPzLElFvZ|aX11iP=0;kP(ZS@-XDv!IPnvqHdYbs`)ZpcGp!1?r)&cwFV#|Zg8_g$ z#FO{4rq8MDp*OB}yu^oeAF651Hv5T-6BL59R3tt&G&E50X=mQ;QDm0ed|#qt{Zp*E zJNAs-a{NbH`i3AGEfFR&A~Tkt(jLZpGI?0_VFi?gw8ynYpIyx@K-QR;GzF;nh`|Mw zRh@T_m`Og#o;Nf29t4#VDE1@N9N({hYwC_RvpgiJIlh!noUS8_s3OC};G#NR$692SBkTP#y`t6cWpW@fn zAYI+vaOtNMA3uH!DX94P@nv@+y-e(7lq{D4TYn^vT2%J0BCt#VUN4JiUShPgx~k*i zf}ESg4i5I>aJk3FVa@5kB@iR#g!$Io%uFT_$R2VyL;flhUvqH4wVDb`8u)iNL@!75qWdM7VoP0-3EgyI>AHL2zFtFp~FDoba z4w$&(!k=BpDjweunOg6T4Or4#-$BA8oz@24-{mE^8>b;s&6Ds0&q`l? z(59Iz7j0h}?@HI}n=O~8+awSi$x2_ku&{9A>znLcxc&WoJv}|CO{Jkcl|J`^=mdti z)6HC|y;=SodU$Fq2{UZ9|qj^beH#atr4e3|lUyLt2GbiF%0u&VFh z^{$hWa^4TCu^il<_*}094kgS=zm=4edp|X0&0SFv%_9L|Wwk$H=U3~$q`ADj3=$PZ zmY3gXb;N#4{gg73%8h;!p_@OHEC+Z;OJbax0kG*z^PR z5)l(~{XK)Ov_&TYL}TLSHZV75wrlhiR8oS&W!%lItoqglb2k^-)vsNu#Ujx@OGcr2zR6@hfemCkrdL*Ez$nmOE!^nuPtgMWNM{zhT1l5ewC6!lOIjADSiakeDZ`3z~URS;nQ?JPb#mP-zFAFbgkUVg&$`BMWL%!p%K z?8Twg`NaiX&YLYJCgwhI>ghL;58^q``ro0Cl?`AmzyAFFdq+xY_{&_ilR7Zaj&fhm zTjpuBH+wRhIKQN1IyJLUc2w247XV_szMY2$$bASQ?YrRA!GhNT9X<}m1(Vr#EsL24xT>d;EF)`Pn zxriewIvSUEM_xf8w+AA!(0;yu6R=F7K8z!lZ4iV1ZX1<{GDxbctz~R=^gFK*k&qA) z6Z=^es0{`em5Y*-lmFvNLxXGt-dtN_NTXP7x(9jXVKn%5(b2ySDgrb4RMI;Lu${#UlPg`=B_p#&agVWSfAdX*K0|?X&Xk00LU*P2A1gL4wQXGoGTPzE)SE>Lr zfWX*=g#|?`z$Z(Znr4=7$9+c00ob|4h6G*(tt zgi;`dh+z8#ksDZ$yeCEu?C=0~00jtme*PEBqaK5pnXv_8!{vX^H!=gnHhA#hrSzX? zjl1q$@ze;#=UqM<6mL>eTsz~)eQ=o6;b9XmZ*RD)CsUTNv2F$WGV(DsHMJ`Q;v&VN z_vjJ+HM^rTHeWUBWED2s8VT#^(O$W)0B9J95<-~uYumxKuUn3Yk@tteZ(bc8Uq{_+7rKX|5zqfLfwvn3N>%AG;H1Qcg}z%!x?eOPTo4`1W>ndesAylC8eZB?o{0Y+Aev+u$K&`<1Y}X={^J zw-R&ejki0m18>rU2es0Rz_GkYBr*=bhl!b4%imvWvdZD<)>zrt`1o`DcSbfb>lclo z>zW%WhC^^RdGH1;Q3ky6OV#c1W47_}alj}u>gw(R74Ai(Z+2#8CS3ukZMS1CqF&r5 zZJ2w@vA#el&LDCCs5iI5@$W(!t*Y$xt*to#$;hy=}*@SQuapimZh zzj>eKFLCNS?zswnkii@|JRWaiYdbK5_NKmZV;Kc=3E z&)Bdj_u?nxEE2?v9td{L;s$E6A)CCNiRJk5Zmz=BvD41%;J-0>+n%9ogX85Y5aL0u zS@q*xkko6W6osIq=Q)7gy6>wf6Cmn=WH2I>I5k!IWKh)o?u1W(bMEUwF0Rys&C!zj z$Rppnx;j9-vNlWq4T|t}*!FG0iMl5PooH!k0hh@>_|`i8FI;U^u)?z}#JhJ-o-g#> zjzs|bNnA9oH!!oRb%5}P=L8q^z<5U|=tQO6518ccWAVJ!e3hAhi)@E9kcZaze$}EG z`ZURoqCEQF?QTBuV0dMZ1(kR!v3LCFvt478d14}E2C*gI83nTYZ2$is
- - - - - - - - - + + + + + + + @@ -746,11 +744,9 @@

- - - - - + + + @@ -853,11 +849,9 @@

- - - - - + + + @@ -928,13 +922,11 @@

- - - - - - - + + + + + @@ -1005,10 +997,8 @@

- - - - + + @@ -1156,10 +1146,8 @@

- - - - + + @@ -1521,13 +1509,11 @@

- - - - - - - + + + + + diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map index 64690c9..96c1075 100644 --- a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map +++ b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.map @@ -1,9 +1,7 @@ - - - - - - - + + + + + diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 index aa245a5..4c4fe96 100644 --- a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.md5 @@ -1 +1 @@ -8fec8a07fc56b71aa151613a835f4732 \ No newline at end of file +3340d31cb6512789ae02683036107d8d \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.png b/docs/classfp_1_1_triangulation_a077d1be6c31f16241e9035c5a0f93652_icgraph.png index 0d1822929dd29cdee16921082e5a48e82b52675f..a5a0d72d9963b2475914b10e4780585a1e1b57e5 100644 GIT binary patch literal 7660 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 - - - - - - - - - + + + + + + + diff --git a/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 index f8b3e62..47cc9e6 100644 --- a/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.md5 @@ -1 +1 @@ -30d433c95cc19dd751d1c25743d2e1d8 \ No newline at end of file +e1a7c974e17dda617f0594e3891615ac \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.png b/docs/classfp_1_1_triangulation_a11ee6051e9db388def8aaed68b1841d4_icgraph.png index 01a250087b459da0e73a007a3caa3c16a8373d12..826656832993fdbe7cc66dd813763153447d816a 100644 GIT binary patch literal 10598 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 literal 17796 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 diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map index f4d8578..9bb374e 100644 --- a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map +++ b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.map @@ -10,8 +10,6 @@ - - - - + + diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 index 85db1df..57348dd 100644 --- a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.md5 @@ -1 +1 @@ -b0800ae338e87aa183f921c77f5feadb \ No newline at end of file +ccd0aac65eedc1c3943f50d00b240c46 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png b/docs/classfp_1_1_triangulation_a3e43dfd4b4c9cfd10c5bf4174f2a85d1_icgraph.png index 6f37b32f60c6d581720096cffb10ea4fdd57dea9..e867fe1b5145bbc06e7c014ad763285015d3ca33 100644 GIT binary patch literal 28257 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

Detailed Description

@@ -964,7 +955,7 @@

-

◆ operator- [1/3]

+

◆ operator- [1/2]

@@ -1210,7 +1201,7 @@

-

◆ operator- [2/3]

+

◆ operator- [2/2]

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 diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map index 810a8e6..025aacc 100644 --- a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map +++ b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.map @@ -1,7 +1,5 @@ - - - - - + + + diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 index 4a33b2a..c2bab1a 100644 --- a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.md5 @@ -1 +1 @@ -5bb7c75f9dbda4b4b77bd2251a2f65b4 \ No newline at end of file +5bafd0d60f87c0f8a3819542f92c28e5 \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.png b/docs/classfp_1_1_triangulation_a5d1ec431a7a0040d7963e4297a80faaa_icgraph.png index d03d1259fc9cfac44c81b1dc646bdd2b03e001ae..4bb1cb0975f810432a1efa179a911649fc27dfd2 100644 GIT binary patch literal 5679 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%0A#wn@g|NnW*|9$#0?5y`3 Z5A!8;$G4PY8OB5rigGIGA{oQi{|mi|plJXA diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map index 86ec509..c0f0197 100644 --- a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map +++ b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.map @@ -6,8 +6,6 @@ - - - - + + diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 index 5713780..48edf78 100644 --- a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.md5 @@ -1 +1 @@ -cae34b533f66aee166bba75f08033eee \ No newline at end of file +175f7c494fe83f9c13d0efdea259e90a \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.png b/docs/classfp_1_1_triangulation_a5d5763865ac706a2e800ed306d070d68_icgraph.png index cf2787e73308fd1c331cccdea0253afedc3a4d51..a67bdd6135654cbdcd06cbae3ed77eadd5b6a9bb 100644 GIT binary patch literal 17297 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 ShQG0ax^+`Uu29A_@c#g#4!N}e literal 24467 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 diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map index d819efb..b0b76cc 100644 --- a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map +++ b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.map @@ -1,7 +1,5 @@ - - - - - + + + diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 index 75a6e86..55a0b7b 100644 --- a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.md5 @@ -1 +1 @@ -7c09e4a711fd3bc8dd10be05931c901c \ No newline at end of file +7ef3cf1990c149c65462dcd37b9bf48e \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.png b/docs/classfp_1_1_triangulation_a6833f13e1fd24b039ca1ad2969b8d267_icgraph.png index 8213a21d8b122405deaad481799a42d6e5464117..fc2ebb96ffa288eb69eee6a5b60f69b84997101d 100644 GIT binary patch literal 5634 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 J<*!Xc{vTZER#yN3 literal 10792 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 aOAMwk)u77@d22ZOiBP?xi7HVr3I1O - - - - - - - + + + + + diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 index f478dd3..e0e02d6 100644 --- a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 +++ b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.md5 @@ -1 +1 @@ -7ec4bbe32aecb129a4be071e13910b07 \ No newline at end of file +0baed5a7d527d3e2f650952fdc94773a \ No newline at end of file diff --git a/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.png b/docs/classfp_1_1_triangulation_a762c6430c00d719a8ea5a4a3e89715a8_icgraph.png index 75cfb7387cc3f6cfa1e4b5284bf254ec3cef1432..da96b977768cb1e10c312c84a8bb7db48929ceb7 100644 GIT binary patch literal 10039 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 literal 16993 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 ZPhD0?a8r&wd}jnoQC3B!K*~7q{{s`e<1PRI diff --git a/docs/classfp_1_1vec3-members.html b/docs/classfp_1_1vec3-members.html index 2bb8f6b..dd2dbbf 100644 --- a/docs/classfp_1_1vec3-members.html +++ b/docs/classfp_1_1vec3-members.html @@ -125,20 +125,19 @@ operator+=(vec3< Real > &lhs, vec3< Real > const &rhs)fp::vec3< Real >friend operator-(vec3< Real > lhs, vec3< Real > const &rhs)fp::vec3< Real >friend operator-(vec3< Real > v)fp::vec3< Real >friend - operator-(vec3< Real > &&v)fp::vec3< Real >friend - operator-=(vec3< Real > &lhs, vec3< Real > const &rhs)fp::vec3< Real >friend - operator/(vec3< Real > lhs, Real const &rhs)fp::vec3< Real >friend - operator/=(vec3< Real > &lhs, Real const &rhs)fp::vec3< Real >friend - operator<<(std::ostream &os, const vec3< Real > &obj)fp::vec3< Real >friend - operator==(vec3< Real > const &other) const =defaultfp::vec3< Real > - operator[](Index idx)fp::vec3< Real >inline - operator[](Index idx) constfp::vec3< Real >inline - scale(Real s)fp::vec3< Real >inline - size() constfp::vec3< Real >inline - subtract(vec3< Real > const &v)fp::vec3< Real >inline - xfp::vec3< Real > - yfp::vec3< Real > - zfp::vec3< Real > + operator-=(vec3< Real > &lhs, vec3< Real > const &rhs)fp::vec3< Real >friend + operator/(vec3< Real > lhs, Real const &rhs)fp::vec3< Real >friend + operator/=(vec3< Real > &lhs, Real const &rhs)fp::vec3< Real >friend + operator<<(std::ostream &os, const vec3< Real > &obj)fp::vec3< Real >friend + operator==(vec3< Real > const &other) const =defaultfp::vec3< Real > + operator[](Index idx)fp::vec3< Real >inline + operator[](Index idx) constfp::vec3< Real >inline + scale(Real s)fp::vec3< Real >inline + size() constfp::vec3< Real >inline + subtract(vec3< Real > const &v)fp::vec3< Real >inline + xfp::vec3< Real > + yfp::vec3< Real > + zfp::vec3< Real > diff --git a/docs/classfp_1_1vec3.html b/docs/classfp_1_1vec3.html index 7f8b510..7ceef0f 100644 --- a/docs/classfp_1_1vec3.html +++ b/docs/classfp_1_1vec3.html @@ -228,9 +228,6 @@ vec3< Real > operator- (vec3< Real > v)  Unary minus operator.
  -vec3< Real > operator- (vec3< Real > &&v) - Unary minus operator for rvalues.

- - - -

◆ operator- [3/3]

- -
-
-
-template<floating_point_number Real>
- - - - - -
- - - - - - - -
vec3< Real > operator- (vec3< Real > && v)
-
-friend
-
- -

Unary minus operator for rvalues.

-
Parameters
- - -
van rvalue vec3 vector.
-
-
-
Returns
The rvalue vector v is moved into the function and -v is returned.
-

The documentation for this class was generated from the following file: