From 90b25693670cdc25f5b0b6fbbaf2382a5c2b9bc5 Mon Sep 17 00:00:00 2001 From: Saleem Ahmad Date: Sat, 20 Jan 2024 22:39:20 +0800 Subject: [PATCH 1/4] Add jsoncpp build and fix example build --- example/Makefile | 12 +++++++----- example/example_depthCache.cpp | 10 +++++----- lib/jsoncpp-1.8.3/CMakeLists.txt | 8 ++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 lib/jsoncpp-1.8.3/CMakeLists.txt diff --git a/example/Makefile b/example/Makefile index 6e50d20..de1951b 100644 --- a/example/Makefile +++ b/example/Makefile @@ -1,7 +1,3 @@ - - - - libcurl_dir=../lib/libcurl-7.56.0 libcurl_include=${libcurl_dir}/include libcurl_lib=${libcurl_dir}/lib @@ -10,6 +6,11 @@ jsoncpp_dir=../lib/jsoncpp-1.8.3 jsoncpp_include=${jsoncpp_dir}/include jsoncpp_src=${jsoncpp_dir}/src +build_jsoncpp: + mkdir -p ${jsoncpp_dir}/build + cd ${jsoncpp_dir}/build; \ + cmake ..; make + libwebsockets_dir=../lib/libwebsockets-2.4.0 libwebsockets_include=${libwebsockets_dir}/include @@ -21,13 +22,14 @@ libbinacpp_lib=${libbinacpp_dir}/lib -%: %.cpp +%: %.cpp build_jsoncpp @echo -n "\nMaking $@\n\n\n" g++ -I$(libcurl_include) -I$(jsoncpp_include) -I$(libwebsockets_include) -I$(libbinacpp_include) \ $@.cpp \ -L$(libcurl_lib) \ -L$(libwebsockets_lib) \ -L$(libbinacpp_lib) \ + -L$(jsoncpp_dir)/build \ -lcurl -ljsoncpp -lcrypto -lwebsockets -lbinacpp -o $@ cat run.template.sh | sed s/%executable%/$@/ > $@.run.sh diff --git a/example/example_depthCache.cpp b/example/example_depthCache.cpp index 518adfc..94803b4 100644 --- a/example/example_depthCache.cpp +++ b/example/example_depthCache.cpp @@ -13,7 +13,7 @@ using namespace std; map < string, map > depthCache; -int lastUpdateId; +unsigned long lastUpdateId; //------------------------------ void print_depthCache() { @@ -45,9 +45,9 @@ void print_depthCache() { int ws_depth_onData( Json::Value &json_result ) { int i; - - int new_updateId = json_result["u"].asInt(); + unsigned long new_updateId = json_result["u"].asUInt64(); + if ( new_updateId > lastUpdateId ) { for ( i = 0 ; i < json_result["b"].size() ; i++ ) { @@ -95,8 +95,8 @@ int main() { BinaCPP::get_depth( symbol.c_str(), 20, result ) ; // Initialize the lastUpdateId - lastUpdateId = result["lastUpdateId"].asInt(); - + lastUpdateId = result["lastUpdateId"].asUInt64(); + for ( int i = 0 ; i < result["asks"].size(); i++ ) { double price = atof( result["asks"][i][0].asString().c_str() ); diff --git a/lib/jsoncpp-1.8.3/CMakeLists.txt b/lib/jsoncpp-1.8.3/CMakeLists.txt new file mode 100644 index 0000000..ec040ca --- /dev/null +++ b/lib/jsoncpp-1.8.3/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.0) + +project(libjsoncpp LANGUAGES CXX) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3 -g") + +include_directories(./include) +add_library(jsoncpp SHARED src/jsoncpp.cpp) From b1976839e84e9271abe4428e7b9825f19b4748f7 Mon Sep 17 00:00:00 2001 From: Saleem Date: Mon, 26 Feb 2024 00:24:40 +0800 Subject: [PATCH 2/4] Add CMake build (#2) * Add CMake build * Update README.md --- .gitignore | 1 + CMakeLists.txt | 20 +++++++++++++++++++ README.md | 26 ++++++++++++------------- example/CMakeLists.txt | 15 ++++++++++++++ lib/libbinacpp/include/binacpp.h | 12 ++++++++++++ lib/libbinacpp/include/binacpp_utils.h | 10 +--------- lib/libbinacpp/lib/binacpp.o | Bin 166976 -> 0 bytes lib/libbinacpp/lib/binacpp_logger.o | Bin 7512 -> 0 bytes lib/libbinacpp/lib/binacpp_utils.o | Bin 30984 -> 0 bytes lib/libbinacpp/lib/binacpp_websocket.o | Bin 98952 -> 0 bytes lib/libbinacpp/lib/jsoncpp.o | Bin 862368 -> 0 bytes lib/libbinacpp/lib/libbinacpp.so | Bin 698967 -> 110928 bytes src/CMakeLists.txt | 22 +++++++++++++++++++++ 13 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 example/CMakeLists.txt delete mode 100644 lib/libbinacpp/lib/binacpp.o delete mode 100644 lib/libbinacpp/lib/binacpp_logger.o delete mode 100644 lib/libbinacpp/lib/binacpp_utils.o delete mode 100644 lib/libbinacpp/lib/binacpp_websocket.o delete mode 100644 lib/libbinacpp/lib/jsoncpp.o create mode 100644 src/CMakeLists.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..df738a9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.0) + +project(binacpp) + +set(LIBCURL_DIR "lib/libcurl-7.56.0") +set(JSONCPP_DIR "lib/jsoncpp-1.8.3") +set(LIBWS_DIR "lib/libwebsockets-2.4.0") +set(CMAKE_VERBOSE_MAKEFILE ON) + +include_directories(${LIBCURL_DIR}/include) +include_directories(${JSONCPP_DIR}/include) +include_directories(${LIBWS_DIR}/include) + +link_directories(${LIBCURL_DIR}/lib) +link_directories(${JSONCPP_DIR}/build) +link_directories(${LIBWS_DIR}/lib) + +add_subdirectory(${JSONCPP_DIR}) +add_subdirectory(example) +add_subdirectory(src) diff --git a/README.md b/README.md index 7b58be9..f671761 100644 --- a/README.md +++ b/README.md @@ -33,24 +33,22 @@ and -L and -l for linker to link against shared libraries. libbinacpp_dir=../lib/libbinacpp libbinacpp_include=${libbinacpp_dir}/include libbinacpp_lib=${libbinacpp_dir}/lib +#### Build Instructions +To build binacpp shared library + mkdir build + cmake .. + make -j 4 + cd src + make install -. -Then compile like this: - - - g++ -I$(libcurl_include) -I$(jsoncpp_include) -I$(libwebsockets_include) -I$(libbinacpp_include) \ - example.cpp \ - -L$(libcurl_lib) \ - -L$(libwebsockets_lib) \ - -L$(libbinacpp_lib) \ - -lcurl -lcrypto -lwebsockets -lbinacpp -o example - - - - +To build examples + + cd build/examples + make -j 4 + And export LD\_LIBRARY\_PATH and run like this: libcurl_dir=../lib/libcurl-7.56.0 diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 0000000..e8e164a --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,15 @@ +set(LIBBINACPP_DIR "${CMAKE_SOURCE_DIR}/lib/libbinacpp") +message("BINACPP Dir ${LIBBINACPP_DIR}") +include_directories(${LIBBINACPP_DIR}/include) +link_directories(${LIBBINACPP_DIR}/lib) + +file(GLOB EXAMPLES "*.cpp") + +set(ITER 0) +foreach(EXAMPLE ${EXAMPLES}) + get_filename_component(TARGET_NAME ${EXAMPLE} NAME) + add_executable(${TARGET_NAME} ${EXAMPLE}) + add_dependencies(${TARGET_NAME} binacpp) + target_link_libraries(${TARGET_NAME} curl jsoncpp crypto websockets binacpp) + math(EXPR ITER "${ITER} + 1") +endforeach() diff --git a/lib/libbinacpp/include/binacpp.h b/lib/libbinacpp/include/binacpp.h index f0d69cc..ae649fa 100644 --- a/lib/libbinacpp/include/binacpp.h +++ b/lib/libbinacpp/include/binacpp.h @@ -7,6 +7,9 @@ */ +#ifndef BINACPP_H +#define BINACPP_H + #include #include @@ -14,6 +17,7 @@ #include #include +#include #include #include #include @@ -33,17 +37,24 @@ class BinaCPP { static string api_key; static string secret_key; + static CURL* curl; + + public: + + static void curl_api( string &url, string &result_json ); static void curl_api_with_header( string &url, string &result_json , vector &extra_http_header, string &post_data, string &action ); static size_t curl_cb( void *content, size_t size, size_t nmemb, string *buffer ) ; static void init( string &api_key, string &secret_key); + static void cleanup(); // Public API + static void get_exchangeInfo( Json::Value &json_result); static void get_serverTime( Json::Value &json_result); static void get_allPrices( Json::Value &json_result ); @@ -157,3 +168,4 @@ class BinaCPP { }; +#endif diff --git a/lib/libbinacpp/include/binacpp_utils.h b/lib/libbinacpp/include/binacpp_utils.h index 316f539..a1a7c6b 100644 --- a/lib/libbinacpp/include/binacpp_utils.h +++ b/lib/libbinacpp/include/binacpp_utils.h @@ -11,7 +11,7 @@ #include #include #include - +#include using namespace std; void split_string( string &s, char delim, vector &result); @@ -23,14 +23,6 @@ string b2a_hex( char *byte_arr, int n ); time_t get_current_epoch(); unsigned long get_current_ms_epoch(); -//-------------------- -template -inline string to_string (const T& t) -{ - stringstream ss; - ss << t; - return ss.str(); -} //-------------------- inline bool file_exists (const std::string& name) { diff --git a/lib/libbinacpp/lib/binacpp.o b/lib/libbinacpp/lib/binacpp.o deleted file mode 100644 index 95144436b81c0dec1391cc12dc277ab0be1eaeec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166976 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 diff --git a/lib/libbinacpp/lib/binacpp_logger.o b/lib/libbinacpp/lib/binacpp_logger.o deleted file mode 100644 index f12e8039c1f40d5b4088e9af87ab9deb507b8831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7512 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 L*THbKq5Av_tw;_Q diff --git a/lib/libbinacpp/lib/binacpp_utils.o b/lib/libbinacpp/lib/binacpp_utils.o deleted file mode 100644 index f1d57d6182ea2f91a08bc17545bd760869490e4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30984 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 D9bBs) diff --git a/lib/libbinacpp/lib/jsoncpp.o b/lib/libbinacpp/lib/jsoncpp.o deleted file mode 100644 index 4af48d37f6fc14fff729c5a2b2c4388d226410de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862368 zcmeFa3w&HvwLd;dn>G!F39oArmGCYgv)bLOvqDCy3VM-ejE>SD}f7fHb&Y5YG3W$HphvqwH z?|s%@d+oK?-h1uGS&}>VrHu^@8S`I5=JbqvGNGBw(CVr7p`CxVXAW+e)k0~%G$q6D zd|B};ieFXyn&Q_LzoB@8;x`q)rTA^&clGyb;2QmX6L78mz8Sb)f8V0GQSpb0w<`Wf z@yCikRlGy-F2$cI{zCDWioa6)wc>9Tf2a6+#rqZipjZJ`_4h--ZTkClS3F7ag^KeOU!-`N;^~U*if1XlL@}rMGR1QgU!gc(@s*0N zQan$wL-93==PSNe@dCvQ6)#eJo#N{iFIIem;w6fgD!y6qGR3zjzE$yUif>nZr{d*` z?^f(o%qw20c$MPSitklithhvRsp9(;mnn8DUaJ@@78Og1A6EPy#g8anr}#0&<%*wF z{Iud{6hEhUz2fH;zo__S#jhxSP4OFw-&FjT;&&8RDXvyrqj;0z4;0ra-mF+w+@QEo zag*Yp;;o9eDc-L56U8CLI~DIz{F&m<6^9jnsd$g#uM~f+_*=yh#rqUDD?Xq&s`#Md z7R84Yw<>N^{G;NZ6dzT5O!3c(e^uPB_&3EJikT*{OO1+C6{jgSE4C=kRNP0gRdGMX z0~G&FahBpiiqBMhmf~|1+Y}E|JY4Ze#iJFEQ9MrZc*Qx2a}}Sbc%tG96i-$>Me$U{ z(-dERJ>d9=ZeFM_bC2K@m|GW zEB;3Dw~D`0{Jr94#Rn8e6(3aGqPSIYOz~mGKPf({_?Y6K75}REH^m)_4byadq}Zf5 zU9nklhT>j|dn;xY_f_0q@j%6AC?2GEu;Q~74^cc+@o>c>6pvDzt$3{Ba}`feoTK0H z#n&tTr{WtGFHyWy@y&{FQGA=?I~3og_+N@wD0V956|YphN^z0m)r#*`T&#GF;u6I! z#rG=~6uT8apxC4MLB$U#mJ~m%_&oZ$2E|(xf2cU1IH-7= z;_Zq*R{W{rkm8++cPsu}aai#l#d{Thqd1~?pWkgO#WBT)6(3Q2 zRPiyzamBwVZdZI4 zZcyB)xJhwP@m9qjDc-L56UCn@-l2Gx;?ER+q4-P1dlc_g{Egy>;_npiQ{1fhfa0j) zgNj=ew<>N^{G;NZ6dzT5OmSTCFN)h0A6ML=*wC!wB*m$U(-fyG&QNSooT<2vVyoi5 ziu)-Zp!jc!vlI_fJXrDBiiap3s(85Kk%~tv9;0}i;_-?nD9%xQp5pTrPf~oL;>n7q zD4wc#n&Rn-XDFVjc$VVXiZ4}+6wgt7h2nh0S1P_r@jS&2#q$+kt9XIpMT)Oee7)j- zD!xJS62(gu->mo+#kVQGL-C!8?^66P#VZs$6|YphN^z0mdlcWR_&&vJ6qhJ2ReZnV zGQ|%lUaJ@@78Og1A6EPy#g8anr`V_Xam7z4ep2yMil0&ZtYW|7^@^WY{G#HQ6jvyI zRq<d9=ZeFM_bC2K@m|H>D2^!Jr?^@10mV_p2Nky{ZdDvpd|2@j#s5D#Wuym6pv6m zN^!R0F^b129Ge-}fs1MsY;(KE=(74=DaYaa8d^#Vv{tDQ;67Q+!zQPl}H!{-5Hw z;-3}&s<>V8am5{qnHIG#ic=Ju6sIXRE6z~dOL1?-{eT@&e1BBf(mG0Or%{|6j|z*& zGo3S|B7PP#+0~h9(;AAq^%hEc9@5T=;>DwJelwDcM)3f@Sy;Sz$yLv#kae^IXo5L_ z-ZlZnj?F!-l@B1z(#4x;ym!^BI8CFMCPf7=74AEua9dYTYb}E7ADmXW?~uZ6Wl(;u zQr-c|mvdsQP1@X3StTj^yd#b&?=0h)h5NFF+eVP_caRMgX-8`&d+nDfPm%=|Ai~Uj zZjzb%GN_SxiZ^7wGv4+q+&8^&+gML)_24MJh1fBb5XHmhXD^2rHqN@>BCcOl?RXUD z#}JHvnW(g22mg#)HDnW)tY+NYs5pN-y6MNa%YRWk7(I4hwEn>SfDJ9a?h3b|1tI2xUr8xexPxb>D^ZZ{+>&X#lB)ZRd~KEA2FQE^JcAa{Q;)7YAUKMIZ?IBSH z7wi?)1sY}?an=DR&p6*3aPc&kDT-h0=q>IS_wKe(`>6_4E>2LBmEJsPBkWOrD2h7< zsZ5p2gujnF9wg~iFPUW|O^ z4?+l|Q8CXc&x~P=G~2?)d1?~R{C`x(bJJXwh>|8R%_j;&H|@ZGQT!7Ves*^Cn>Io# zTtZe=_t-$1>mE^_Vh4E24d-Hn-Vwzpqht}j2rVpZoO{8U7aHyNXh4|qis`Tyf%g@V za6crxJc{S{o*kEaavwrAE3&J*sQL?I4a>@%Q#a*4M9pgjm_XXz6^PMCyw*$2S>EaR zP){#4K#6qe;$CXw96Hcd#!vcB9|z@09)tGC34E=g!3X$N(R#m`&HV2W-K({`0%i+E zcV^2=-ILpf*p)&oNP$ul`zUf7#|G?(EYzIJ*ary@;e@3gHYCXZCh4thO;a?;{*uXN zm#OH$rj$a6QV){|O6K$Kf!xZyMQW&m+#0+A+2_holdXmrO0^ZwLs97kBvdbWWmG~t z0xLI$5ng-p=ul;4s#CM8A*jN}Mb?rI8H&=Vy*K=kgJ{>%Ewj+?MDg0u$D#SfZU$3z zFCN8sC;M@9!ku%#@I!_!3h+?P0{DDV%_%usd7E8%?~y1+ezScSXmbn+h0=V#`~Fc3VAZ#1GsV@d|AStebU(wkJlV?lCAtVlohx zrPN1B!p6HMnyeh4?d8e8BiE%2;EB`;k{Dc800is|SIiYPDFZCZCk z$E>IMNoirqX1NxYU~1Be37)Nj{g4X@b3SP*yQki%&SIo?XECCM4El?3s1bSgzxrxT z@2u}>R!rLYn|dpI^%`q)a;1-ZX+V%&ebF`yWtMKFPNaVS<2nvE`sP7D8yO>HuXB<} zzrCa)ea%cpx{6E1jF{YZ**B6`1p}{folaxM#zQUig-2q1H3qwdDBH8)ajcjrjL*zo zM|0L+SNE@x$juqsK$&NL~AG zYeMjD<+C;l-Xo5p?e{Q+!C0s#_jvUxq0nrS5mz;mEs$jJt?iWBF_H`}vrP5b@_R4( zy|4VnPk728-%KyYQ;*AdkK70-zmDe;b<@fdc5$mwZB}1`)JVg_0Zi}3J<-;=AKVi& zI%neV-ksC%w~dG&BAF8KF=>#JfHMv*j88mkf=lrEpyWwcw{8zp!8x28l^wz$3|p! zJs%}>6E~iJ=SB;QH#X$|ok*h5P~U`lb~N8qho(zj>>z&v>cmoJha$Wcy*g(^9NZPZ zaLkxmky3J><@*AxRM^+3-plIIVA0mR*ob5E`*EN(9jDFdJjx5PHo{p0c8soqHSnpO zHV2(gqK~P*#!n&nwRFA_>b!UURLR4rvuABOb6)oBs?4A0)2X5hv^GGK28QZ`)v3MU z&ev@2@%SyBFy+QJ<#x=iw#)m}2t7``pT-1Uu@6#?fg9-SSc5KWNQvfLvo}g~%96xv zJpToRo{;UY0&a8J?yaP}EU4Y*7L<--ddFwG-~R;AdvZ&k=q;cY znJV?yiFR^fo;1J)R;f2Vtn)CDRSks^EA>6-AtiKegFJ#ux6GyCPP}%I=di2F1SRL) ziAvo=GyifQP@Zb_}yxYS2U0^{4wbc*fGGEv~})PVKDEq`^U^`UaG%Vi?j) z>|?wh#j7Aizt;sIs2@SSejWQO6&}4ae?a0(P(8D-y&>EEEeHaF>*Fa)s!~~S`Mrwl z3Mh>4m8zKk1P2dVK1&@B;u(&@V7zRom+~tk$>GLO`uvX3V~<|t0Ho7bygY&uiz9vn z!wU4RqQ51$@%>>zpw;3W^P38}C}m)Euu@1WM~U>N)OUGJy%!N3TI{Ci!gyonv(3+z z&i%~KnKcDh^$Jym5Xx!6ah|1oSvgA!uIy;!EWHY8?55mSX|J{U?#XSn+);boTBE(1 z1dVxZfCW~gIu-y;r27|t-LXTuSCnUq*0p5ePpD#l!HH{@65T1uA>!zp9Ye0ppE zy(s8}B;y%BnNM&10xZEs<*-cCV7d5xw(;D5~fwq zQlM2vpICK2VIkXH!g!&Vs{!#{M)|otk1Hbz!JHry+|&YzcVX{Np;UfV3~mxm2;-#87`ieiPB{oEjmGDr>Pcnl4p zO>CcOGCYXMG8C#cq645L49qyn4OMu9>@#QaH-FgMptG}WJ<%yYzjD`Xyp7~r?0~KZ`-0$X8l^o#G1#(#W;S>UG27jM z3Sr5frwkA0&#^LXjY{3ETw_kvN_`ws?B>ezbkHOf-KhKwa%I9GM@?`;^w>Qh*PbHB zA+^X!QY9xXfa@AnzZ`-bdUrb)xWpq6zctt)OPWRQ0#tpgu+tD2j~%`8VRTu8n_R!q zdLG=vy-pf!bYG=pS{ZcE{DcA0GMkV@q|cGpaHJo#nR+p12g1L)MVUo|OYr#_tuPEEdBNTa7;=+}2gcO5B?gaZO{Mwe zsB|F623!^UxQNmhl3da&P-uv%heX}|_H(s-R?mDm+e%{87G~ZwGXfH}U;Z$ib{8ro z^RAOM_pnrnrV)9Sg*d}o?eV1L-SoY-04Bhd;u+kQf-;y$-LNa0&29mh3Lgs z@U9-=w zCy%C#Ij&NWm5Pzdt9Xh`zUtNy^HpZx+83T>RB%{f{JiY7FGPxotqU$+cNjNo zsolz3g!J-tbNtZrOz4Gv=!;FLm@B1lvFd2t*qLVR%%_??B_@!7pvca&5x1 zOuf~&Yo+aS79f>|QBJzjh78Zh+tR5XkEIk$i*n1otZC^1s=`jnZ1<;O-!L8HHo|Se zZH%>gVA_J6;CgK#FSiTGq%bb_gu0WCP8HDXAW5?kd>^NL`Zj7Q9VUKw7fUqL@ zOLBwtD&VtHs9OQ znk!;TBfI9naoB=vp?x})Mq!0=MT_qG%Z1tNHbkX}mSIuW=4E&C;){*Wr=pXd(^so% zqAWEf183`O5Qi|1q^s8A4eRe~!C09e8iq=}bQ*->YpdPgXg+v%rF#Zk%0a>JOi7NXX|dWYJYe$LUU&_eJ)ZZrNG|3_sIzm*X- z?hr69$Ai<>^>5ldm1k#IfZle>lB`a=8giQ}CA@~fi?6}j{? zu>vwx=%nqcu#S7JmSULNUYM+HuxaxW3ADnbl%pcHwqU!sbksCoL~lptxv*iDzsgEI zu{faCpk@{bHM?_n7nAgY<_1r!En64s;PK^lc$2Mg@HhDjbK*<_*Tko3i3Mr_R>%>J{Hyag+C z9$hb*gW-g@VitZ4n8x4J$)bg)nO(uN>ccx2~e9C+VY|x|YP82PIP?w`(dQmYw zmqf*>N6yxwJ`Z+xKJC)~0=oPjkVO*FjN<$iMTBCUdS*O`tYnV3?nHiZfQ3CuqCtvp zns-3wo1nK6bdcRoT(FmfqM#R-L?<4=Ty!3ajTk&Lb7Wk5mMmoVJGJfPu04=~Al!ft znx@)9YrwXs1BVSCMqW!dlA^EK@#Re1f4c$I&rS@ArIA2Dn`6<$URWi4M_w5i1yT*#|Bx7ync)PLO|%81+?Wg|G2@fxF_}A?6|ab=ds6DM`sTheBBf8+}zPFo4N zM;*YCW){mh0XP`Lc**WU9;fl#6LqHfpYIHA$sE5$=L`$jQfzOI&uXS>+SJ8UO)Oiw zc~>p%C-Xyf-qcUh)kbNI&~m?4T%c*X$u_ifOAizA3=*0V9T)9>9}jMF%k>z8OkbvN z;&7@|G&Bq_?4eP5guyk3M)6u7QRwNVLP>ISZWK+{Y`&vI^KLG1p_@5oP~1c!59WeH4qwU-DzV z857OIcx&gIfY=`XIv6lFBd+6r;H_coe^?&OUGQ$%7Q&;$BjU=xiSvo_CP{*oHfA)C zj8;y#wU3XmqTJ>PYgdgUtgc8|bA%NV6M+g*I>MR=N_I6k!rI>o-jEUsL0${$3u%em`{%Y2k$yLpq0Q&PNAEqmXS>G z5Hr`5^U(n%-~5R6-AyYVc{>;@KP1cZ6be2y62X)!TpptCrIa7hE+!a^urqPQDwH>@ z;q%cXF4slV`DhWg4sx~2>Me7T^+}tStBJ(Mb8K+j$Y?ujg;$w=R* zCdWi_5XJNb$v1sNk$Tf_lBq~v;ggYWV3~@s(%#hw&CW>W60>ns1o^Ho48y)exN>Ws zy3S&@`V^hIeiv-iM8-~ha+sVUm9u1Hh&gqAqJ4yc&Qy-DkLVRMl>_Y~`gLkjqo(?C zB)amL%pTk!S32=h?}+wok{J1BYmoZ7jm3zFGYW8ne%QvS%M zoMBSdp?ST=JLc(-CbHoDD#Q#brA8Ljx6yg=>YJ#fsdwpcc|8%(>GnDNF0BwDBkJtT zsq}s5_XJL*>l6*nL^JzFBU`ZNR64}>v^1H|QlnqbTsq}cPCx^WVv_xf(rgtsgoaua#2J$Kj?j!9ab4@4E zPdg|796p6E322F#jj;Im_C|NH=V&{$7vq3D9l`$>KHAPcT(hf0?|^u+&$sJNo6*VS zbM!>d(I1^WN56o^Zt>a`?DtsJPY`Zf!sAMWCXdp~3p#Ns^-+?*)zi(Su%05m2u?0* zsrD$nPr^S+Palx9N9kL6;iFs9S|FLv(MLv0h>e{)m=@Styktd2E_Kg=z@mOg()WS5sm@ihZ_d zf!SpT2oodpKDA0Sqd@i)7L|6EJ)fzsk+q(wKRqHhfD-c8=i#t0YG8%VX?0F&&&x9l zCXmm|)AyHqL33`+nv=yKoR_EQ!uUSnYyzUE^YZreG2F~_s2}7K?g61*!j>nI?2SCe zS3cN7(Cg&n=v9sYbGBrvy)OnQXSjPZlZW;DQ<>-bEp5piwe=gWt6L)5#jETJ%q`Uc1tB=*Hw*8HF!%zvQ7DNsyD~4 zF4-T!A?{L_Xkk4-X9=8_on*;#)khSn8ePyYJ9TWkG`=L;*em~S z6ZI#Exf?Wa%!8Y^RebE-q<|p1C-V9M>Di=pn4(?IO+;Ia^Uldm7_*AM=LP~)Cn}v+ z{72M$JPmIk-~mM48wmE^a{~d_qUj!J_y7OjZy+F-HO9pAxRtM(%h1RBie=b>jj|Zl z?(zl#_*%&ej3HendThAP1qAG__b(vefZe@-K$tXlJV^oUc(n2fSnOS1K)}Tb}nX{do zxhH`1&MY$pye1c9g3dS@>F9bfcE4+c{jOLa&SN;a=XQ}*8EM<&82Ba5O|UNrjl2iv za@x2No6AR9Wk$=dvLP_bwK3)?g~h#@tKSOQe#4AlF!KBch9~WmQ(|mi)JxG;aim-r zl3MBv6~QB1na;y^-sQD?AUAU4+b_jUCyRUAmY^ugY=pgxI8@E2k*yuz$0@nqP1Fo& zZiTg0+yTppxV4-%x;3)S}^;s#qrliz~Y$o%9h6K+7s7qE;? z|KYuqjM5DGphb{bf=FTU7aFq5$iE66+^G_iagqldS>cmbmRX(HVi!=2I^p?ni5qo# zzGW(mcHZ;#E~(n`7E#Uo*_1rNgyUQ;Pk^+;yFn&+eTq3C=pVYtE~8~UzF0*D$E;vF z?K9(Ur=e~HD`RU{uZftjE)$Wi=(UE)CX8jC;KbEof@CNV7s*=aE>Y8^Q0nb79yB!$|5fE2%wqF6_B;fow(U&V>(sm^*=Tl-P*v?T_Ab=R(GgtH|~Y z!uFJL1{33}J$EhyS26@!M&JS6bLWETom{8p+h%AGM(BI)T)^ptS?J8Sn*Ix;(wg7i zDq;w`=gtM5rqJ|{U2bdid><^5JKu*SG-^hejE zu8`Ps=fa*l7wBski_qUMhn2>1#y|O;3wv%-km)3^!O}&J2eK{j?|VS+VovFM?nHm_ zm8`DLH+d&g`<|N=AVo9j4}7ExlM8rydAOC}o|_cVbJMVA&rJ$-Px|Xk3c8CL$DPfQ zd)Q-bhkI^P`1@~Cn6P|T(C{gBkHrX-*fwiK4`FE94;%(!XirW$7|}X6RgmAoR%=&S zt>TqDhh>la<^y;eV~0 zs+o$MSoF~5iCsd{?Z)eI4>>OBlJ(RwOMoUdxSnc;41!pdE&rW z_n9RZzr4J2fAIMD1Nh)|ri8NDul7uW58m)o6z1aYHN;hNrOMCSvjru(vsRXQQhe~b zhmqxk&BWeOzKLxT3NaRBKQ7t3aYo6{(%(VHS4Lw# zk<1=Fpth+A=|P58DXl&>^O~jCs|K6)Qum&~Etbrl<}#BgeQS{YEXjVQYkPi{DMwv7 zojtnl$zySilS!>^8LD;9S35VRN$MQMNvcCh2DX_1Z@ibiY!T5t4315r z&*OO)r28to?96LgoI-AhZtLc+-(=}is5tq+%?#qwCO{XM1(!4?%Vy*)BvILkudLK+ zA&{3OS8WNuX(nEX@UBUxM64Nh46LWyF->nqLB>1>yLUV3pbVnsiSo1qLgguTOH{%> z_fg6~6S^ftrH5@LL<+=F!x~nP6r~JFNr)xYKVhyYWk^awEUBRhlcJO%DG9NpNL?o; ztE6HlT7YQDx=}jxu`5}zr4N)=LM&ILQWF!qD4*9Nl3RazCq#!Xbn}RieK5=6dYcf*mu1=nT?2~Vbd~3hyNh$G~ z>n&n#%!lWo=NJ>JqpxW@sQd{!ag+?zW z$9R2GWuEe|(Xg+Tc(RpjVzo(01^c8V#BxQIJTX#~GAy8kSW=`C6C)+c<8u|LQ|*Rd zyMPmG_!APlD5lSqgqQ;6dM8x6Nj3bMh1yxeCr!5vzm=;*`AamIu-{2WUcR$80~JZW z8B}^QGN{I6l3++xt9<17yG-BVOP0IX5lKcv=xzdEg!RXE%&P0rRqj(XebkE*f z#DTvd!X`5OTlxuJ?btBkAKld6+@Lq{ny)8N3cd_!KXDh2BMm-XKqan81@)>F3R_ws z4!jKts!kJ#X=A5#Ot)##O*ie$80hbh-?+(xf9t0eP9Ml^XDdhJeyA-zbWm+AFBPT5?50;)FY=7L(fA#?ha&6%96Qnt*K z6|IJe4&l-nn8}XFyLw0sQD?hc#UKMiFWyfZnS+D}l2WCH`>dwsD0Xhy<~+K)7gI{R z?4!~!ovLe=OBa{X|1P<*84f1?1@_ArN#Ik8wpC~=ol~PG(hgQ<%D5Vf^HH5-JAPsb zQU;`g4MTDO3FK?pG}GbMsyQh~a2a&G>i?l2OV`q0oRD8~CCo^T!I_R%k`ty~jlPQA zM7L0Gf}1U9%f^IFUN~6h>?5Lat00T16itoH_zj-7pK=8vLww5;_5wpbBeJC%gF7kF zUIKmJ>CKa_igqPq7@{`%Mq?iRJq!nINKbA%MpfJ8Hu6KkvmF`4)N_sU`Zp{!ngu?L zbTB2LA*n`;!DEI3l0Hm$NE7ED!5d&g3Mkgtt;HwJG1X3bO&QiPO?D|XC zPa1L8W03r%i+8s}k&?*R9HVD^hu{FNnPSGy`H#d`LXG}f<8>KqKoqZ%X;2?eHSu{j z3KS~1IMqB_LicW`XbBcBqQY9DkjYQp5V5V`4yyA%K$OVP9cgnq$%4`>Kb+o5SgH>~ zo5lq;#I`rW^ZVtZDVvm(hkN}u5_WCKw1S;ks@h$C=<#x%1Y3v3u&4l0 zqs5L#VwzxZd(d$~+_5E|50irW7NdryTo{=m|08HTUSIg#lLL z&&E0u#;Tf@zlGOmo}h$>&~KV}3DMvnPQ0PIw~3B76z-dXhw=ChF3*DI!hPFk+(rX1 z$r|51eUJ#FBz;^GN-<@|ZIGB9AtzhF@swUOKdk|m?%`2NAs@AaOfyo77WCOQElREN z6?G%T76#n3rOM7Iln*zegP5rELFYj*Mjv&<6F4St-_vr#A)1G<#PhR|WKdoxgJpb8 z;v?nCS`?har6zLs;(=nRTBreFR8vBr;|Rs$y9t$QCw(KOtT{}!rOHR!c;d(q``33hj=70$Km%jmjteQ|Qe0!}ot;mFh%R^*1n=3#2Nop8>!0HM<|2Jb z6SowTL|ly)bDIm})33^7*jGA$O@~e;ic=e-H)7l^-C@Jf4l4Snc1CiWF_WV4*ZCY} zHng`^Uv~3cWMcbT+sV@CWLA~GcZmUJwJj>~{rxu`foqVBrT1nOxaL5|B=!4XGX_yB z%Pa*eD#hF*R1OFzH5d%u@h^6RfwnJ5-GtV2Je>`v7t3AKzU1^BKb!jRJe=K^Y_fR? z>xvoELj^BU4?^cEdc=Xei2KD=+&vb%>FFj!WY*zkKlgrNEyZW@)a`cRSF+osFjE;i z7>2ch#p&Z1XLLB!q$mdcAosPDjimnW!>0cg4ypeomebB1?SGjuTVmI#>IkxpM?hw} zKw?T4lby>nZP05oq(2jWjxhYFQg9uo#`?90(v(6b2yj;O1Vf*GL*cjoQOik+4yU)> zOKY^0r#QA+gKD9URY~(urIx3wCQ+zEc}nTY6*j{P=-0*OHy6ww@b5#tF_TY-&EI@KD1!g}?1!zjFTm zsB|86(8zj0>p<>aB+u{%;ZczGR&>SD8}E$PW2n_I1ef6uQsN)W^Az(t&^C@O&R-K1 z&uJ~@@%H~k>mR_|f8@EWI0y>4d-477dmH)t;rWkN&#!Hk&xtq9@7~;b_!=t1xyOt~ z>qn-{FFkka{8R4l+y|v-J~x&<+0}>U$B&pPn72Kc>^^NDKJ%h8U*|?ov&`Jssoqup zwKKK5!dJWeY*D$+(@}g{oltdp6+Mz+ITfeL;MCcF*L-Vf#n-CV)-BKcZB9NNN^VF;&GbO%t(){l^0ZFh( zMbiZ>ns3GG|s2mp>cj|SVD@LrBP5oI|V=xMYU-Z1ZtxavlRAM z)Xuf2xuOL#Ju$iCXwj4<%Bl3@1#MN=N$AfY1Uf6^TeQf^T^`nPW+R^G=dg&nO zs`Cj9FggFq4(d&ip%`T3ory4~_;k7QK+OnDmwv1f_#PA~Nk1@iY4(KmxX(>KzRm1s zva6MQ{3;8{k6My!8fk988KP@ybH6)VXstO@c@zE$j~96F6+0lCpdZ3ey5nxx&C#|h zx*a8nrQ<|0+g<(nK_sKDtCYiQwq|HjH-gv8G9f1V=u@BF5dC7 z=N-p%v4FeluhxZM?vCIuS zo6+*22vxckAE`*Sy_J&HArpvCTYQy*{Gj9W?ljajX$kDbF&KCN35YbI> zad17TX}@!SxSjZm^-Bs1OxBgLOVWsxTV$qNY4cQvV z&ha5@54J`;J(rmJ2U2RSYs)(mZAnIOwjmm?6R9oiNJI{!VmERU8i*588F znd+xCR3wR@#Z3nYJ2?y%y$E_F8n(%5XxdZK)@e+OoKd)ZBBB?cTY5fB9*s z-xojC`n@f!-#bXZGowd+{z=#GXpe%Mev~_oi7L3U-#jY_zH#r{?^jM(zhyH)rt((N zK7LGDS6YrwnsW+En{%?R921yxYZ+k4Ooo3J?W0HTp2@t@e@i0PLBw{AX0G@3aN=B$ zolSFLEsk=*b~dSp#7|vAJ8=%k(55-Cm7LteUSyMBtvnMZhpy^Q!taxcNv@&F;;C;9S3=Me8_g~vqgKqIj*cx? zu*?lF1uw5%GrTjtAimk7jJ3&RSI~<7w*f|#Y#v_ z%gl&JcA3oB8S1%>VqSyAON=tE>jF1PvrA!VvrFcNV*;~lTmJ4Y+1k+*E%;)#AmU+( z`0}NTwk9RtKd~4$I$;_4O2pSF!jmtBZuk?)_kY|gB;QN32b3?({ztj`K9ccOfsDyV z&}GCMcXvW=e}Z%g|GA_~{@sa77YbJS65e11t9;tYOGJzX$jY@f0;_oyo{07QTiL7l z$qh7&CJmP7vo}0VL`QvFK8*-HA?eIM7I?ITmH|bY?da#a$W7KbUjoyJRTSzv`CTrr&Saq_k6ep2`_RQa&Tn@*ibC@V|GOu?vJ&AJh zC+b4UvC@b_bUF^E?o2$@cUdt`+iAL&*>ux)n(h#@vi))lGfeN`t;z6##WwHs2dH@p z;d!J?FFco;mB}4TZiVq_ormMkk{0ZM==m^oqS}J?)_E0oabj$itNwfHD^8ME5FsxV zn;OR80>nRR2iBz*uoSQ-EfgnCswZ<+)wv0Z&N2Un+7d8pux35k8%3b{+d$5aH}FhL z0p4@!vypT%(#G?tIJ*E#mdWlI@>0ntrv6w3=I5=E8@ik}t@8r^aXNdNp11*l4r>P5 zXQ9&UC}*I(&3iOm{OGj8c*9k&Om--w#)&pd?B-@LJF=j~GmI=|p<9ku9e}^ch8`$$ z$b^Jo9w8HQx3wWQIVz$sqxZ&g(n07_AIAhbR<^d)kw%@=>WgSgFC3yS zfuW2}g1*Y+MROr#>AK(n8WBtTS1?noSF}@!DY=r-)bGjlU28J$QO$ z9#yYK5S!F13QJ3Y^onBw*_Ul0{G96R6=fgRo)u8Bk2y|OJHL^xcHSb!g$r%$2=oL0 z=qQ)9v1n39NstOWR3StMBM3b27baiWTK!Mm_l7gn^u=Mlf6+UZ6zaMN;A-ygwzR`yX=fAFRYyn`^x(A! z^QbLiE@G2KqOf$4`cWi~@%Rm{_3bvKVQKd^`z9-2h2bgoF)z5w%zL-U=}DbS;YBBO zUs)-2D;b1E^h5QB`Qj_kMm+V`7J*9kTSSXts0u~&G>;WCyew$xMiQgd#D3G}jV6i^ z>S$uGN$qLkKfi8~zXrSU$^c~xz7D8` z62148RJH+IyJ~w&jGvzz8~>Ik*v9kbOxmn*(da*it)J({4@TqSzQKPw#WO66{&~kK zoC2btPM4)s{fjFg)x9SY-KSaj@u%Fv?T(Ak_(n?Rw zjpyk;lA-EUHmlhCgv~tmQci5*34Q41RI8eiQ*)1Cx2@d~xpa%p$+%06SIL;ZkEcP> z&(<0-h|ztLMhq?Ar|zI44r9ZK@a3yChhQL)w5eun@KlT?rZcM(8A#}iMP^ce|3Jd% zO&j`S)*I3mqr2oypTe7o;gO`10B*Ey@1&W|$|NdeycOn-Ai0NS$dRLclpu1_PKE%x3~vY(-p;ii{RLfV)=qIzAQra?6m2fYGr;yX^WDk zNLO8ZCI)Y#QWN$i*CYL9IjBKCx5Y8GNcBc*YBMebZP%vgSWEK0XTFvGa%SGCm46E~ zeI^ByCb}-kX%m0_S(H(=k7m?8D5mY?dX4bRG#F(u6=9`bTMH6rAEl+DYVz7zg^cZ8 z#G*iHu%}cu^#V;+J8!R>P%hG8ynF{YTYW82*Ml<8jc7s`uWD!Lo5#~bzOB;hy(m&E ze{vi7FznvxKDwfpQ~nT9e$rXqOz2fjg_fpKH7o749e76l$+gc`E--*n0&=(%S9yi8 zvLioEiab#^DXNk5G*;YZJhOl$WU9c{wxqVNd#1+ZWA6txbJ%|>$=^O9$wMQM7z7^=~3JJpoEArKui}FbO6_uSwzA2-8>04LW(Y-*go#+3@r@1j`Z0bvn5*YRu*E zj~NTn7-C%dm1Z`Vt1{A|5O^JmdBkXfI+Rw#CLO30mUf`_qC?>rud==BgMu5FBP|2jgr(OrckDpSb3P&gWB?5SALdmB!xqB)fMG7x>tnE*f_RkQ2UXL?dBAF z8qn_5F>T2^cZ{;r1vAn*z3|hTyl`)goK%}v{~J4BR2ZMq`7*2oXS+X4HB3_=7<{@z zvg>{SW*;HZB};-eBs#yKX(=-Mu`=H|L&d<(BH1jN{U{6~?$$*@1UKU!@1f*PNE|gw zqcWopq5UM6sjAa@d0&7jaqSYEMkRO!mq7OE30K|aMYQ9EOA~M4!`3*od{tP6w@Hdt z6P+l9%6#IbIC{5Bu`iY4Stv#RvNceUO!du%`NxK$^`mD@PPo(&@wOGNj?rE?IO_{n zHL;avfsmM|9nW-JCD?hLa7ot;X_fC?z9?;|tv0hYZJz&@l!q z&PT|u=da|L_5Dle)Pl!N;@6@bwAcukP#d=5 z!ClF5$L+!CxM(NnV(9=U5~p^E zxNhzw=?GoMULVK(zfJ0m8=0uw^~?1{Ixb^CNCi$nT(6<+B^}e|#jrhZ_tQ#n9r1y@hV*^U`FDkWMFFk?Hs z>0h&8C5daPw^p`<)IJit@WdU<;gIizL%!$Sczze;gzy@T5)E`+;(9o| zh|4lc=oz{7T0H`dUPPH`*vhc^^&kos8a~t1TV046K@|RxhtMb3iYQDo*kckzu`g?W zzwqt%5lAJ)s2(TQ#|7xus$D^y#eo4^q_dlP9(wk^n|h*N%YAr~1`}L7Y?Go%oDn3x zT39)qmhNF&Xs~fXw);q$x0~+?QrMAsY=I+3s`~ih)Q8{vOdcN^LY4o9{to2Wb6Y(U zRw*7@KhoGR)KHFT>4s=$*OeQF3ZrvLT!wsfYHqmm*(UQj*U)z!n2%G!IT0rDUlXTP zu~hy{W>C*=Av*|fEnJh7gLFg7li`DI@d89B3$(Y{#pB=9<~-M zE&Ph`dSw2%n(_%Y3J?pGyCEb~!V^08GCwcMw=j#9?`k}0TNR@|_ff}T9_gqUY1;37 zi-2z&A^V}5sv)e6f!*M5ebAB?%yHmDm|i?2qmKCT2y| z*NATS8V&Kxjl>`mZ3g;1iE=WamZ@?pF*+_?U`-YV=P(%Mv*X+kAX)sjO+lJ2cd)jo zkP=<5Xfs8RRBWG#!EEjaxC)BCXM?S%hz~|IsF*Q`aLm#!wjvEIrX}mmL1e6Kya%$@ z2(I#F$re;XE{7`HsQ&#PpH>{vqku7*z>;IYX3a+h^3UREzAtXfF(JnYg5fX5V%f-i z@*-n2ZCq|+_FknDR$pf`ZOp$ql_^cl*xdk;Ro{ux8u19etPF?-TLLt{F-)kCxBtqi zK@me4NKLT_EID#OJwRSSnk;?4vj1cJgqdxQgJN#lw3b`12j6=bMysS9rY|NO?&Rg)aA!=)?oK^qq&AZ$h~=Zge8e zUFKMmk|2+gAOk7=l87?3JPa6g#~ZYCKXo!e>8kI8{~t%7L5)>qGd)P_JV>j&!+1s(t zD|sWY(QcZj&BiOkF)r!88){((YF&%(u2~~IX~i(f`6#`YP&(SLUQ&bPp@C zEG!;da#b_luKXJ9X6fRw-$Kk+y$d#PNR!(AQxS%IOIp?tmC8ya#!H2fL-5Iv`)Kbf zQKfH+5#@E|!pIpja4G2{CPF?10!CU3iyv8XWfRO5CI?K4E_Ow}+mLVe+Ard7oxB@O z-X}@k>qlm0zh{~Bb6!6(Z3a#9l%>XirEwEcTF}Tp_Ur$Jf{Ac#7fp{Yb;onoiQ1WjF|Vo>`mcL}Bn18c)944XM(C zDYh_JL#KVe1JUz?c!eFjcco7gTJG))4z zm}ZuS63b5+Kj33dC=)i~T*m#zD%xui_gzR2_%0Kfe!kw(xy#uf-_5C0u3($0a_m&v zu)}0UJLe7d55fMj|h7`-1veXLq>%JzM3p0 zCjYDXIaE2q`G3fijL+=68h@6|DvZyNQA1(8rSqD?cys4D6*~G_7(c8tTNuBv^RUAB z-kpmpTud}`h zx#|%7J><%R&^Kh)(fG*oG*uo!v6n6$rIvnGRHIA?>PKUcL2MH&0*|0l)zWXOyn+kk zGE3iqQB*@M5rK#Gqb;T0%rHxErO^EbR1|bqa{dwoD)c_)4pw)P;sC89cR-6k4IfTG z;~I58K@oEe)95+sF&wf8WW_e9US53)UPG4eTM-|S zZI@n8FEO@t)Y|@`VV==+Bb=mj=|~B%A~M^uTq)K4Wcl-X(Sj`9NJ{QDm$cG=3Elh{ zWHM&T6;mgO{to-@#Z!19i8wVUkVFSc)x8>&T6y>&U;Kcd1SC}cc9t#Kc`@l!)X&V~ z!4WFl5I{1l68Twii1+zIdftRDp$P7)xF3cV{J8~^olnn+na5)!1aJic4dGhiruKbP zA^VvS`6h#ikM_lr2m_Wh%+nqu!6MRr;@5hHeIqn19BjT~7QAeC(c`QRwHVx=z?Oei zD?zcFL50q@;=Bm{t%=y%! z=?*BF5NV~A>*^6*z=fyAY&a=M($>+>KX%EQ~3cu?8& znFRF2zOqQ&F+u90J!-DUt{f_)Of|2&fVE2UvBi@|bT0$B&D7efub|HkkbBSS$GYcw zFY?Fem_3glDtU4@Z}PGVIBFcli#&>ztEp?p6(FqUeXX_i0eZUbz1~~qg;>iI=Xxvq znLgD8V%Q;sT@bpaRQCkuZ`~3{-T*K;99$n!S7iK`^@F&_rPEh8uidQH2&yqi4~ zx`#GH96E#b!}4tZd7ypn%SmR48fZTWZIgd)YM+Yx1|bGj5M6hH=~8(fh-Ba8 zGdITBN}uL2S))&zSP*xPZHbNqB^`sutPKcWtftYUu8@#xaW*wt-04EPhg$$d1sSw- z+}GWUJA5Y6*OhV)8Zkl1AB;-f8L}r~4;PjCI27liIakM;CO2~Rs8uci2WYlFXVNPs z4Hou%vn8uRT#`yHR$A&26ovJe>f?}F+)7d1+To5NV%R+ zNG5y2&ex(U>-U1~Y{>bgpN>%-^l?b7Vn|Xg#>3R9mvU9F9;>Lw1vTrDLu--b2v?7m zTIHiMX7HuN9V|~ZJuSsmzx71L5k^!mVS0T`FU3gZNG?qG2&=Uu^7D`gC54{g^(eUg zRsH zk6sxia$OPm1*8`f`8y@&O=Xz&8hS3q>wdYx<@$YNLOogf9bOYqmNb^EYNDk4C8l&q zlSROQ!7GAW+=2y%&y`m~Yw%sg!o1K%&cP6hr}rtID|d zh!inSXezOz@~cNq(0QrNG3R9`45pouCloxqoEfX>&q zCIS+=Wo1LRol#Hdk3%lQOnEux@8sXGO$a_&8lYoaNXkT_VWe~ejRR|CzR98HW3|hQ zuaf1-0(nJ(^gX$)U5mG3(sR9xt*wy6IKiot%5r6b1Q=cEW$7qzPRa`X_NLdEsA9UM zU(u8u*Pf?K{5-rE;g^kOXPw953sPucpcamuWAc0Wsd2kxz(9%|eOwd7@SQN(9g+jt zp#%{XmzAg05Qyg?ZiJzDs`O!WDrw3hBq>*>vDv4_9k88f**3$Yx+z45@>dScri+mc)d?J-BT%|-Vwb16xU<$brh?G7A zE^AU>sY9@`6qzQQn6@aZvdKp6w9K?ur)mlFMe{OkxJuQ^(WhG2c$sOBa9qtra~!5s zGcY}5-p5uEY%Pkhg%B&z=&6eBbFne&qvf6)In{=JoyKAt%W`3n&n66cjgmV*_`8)U z?CNU8+un00iQYaZPYocmLT(G4M8#^~75m|iE?Ff=ZX(Qg+o5FNvkAl zifBtjSWjo0bz#z=Lb(;UpL|=^3+62YGJ!)lT)-K}V$|@ah69mhd;!*AX8XI5PwM>;CTKy=opP2^TvbTi47!huo=tA!{ z%JpsJNv^G56F1&4R91W=-DXqR&=&ZadQDv*8IEQxNsuc?1G!;v42tP>Iokh~zKjv= zNnNxR2bnyBChaO zUE1bJ7KCNuHaCSv7$CMEW^Mq&X=wv^s$2=aRSyrEJ0ayNgnE?APY}uJgnm)o(!mmPO80RxV2fflW zpXkqFfosvJz97;TJJFmgckJ=nO?&~+3@Yl*;dQ^4P9$89$|DY4R}Uxdc8>oq>9wO} zM5uBvdVJrvWxaMkqIpSbNr75NI9#O$5|Y4MXft+3XT>bZG@M_N-@EUzJ4*a}KL4__ z!Vjswk}{^5dt%UoM2;CAQ<*`}P_jf!fCgQE!?5Z}@$SvxENj}1BsUfI^Rx3ls5;2K zY>VVAv{cUFDJG@W@}_-z2klR_Ej63;?WLJAzP)oi-(ETu+sTl_m?qB4d9dgvXGz!I zS8bY5)t*+aJsqddWjDw!J$thQ&z@Gp)6A=fo$ASHpI^y|HA z0?s;gn-liy@o}Pn0~J>dpWZUd9Z$J@&))3a@a)MJMVdxJ3N+oaqkMJjk&cHEsTn0r z>q-mTKm${+_F17zF8+;eg0lZmwWt+ZG_Kn%F@H;0D#Te!1=dnr5XUkpB>R-~?NM=L zwn`o?%oT01YI5(*RH^Tzf)vWobLHTaTij8+g>|h)ICZW;Mvk8gai1lfHmjd;lD@QW zv7uu}Q9_C}{6}4rb)?ae64=;YBMNq;!8nU!3bo<{n@ILFa-`uLknqb+YRkH(6h7}< z`=;jOTz?(cnw(x%xtnehbh?bFChJj~hXyf-22lnB<%FN7GXiCZeSSIRQKPf4)acr% zrVQJ(7bU0}JlfV&PWp@J6MM*66OgN#GDCeHoKtB*1VlXr3Gm(m1fzD6!3z;wP6R{v7qchsVj?L|u#WoFFp)|7(ih`4C zl=81LZqwLe$E<@m0Dnm=lpkta#Sl2vJ@roQ_ijxXhr5y8vSuI7~>Ibv%Q4u zDo0NMUtG+qP-OmHapj3dvsB!09fSHW3iFx-_a5yRCx*vJVpTaHSc5=~AntUiV!&p5 zb0RzV1)E9qda#g7NZ)T=x}}v&c)WI$=Em_V+58mD(0Nba4HNVa7Q2}cD~|kh#jdnx~TBW^%nR6F0gm!^HON4s)@xB;17O0JbwaRZLA zgQrh2^|gj0RO%QTPkQTKnz_q8=1_1u=dK(yDK}t>u)$MdJMV88g9{DB0ie4{L z_geemw(ccG;kNE2bLLrykgv6KzTfVgzhM(;8E@rF(g?TmaV+;NVhNH~iM@I$63LQH z&^wr*!`?v-qg=yjEv)!RWCUupq;ivZ2ZfN4^F;UbC9+3tpnI%EBq&~Q<$Sijw5PAt zS18vPi8swRQprI~U{X?%ew$B4`mOh$*54Plgkd9gS~sS?jX%1qvzx+}%h07S$Ed3} zdJ6XG{gyp`xB{cS9XHL;zMz!%55_3CRmpk-?;^$U>C7~abhfvC)f8`uV8Z6gX++RB2K@H3p$QU?chV5EqCL}C)F!h!)9Ox6!_LEcay=G zgjaBgs+4GWg0Hdb@A(H%&DZk`rWs>`^NbK>iCK34rA?plBVNva#1|w?tkUkl z;;S*HwDn7~3E4APtJXtHpL91CYG+%IXHK0i%G1g@X=V&_VP1w|UPxDlOqJ|<-yviu zP2g$fp`@KmJfGlwhe1t?mlACiUdoG+Ch4VoOARljlyNe?NxSDT$XkU~!$0{!$bHz& z%zXdkZtOg~Sp1V_^Iu+JbssV^X;lsvu$?P>1YcY`M%4m>e{u?cTt0k@4G~P zmZb^#E@}T6dSF~FwM;B9uT2IH9X6WT?(edJR zZzg&MS0^6ttl_42pQtwzUKMs5`QFUuh$FAd=^Cu8m=nIpIk%QcX#Nl9|n z-?B4Ne2=}<3S!x}t;U4Po|vx3bZ;P@F8om;|3R_RS#DNZ+DfVtx0k@$T_G{+|$!NaxRN^*~g zpA&wsG{o^6$|JQ&gzRrPWR`9ub!B&g^hW(A*0@gW5zOjklES(}@l7BMYdo1$UvN&m zF^Yw=bK~C|61JEopq$La@@i68hD|`gwH8L~fxWF}HaVM$@*O)@T+6>|Q&Kw-48MuK zaAlxrwqFH5I-s-0Nv9FK{%L>sRrQ+jr<+3Xie_O|}QEInUu?c<2xsyw;u*?(@czf7{X z`h@JAdpS6E%x9N}(xu0wb~2^EoHDf8^C^(91={nrV8tCTGKZN`!pHb%64|5en!M>! ze_H&s&Dv#VFBFmHnQBT-Jrf>TSX!lLTAfp+WKvt>CaKf3WKvr@CaJ5UWKuLaDUeC( z#FMP4>~;t;G!<@%X+W(T1Ol?&QbA3>1GWY>lAkKnakT{v_6h1OK{oyEkY`J^h-7 zzBL^plk;`-!p+dZ%;;BP)-Ixsx5j_e=-3xcv-^SE7?Q%=n)~?a(o%OBKR!PRGQk^x zL&Cf5Q%|6VA?~Rv$0v*Jt=RSe|2F%$>C2h&iJki>q(io zOo;D4($*`YV|kFsA-$_`4=d*Ra&G*wJY7FdGOa};kcH=f366?t4mI*-oFpqnm~sGAH84OPW?SW;&Ys8#CW-Xo?#%-*0GoxFPcpy?$Gxym0g^;Big3 zRsUrCcv;iu8#AwM`tQcf>V~Gr8Zr-4(lwfN|HJWc>VhvcWUiy&8gy0l@(%*>{y=VUTl zo0c|wdhg7ir{VYY)0Z~fxOe93&9BO2uAT9ThM(`9`EpAqGTWTJY4&#-o3>8Ltmof9Zlv&EHd30uHZ~#sbyG-3K0k$ie{TxWxn;_6nanm- zm*j2<&^)G9PSe`qH$_@+SJdhKhPE74UlcbGsJxWYYZ`8k)MNW`5Z4|FQQy@O2f% z{(JAuNkeIA&?3R|#pP~^#QYaV|HT+Q`AOs%|Q&S}JLy3xy-*;wb_v|_MUrLLjCZG1+y=Qi3 zXJ=+-W@q=DhJcL*M-Y5?+XP`2`Yb{a6cf_PFv!AEvD9Z+hS@%go@ve z5_>S}`(x@!E`Oiq=5CpwZ;j)}SyQ(})a5)R`T(=19+OmRN5s1~s=gEXpi*CmdQU~w ztwg}%^znQ8K)p#sDO&D`sC%U8%Bi?C|Ghu*Xj(p7K;!5uP`iMuK=pC?DZV}wiK9+u z)VsnXBL7gJ?&I=Lqvg~#=HX$D80-#D?TUGy^Hd*~pW^F-vC~oK*Tg*#@phKb(O-$G zZ$wJAM$yX&D1T2#Jmh^>KnyQMrglZu&2;Sn12~lezRl5j7}-zhni-VXph07UZYLXb z9owMGqw23T&ie&N#qE(bO6`eyzw*?knD>yUJ{_ZSZ)^n~43F7Zs6Ov`uXyS!Tz-it zzEPxnYlP;^VsGogs@~gpu)35C(StBVcO0x9CPVZm7@~&`RvX8md>ahW?t|5Lico&0 zXhYM8ABHdL~x+^aRya;QeF**)EhHE;ts~@AAAWCaPb0-XA8Y-*6d|0oT7% z=-oO|-CyW^exiD=unJdpj`QxGsD3i;n4e5k>x;e~!KJqG-b)kJ&EvgiC#o(k4~#z- z*I|#ZJxE~I!}*LjhObJM z2`6|Lst2HD7+>^(7FE%6>4uda(w@y8L0 zQ=Wrw8?U|?rShXu@7o8GA-(xP^|ct4pNx6W9jIQ8d3^_}Zxm2@puqdo1ocP64+p9) zkIK(@-dz*aA3X1C6Vx4rRDQaU0=t(BDYCnL9F>1H&f79k{l9S@;=8XGQTZu^K@-(W z2#FBc9YEzL5AdF!sD6Kd_w$MB*6~z+aXiL!$@{5Q?#Yso~Q>1QHG zp-^$??VdXCFua>3a_EmewLOC3Pa}s8dg?_gUKc%dQ=z&misEz8LvJpG%R%vu*rE3p z!abt+=h&fm4D|H{Z&L`cCjY5W{fdeky~)>%({|`VvIPG_AM42yuq(QYN{`bA*rwFg zWEggcb+}o``jaK=vxSzdZx&jz`h2op@X7k*I7`-7$AK(R_&~v-yT+;KiL4H9^0VXA z4iCkjd6WM#PW_hX`ZUpSJAM3^J_hMy6H#+BecVeQPtnI8>0?U~KES=>C=5Bb?D?p= zIx_F)QFT=`wkxW(MLm?aM?G9e2&mNmiPt`y0*0xi+b15eA)*?nv>KO;l20xH<_=FEe7|5r-@2cC*@OE}V@O(o(NpeNrwQaH4lHlmTr( z>ZB#!?Gd%yyD_5fmrGO20Xluk4N=wPwNnt|{U}P|)OVxmTh#M2(tXi|@5Q_)3)Jso*hED9#gMm7 z$M^fE;22t?cW*=uN}n@Yy*p7q;{B|Ej1YQ$DeAR(>I<PFSTz`m8xzitgt9d0|BpV{Nk0)n{ar@A!$WI~dN)R=e5yd*8}OFL3}5t3`f+J5$~CZ`U$n(EGaw)8B)Vs0(B)t=g#p}YmVzg2mq=8*dL%4xHumI+sCX{$(FeFM<>EBfv z`HO`7X&?Dj1want_d;ZA*Eo>KXV^Kjnr3bw$K$FVHjl zZrCr<;MrKC025UBzStp;7N{3u9?Gm--=g+ErH@wy)3F-U6*0o}2U^JixI5DPrI`93 z8rDrjK(~yo_z3(sZt8L@&R_xYALBjZ!}xAF@0(Hebi}(ks(u@pg7T-SZ7(zDwTSfb z-%;x0i&6FYNST7&n({LgsS0PJo(op~DObKnDnAxEAAt_mtV%skAM1snlPQ*}sr{b< zN`YL5DG-^B^6k;L?<`PHMGyUYf%^>@YyRd;MIuK$GyxRsj!R&czv3_s5FeiTuxHCM=R zCev#Fe9GHh1@T0n_*fHwZBxl1&YJd<2)cYR0+sTfj$mq(pv=qqEz-W|J>CWEDbc2A z>XhY%?Qbtd`*QEfsH*x> zFcKgPp1ja&i>ix02D^b^0C_gSQu_h#f5)jWN4)Jt>OLfNipWdhg_UqeC?j=*>pQ6K z_oAuT?~5qA_WdIDwD(?=Zz=SCR;0dNSdQ{Yp*K*31$s5gPmY_4ydVW6R~(>wFPiQB zr)t*amZ`{?ss|%p*8xZpVS2$={Nw<2OSBY1i+aC3K>aCt0dkL6O^#Q8jbSy9b@Fz~ z@zDc{zEXH&ZO-H{+B*3r-1bf^zmK#_zitPN|R@Mw?x#b z-d0N0BHX`M824OcDk@y;-E^S(6rB2jWC&6IeguoxJrS?_KqMkT?W$wA?>!rw!VJx5`Zbwz&^Lpl*vpAjQ5?ca`6s+!VC7kZncP*jvITd2rh!BYJ; zf?)D?(mZ3X-a_=3dz(mpt6;2juSR^GEWWE)d?*|7-Q|n#abJ8d`{Mib1Z0wd3gWwu z#dkZ44`n01r+o4KKNcTe%?t7UiN%L9#CHda?$`BuFLVP_WzWXEiv1`2d>xt@# z@!rD|)$?55K=QhiJ|3Zu7wO|FlGoSh<8k_UnLgTs;=6~$cN>WhB_qB;7T@D6K9qkK zc?lBwznF)`&gTjszWX>E0tbT&Lj`vO_y~#buk>LSIENgIWLYZG8AU+wLlV*dikyxj zIh`>X;X~tld2<0FFNYy7lL)RBLvq}^@#BMDDu#gn{L=!?K0bILdZ~;-y`9`SbQBozHklYnbluuM(rR2`Y3&X zU5A_i;am^l{2IAy;>If?oa3iKI7_`NqOf4tUO)mG#j7LlQ|i|d+Ftq{5djMeRTDvl z^A_Q4t=e~CY4@Q+pC|;f??!%DNS^&sk5&Ztd1@JRC?bi#BA;?q(vc$u*q1p zW9#6@h3ZpCv=<^};9ZHdUDW$yp}HC_VVt@L!RROiDFj{L)~#;HdNyobiA zt2`=Wp|rUOsblYzacWZ`l^>*je@`Db5OaS(A1~3zjl$u5$XL{p1DSW|!!dO}7ME8> z4#gJB4vJMCi5!X`@c&Wq#^|9~#(Y2eHq5K&Rfs%@O3UP`U)Iu<^hs zCQLr+G<6cn6dMBN#K~1nY8lFytywNi1E8YnGQF{gCKLW07iN1Wsk3y8yePvJiY6cW zUUjx^e9+;?Dz)GQBmn+f2ymg?)jUjW+F3={M;?#(pOga$4NN6$Vr+_1nPXaPV`Us- zTKAQHVs8R%$-dK@rsnIm2h92R6?*dry&W_Kw5?qWL&^(88hWnkMJIYEW9}>Zd+qvv z!yetgDRuVLFGeCa(9rISjK4afKt96}GM?!*V$s4R+orEwKPz(F8Cd6E7nzQ2o`)mL zkfDlR9@*tZIttE^B{GMEfAFfXcouZTn>RCU6Sc~;+APqdw_}=|xIF@U#o3kDu0Jet z@G)S<8Qw=DP55q)jQ_BV4r9y6A3Q{u`SS$$^F=SRvEU>)FA9|550v_$S9NuOKShq% z{c^5;uYYIc@J~lJg2&HBmkt#~24m;}rdp|Myeg~!9a$RDyYkyx`c63HEQCR%JMWCV z{X@rK@kI_a@@ymyGeEk%K6d0oQPZndb>izhB%rxn`qV7Sg!6g9`7GhQGIr#nxo{di zUhQSpQ{u~aKobSOJBG*qk=fDoQ$onX*kZJ1j+&+XDzn~}b{b=O7H0H;m<8L)=BwRCa z&A~N+R_Alf=D_ubL?#^VeKn zuN zCF&UY5*#VbCnFIohp=vozN6QN9~pTYU`XRdylbNoL@C7k@f&=$gBH|5Y8L?qvOv)Y z=Nul6jvp~ds2}K9h4&xY6TTT~a_JM@bbPU6lMjhZoF#VqO2=-KtmeG;>PQ4>3bJP7 z|I3lp{%n&4SCD?6*Y0)DSbT0-XC!hx(fCwke20|~=~`A8GLP@_Zi~S9?xe$C2*&=? z!w&dG-ukGz)Z5A_GH4K~2FclM4D#ti_gtKum`guBm;ZcQsXa`qpH&wR{VodpmX5kf z!`lWTxZB_?bc$OH^f}t0Q|PpG2$4SRt1nt?{zXH(f0%Z!@4-wkJxUEYHeLIS)Z(ruW6~N`^bXE6^$+N#+C8a$(s5P zQN7Y*b(cmhR$HZ$IS}++zSyv=i)Z*95niWanq^&pY z7@8%=tUHF(U+UH;>zZm-*R(V?uQXh@^-&S^Gb7D__X5VNr-_U97zMzZ_{!#%cujm| zE78WYr)tHjmP_KvHFY(slJPakkG3XP)+LFwH7%<#F7>{e`W#S0?b!GJ;y_J(eIw~X zO;dbL*{!Y zg;4PuFyI9PPWuEHXTpz^y9y(wJocm@XagV{jueZEy*>jYM|bFqOwa1I4RR;FTPhc zG_GuHxkS~Ru@{ZTs{T`P;3LUPnvyFoY*`+E?@93)AD&sJPHA1$)L2I|60mvkW7MLR zHMLDif9mR)s9XJ0@#4)en2_5>%-7WXG2_G)Ikvi%vznV*G~krg&8t==>(4+?SltBc zu)Mjc9`;rP&p^D3>K{m6A{WkvNo`7=+1d_|3U|xW(Zgt zYno1NYOZO)5pUeQ(!6p_%V{v|H7&4OFv+&OW_fdKQ+<48@?scm#Mn%|iFMcG_N>e3 z9xdTB{ieUm_!A%5uEX4)j#y{jJPu#x&8s&WdN%uciNWW^PsKP8rGp^qmsMCt0y-9t z*S0n^Bv&hy72o`o_0_AB4UKC4gr&3=|*3S||P<2%1(9dH+bA;>^`}HPOH<)xTNv zt6S?J_`GQHRtS%yX3fc(@idIpi02wtC)Y?Y$K9(IS_Y|eEGW{- zSqXBWL5dteE_$e1PJ%#aWnfuE>A~+2jPExscAcn)<0QM&^mr4+(I6@Ry1FnT*%3TTw@CJ^}=L}Zgd6` z4r@w}ohJU;Wa`|ZoPWHk!;+B_c?ej=qrdZ=$G@}wLUjffGDM_$_i1Kn^X}=%G(d^%w$Q)}WM|9Je!mFg(91pk((CADfvgIcmuEm^IWw5TPx$2YF#*~ycm@L%iH zf2lZXn+=N`bslIEZOxj-x}`c)m^W|f*-Lo}Q&ht`&WWarDRV4bsHfBt zDlS~QGWoHk$)=>vsMWMAZCKsBvPETw*CNKoof|Ph#9zZFn_p#RWz)-Ml+7$FFPl|1 zyKGKbMcLf4nzGumy0ZGRWLd-Xvgy;O&zL@QdinHO(`QegGreN^-03ybYp2&uub-Zr z-Y}zV#`GC8X3U&XK4aF5*)!(MsF*Q#M$L@c8Fe%2XC!Ad%q*KZeddgrGiR31oHcXy z%sDeFX3m{iGqZMP-OT!#$(ar1W#!Y$XOzz@FE5`}KD&HQc}4l$@|yD6^1AZ+@??3# ztg>0tXU&*3b5{ARS+i!(nlr0n*4$Y&vubD6&8nZ3oYgS9Z1(ioGiJ}6T|Rr(?Af#D z%&wR{cXrL}+Szrp>t`otH_R!UGkwmCIWy;!&zUu6_MAC$D(1|cQ!}S_PTidPImtN< z6=fCED`r&8tSGOTRWZ9_PDMq<+=`lt+KRf0`if*l!`!mD)922ZJ9BRN+*xyH&z&>3 z0yDX0ZtdKPYNprBsF_()UNfs^cFmlciki7KH8o&*O?^$WrlGd1c6#lM z+L^WGwX!X3D(dFe)zsD2 z)z#J4CF>gM%j&1s�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%0DdgsaF0gnooVa6g78fp{Lh4MF8C&veut@k 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 X)uFT(HC6hb-!5W)sz;P=V*39BtPC3z literal 698967 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%0D@1|^T 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 E0dx!giU0rr diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..5766e9a --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,22 @@ +set(BINACPP_INSTALL_DIR ${CMAKE_SOURCE_DIR}/lib/libbinacpp) +set(CMAKE_INSTALL_DIR ${BINACPP_INSTALL_DIR}/lib) +set(CMAKE_INSTALL_INCLUDEDIR ${BINACPP_INSTALL_DIR}/include) + +file(GLOB SRCS *.cpp) +add_library(binacpp SHARED ${SRCS}) +target_link_libraries(binacpp curl crypto websockets) + +add_dependencies(binacpp jsoncpp) + +file(GLOB HEADERS *.h) +set_target_properties(binacpp PROPERTIES PUBLIC_HEADER "${HEADERS}") + +set(PROGRAM_PERMISSIONS_DEFAULT + OWNER_WRITE OWNER_READ OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + +install(TARGETS binacpp + LIBRARY DESTINATION ${CMAKE_INSTALL_DIR} + LIBRARY PERMISSIONS ${PROGRAM_PERMISSIONS_DEFAULT} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) From fd3d29a8d41356f3ac67592873d7bb3eb6de04dd Mon Sep 17 00:00:00 2001 From: Saleem Date: Mon, 26 Feb 2024 00:32:37 +0800 Subject: [PATCH 3/4] Remove Makefiles (#3) * Remove Makefiles --- example/Makefile | 38 ---------------------------- src/Makefile | 65 ------------------------------------------------ 2 files changed, 103 deletions(-) delete mode 100644 example/Makefile delete mode 100644 src/Makefile diff --git a/example/Makefile b/example/Makefile deleted file mode 100644 index de1951b..0000000 --- a/example/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -libcurl_dir=../lib/libcurl-7.56.0 -libcurl_include=${libcurl_dir}/include -libcurl_lib=${libcurl_dir}/lib - -jsoncpp_dir=../lib/jsoncpp-1.8.3 -jsoncpp_include=${jsoncpp_dir}/include -jsoncpp_src=${jsoncpp_dir}/src - -build_jsoncpp: - mkdir -p ${jsoncpp_dir}/build - cd ${jsoncpp_dir}/build; \ - cmake ..; make - - -libwebsockets_dir=../lib/libwebsockets-2.4.0 -libwebsockets_include=${libwebsockets_dir}/include -libwebsockets_lib=${libwebsockets_dir}/lib - -libbinacpp_dir=../lib/libbinacpp -libbinacpp_include=${libbinacpp_dir}/include -libbinacpp_lib=${libbinacpp_dir}/lib - - - -%: %.cpp build_jsoncpp - @echo -n "\nMaking $@\n\n\n" - g++ -I$(libcurl_include) -I$(jsoncpp_include) -I$(libwebsockets_include) -I$(libbinacpp_include) \ - $@.cpp \ - -L$(libcurl_lib) \ - -L$(libwebsockets_lib) \ - -L$(libbinacpp_lib) \ - -L$(jsoncpp_dir)/build \ - -lcurl -ljsoncpp -lcrypto -lwebsockets -lbinacpp -o $@ - - cat run.template.sh | sed s/%executable%/$@/ > $@.run.sh - chmod 755 $@.run.sh - - diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index 3405c25..0000000 --- a/src/Makefile +++ /dev/null @@ -1,65 +0,0 @@ - - -libcurl_dir=../lib/libcurl-7.56.0 -libcurl_include=${libcurl_dir}/include -libcurl_lib=${libcurl_dir}/lib - -jsoncpp_dir=../lib/jsoncpp-1.8.3 -jsoncpp_include=${jsoncpp_dir}/include -jsoncpp_src=${jsoncpp_dir}/src - - -libwebsockets_dir=../lib/libwebsockets-2.4.0 -libwebsockets_include=${libwebsockets_dir}/include -libwebsockets_lib=${libwebsockets_dir}/lib - - -build_dir=../lib/libbinacpp/lib -objects=$(build_dir)/jsoncpp.o $(build_dir)/binacpp_utils.o $(build_dir)/binacpp_logger.o $(build_dir)/binacpp.o $(build_dir)/binacpp_websocket.o - -build_include=../lib/libbinacpp/include - - -$(build_dir)/libbinacpp.so: $(objects) - g++ -I$(libcurl_include) -I$(jsoncpp_include) -I$(libwebsockets_include) \ - -L$(libcurl_lib) \ - -L$(libwebsockets_lib) \ - $(objects) \ - -shared \ - -lcurl -lcrypto -lwebsockets -fPIC -o $@ - - # Make a new copy of the header too - cp *.h $(build_include) - - - - -$(build_dir)/binacpp.o: binacpp.cpp binacpp.h - g++ -I$(libcurl_include) -I$(jsoncpp_include) -c binacpp.cpp -fPIC -o $(build_dir)/binacpp.o - - -$(build_dir)/binacpp_websocket.o: binacpp_websocket.cpp binacpp_websocket.h - g++ -I$(libwebsockets_include) -I$(jsoncpp_include) -c binacpp_websocket.cpp -fPIC -o $(build_dir)/binacpp_websocket.o - - -$(build_dir)/binacpp_logger.o: binacpp_logger.cpp binacpp_logger.h - g++ -c binacpp_logger.cpp -fPIC -o $(build_dir)/binacpp_logger.o - - - -$(build_dir)/binacpp_utils.o: binacpp_utils.cpp binacpp_utils.h - g++ -c binacpp_utils.cpp -fPIC -o $(build_dir)/binacpp_utils.o - - -$(build_dir)/jsoncpp.o: $(jsoncpp_src)/jsoncpp.cpp - g++ -I$(jsoncpp_include) -c $(jsoncpp_src)/jsoncpp.cpp -fPIC -o $(build_dir)/jsoncpp.o - -clean: - rm $(build_dir)/*.o - rm $(build_dir)/*.so - - - - - - From 6c13ffb4b175177982ffea65729097bbc0684ccd Mon Sep 17 00:00:00 2001 From: Saleem Date: Thu, 29 Feb 2024 21:15:36 +0800 Subject: [PATCH 4/4] Build jsoncpp using FetchContent (#4) * Build jsoncpp using FetchContent * Fix run script --- CMakeLists.txt | 19 +- example/CMakeLists.txt | 11 +- lib/jsoncpp-1.8.3/CMakeLists.txt | 8 - .../include/json/json-forwards.h | 333 - lib/jsoncpp-1.8.3/include/json/json.h | 2212 ------- lib/jsoncpp-1.8.3/src/jsoncpp.cpp | 5397 ----------------- src/CMakeLists.txt | 7 +- src/binacpp.h | 59 +- 8 files changed, 36 insertions(+), 8010 deletions(-) delete mode 100644 lib/jsoncpp-1.8.3/CMakeLists.txt delete mode 100644 lib/jsoncpp-1.8.3/include/json/json-forwards.h delete mode 100644 lib/jsoncpp-1.8.3/include/json/json.h delete mode 100644 lib/jsoncpp-1.8.3/src/jsoncpp.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index df738a9..345a825 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,20 +1,29 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.14) project(binacpp) set(LIBCURL_DIR "lib/libcurl-7.56.0") -set(JSONCPP_DIR "lib/jsoncpp-1.8.3") set(LIBWS_DIR "lib/libwebsockets-2.4.0") set(CMAKE_VERBOSE_MAKEFILE ON) include_directories(${LIBCURL_DIR}/include) -include_directories(${JSONCPP_DIR}/include) include_directories(${LIBWS_DIR}/include) link_directories(${LIBCURL_DIR}/lib) -link_directories(${JSONCPP_DIR}/build) link_directories(${LIBWS_DIR}/lib) -add_subdirectory(${JSONCPP_DIR}) +include(FetchContent) + +FetchContent_Declare( + jsoncpp + GIT_REPOSITORY https://github.com/open-source-parsers/jsoncpp.git + GIT_TAG 1.8.4 + CONFIGURE_COMMAND "-DBUILD_SHARED_LIB=OFF" +) + +FetchContent_MakeAvailable(jsoncpp) + +include_directories(${jsoncpp_SOURCE_DIR}/include) + add_subdirectory(example) add_subdirectory(src) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index e8e164a..575b2b9 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,15 +1,20 @@ set(LIBBINACPP_DIR "${CMAKE_SOURCE_DIR}/lib/libbinacpp") -message("BINACPP Dir ${LIBBINACPP_DIR}") include_directories(${LIBBINACPP_DIR}/include) link_directories(${LIBBINACPP_DIR}/lib) file(GLOB EXAMPLES "*.cpp") +file(GLOB SCRIPTS "*.sh") + +foreach(SCRIPT ${SCRIPTS}) + configure_file(${SCRIPT} ${CMAKE_BINARY_DIR}/example COPYONLY) +endforeach() set(ITER 0) foreach(EXAMPLE ${EXAMPLES}) - get_filename_component(TARGET_NAME ${EXAMPLE} NAME) + get_filename_component(TARGET_NAME ${EXAMPLE} NAME_WE) + message("Build executable - ${TARGET_NAME}") add_executable(${TARGET_NAME} ${EXAMPLE}) add_dependencies(${TARGET_NAME} binacpp) - target_link_libraries(${TARGET_NAME} curl jsoncpp crypto websockets binacpp) + target_link_libraries(${TARGET_NAME} curl jsoncpp_lib_static crypto websockets binacpp) math(EXPR ITER "${ITER} + 1") endforeach() diff --git a/lib/jsoncpp-1.8.3/CMakeLists.txt b/lib/jsoncpp-1.8.3/CMakeLists.txt deleted file mode 100644 index ec040ca..0000000 --- a/lib/jsoncpp-1.8.3/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.0) - -project(libjsoncpp LANGUAGES CXX) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3 -g") - -include_directories(./include) -add_library(jsoncpp SHARED src/jsoncpp.cpp) diff --git a/lib/jsoncpp-1.8.3/include/json/json-forwards.h b/lib/jsoncpp-1.8.3/include/json/json-forwards.h deleted file mode 100644 index 60d3bd0..0000000 --- a/lib/jsoncpp-1.8.3/include/json/json-forwards.h +++ /dev/null @@ -1,333 +0,0 @@ -/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/). -/// It is intended to be used with #include "json/json-forwards.h" -/// This header provides forward declaration for all JsonCpp types. - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: LICENSE -// ////////////////////////////////////////////////////////////////////// - -/* -The JsonCpp library's source code, including accompanying documentation, -tests and demonstration applications, are licensed under the following -conditions... - -Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all -jurisdictions which recognize such a disclaimer. In such jurisdictions, -this software is released into the Public Domain. - -In jurisdictions which do not recognize Public Domain property (e.g. Germany as of -2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and -The JsonCpp Authors, and is released under the terms of the MIT License (see below). - -In jurisdictions which recognize Public Domain property, the user of this -software may choose to accept it either as 1) Public Domain, 2) under the -conditions of the MIT License (see below), or 3) under the terms of dual -Public Domain/MIT License conditions described here, as they choose. - -The MIT License is about as close to Public Domain as a license can get, and is -described in clear, concise terms at: - - http://en.wikipedia.org/wiki/MIT_License - -The full text of the MIT License follows: - -======================================================================== -Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors - -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. -======================================================================== -(END LICENSE TEXT) - -The MIT license is compatible with both the GPL and commercial -software, affording one all of the rights of Public Domain with the -minor nuisance of being required to keep the above copyright notice -and license text in the source code. Note also that by accepting the -Public Domain "license" you can re-license your copy using whatever -license you like. - -*/ - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: LICENSE -// ////////////////////////////////////////////////////////////////////// - - - - - -#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED -# define JSON_FORWARD_AMALGATED_H_INCLUDED -/// If defined, indicates that the source file is amalgated -/// to prevent private header inclusion. -#define JSON_IS_AMALGAMATION - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/config.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef JSON_CONFIG_H_INCLUDED -#define JSON_CONFIG_H_INCLUDED -#include -#include //typedef String -#include //typedef int64_t, uint64_t - -/// If defined, indicates that json library is embedded in CppTL library. -//# define JSON_IN_CPPTL 1 - -/// If defined, indicates that json may leverage CppTL library -//# define JSON_USE_CPPTL 1 -/// If defined, indicates that cpptl vector based map should be used instead of -/// std::map -/// as Value container. -//# define JSON_USE_CPPTL_SMALLMAP 1 - -// If non-zero, the library uses exceptions to report bad input instead of C -// assertion macros. The default is to use exceptions. -#ifndef JSON_USE_EXCEPTION -#define JSON_USE_EXCEPTION 1 -#endif - -/// If defined, indicates that the source file is amalgated -/// to prevent private header inclusion. -/// Remarks: it is automatically defined in the generated amalgated header. -// #define JSON_IS_AMALGAMATION - -#ifdef JSON_IN_CPPTL -#include -#ifndef JSON_USE_CPPTL -#define JSON_USE_CPPTL 1 -#endif -#endif - -#ifdef JSON_IN_CPPTL -#define JSON_API CPPTL_API -#elif defined(JSON_DLL_BUILD) -#if defined(_MSC_VER) || defined(__MINGW32__) -#define JSON_API __declspec(dllexport) -#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING -#endif // if defined(_MSC_VER) -#elif defined(JSON_DLL) -#if defined(_MSC_VER) || defined(__MINGW32__) -#define JSON_API __declspec(dllimport) -#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING -#endif // if defined(_MSC_VER) -#endif // ifdef JSON_IN_CPPTL -#if !defined(JSON_API) -#define JSON_API -#endif - -// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for -// integer -// Storages, and 64 bits integer support is disabled. -// #define JSON_NO_INT64 1 - -#if defined(_MSC_VER) // MSVC -# if _MSC_VER <= 1200 // MSVC 6 - // Microsoft Visual Studio 6 only support conversion from __int64 to double - // (no conversion from unsigned __int64). -# define JSON_USE_INT64_DOUBLE_CONVERSION 1 - // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' - // characters in the debug information) - // All projects I've ever seen with VS6 were using this globally (not bothering - // with pragma push/pop). -# pragma warning(disable : 4786) -# endif // MSVC 6 - -# if _MSC_VER >= 1500 // MSVC 2008 - /// Indicates that the following function is deprecated. -# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) -# endif - -#endif // defined(_MSC_VER) - -// In c++11 the override keyword allows you to explicity define that a function -// is intended to override the base-class version. This makes the code more -// managable and fixes a set of common hard-to-find bugs. -#if __cplusplus >= 201103L -# define JSONCPP_OVERRIDE override -# define JSONCPP_NOEXCEPT noexcept -#elif defined(_MSC_VER) && _MSC_VER > 1600 && _MSC_VER < 1900 -# define JSONCPP_OVERRIDE override -# define JSONCPP_NOEXCEPT throw() -#elif defined(_MSC_VER) && _MSC_VER >= 1900 -# define JSONCPP_OVERRIDE override -# define JSONCPP_NOEXCEPT noexcept -#else -# define JSONCPP_OVERRIDE -# define JSONCPP_NOEXCEPT throw() -#endif - -#ifndef JSON_HAS_RVALUE_REFERENCES - -#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 -#define JSON_HAS_RVALUE_REFERENCES 1 -#endif // MSVC >= 2010 - -#ifdef __clang__ -#if __has_feature(cxx_rvalue_references) -#define JSON_HAS_RVALUE_REFERENCES 1 -#endif // has_feature - -#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) -#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) -#define JSON_HAS_RVALUE_REFERENCES 1 -#endif // GXX_EXPERIMENTAL - -#endif // __clang__ || __GNUC__ - -#endif // not defined JSON_HAS_RVALUE_REFERENCES - -#ifndef JSON_HAS_RVALUE_REFERENCES -#define JSON_HAS_RVALUE_REFERENCES 0 -#endif - -#ifdef __clang__ -# if __has_extension(attribute_deprecated_with_message) -# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) -# endif -#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) -# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) -# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) -# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) -# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) -# endif // GNUC version -#endif // __clang__ || __GNUC__ - -#if !defined(JSONCPP_DEPRECATED) -#define JSONCPP_DEPRECATED(message) -#endif // if !defined(JSONCPP_DEPRECATED) - -#if __GNUC__ >= 6 -# define JSON_USE_INT64_DOUBLE_CONVERSION 1 -#endif - -#if !defined(JSON_IS_AMALGAMATION) - -# include "version.h" - -# if JSONCPP_USING_SECURE_MEMORY -# include "allocator.h" //typedef Allocator -# endif - -#endif // if !defined(JSON_IS_AMALGAMATION) - -namespace Json { -typedef int Int; -typedef unsigned int UInt; -#if defined(JSON_NO_INT64) -typedef int LargestInt; -typedef unsigned int LargestUInt; -#undef JSON_HAS_INT64 -#else // if defined(JSON_NO_INT64) -// For Microsoft Visual use specific types as long long is not supported -#if defined(_MSC_VER) // Microsoft Visual Studio -typedef __int64 Int64; -typedef unsigned __int64 UInt64; -#else // if defined(_MSC_VER) // Other platforms, use long long -typedef int64_t Int64; -typedef uint64_t UInt64; -#endif // if defined(_MSC_VER) -typedef Int64 LargestInt; -typedef UInt64 LargestUInt; -#define JSON_HAS_INT64 -#endif // if defined(JSON_NO_INT64) -#if JSONCPP_USING_SECURE_MEMORY -#define JSONCPP_STRING std::basic_string, Json::SecureAllocator > -#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream, Json::SecureAllocator > -#define JSONCPP_OSTREAM std::basic_ostream> -#define JSONCPP_ISTRINGSTREAM std::basic_istringstream, Json::SecureAllocator > -#define JSONCPP_ISTREAM std::istream -#else -#define JSONCPP_STRING std::string -#define JSONCPP_OSTRINGSTREAM std::ostringstream -#define JSONCPP_OSTREAM std::ostream -#define JSONCPP_ISTRINGSTREAM std::istringstream -#define JSONCPP_ISTREAM std::istream -#endif // if JSONCPP_USING_SECURE_MEMORY -} // end namespace Json - -#endif // JSON_CONFIG_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/config.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/forwards.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef JSON_FORWARDS_H_INCLUDED -#define JSON_FORWARDS_H_INCLUDED - -#if !defined(JSON_IS_AMALGAMATION) -#include "config.h" -#endif // if !defined(JSON_IS_AMALGAMATION) - -namespace Json { - -// writer.h -class FastWriter; -class StyledWriter; - -// reader.h -class Reader; - -// features.h -class Features; - -// value.h -typedef unsigned int ArrayIndex; -class StaticString; -class Path; -class PathArgument; -class Value; -class ValueIteratorBase; -class ValueIterator; -class ValueConstIterator; - -} // namespace Json - -#endif // JSON_FORWARDS_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/forwards.h -// ////////////////////////////////////////////////////////////////////// - - - - - -#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED diff --git a/lib/jsoncpp-1.8.3/include/json/json.h b/lib/jsoncpp-1.8.3/include/json/json.h deleted file mode 100644 index 5ed35b4..0000000 --- a/lib/jsoncpp-1.8.3/include/json/json.h +++ /dev/null @@ -1,2212 +0,0 @@ -/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/). -/// It is intended to be used with #include "json/json.h" - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: LICENSE -// ////////////////////////////////////////////////////////////////////// - -/* -The JsonCpp library's source code, including accompanying documentation, -tests and demonstration applications, are licensed under the following -conditions... - -Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all -jurisdictions which recognize such a disclaimer. In such jurisdictions, -this software is released into the Public Domain. - -In jurisdictions which do not recognize Public Domain property (e.g. Germany as of -2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and -The JsonCpp Authors, and is released under the terms of the MIT License (see below). - -In jurisdictions which recognize Public Domain property, the user of this -software may choose to accept it either as 1) Public Domain, 2) under the -conditions of the MIT License (see below), or 3) under the terms of dual -Public Domain/MIT License conditions described here, as they choose. - -The MIT License is about as close to Public Domain as a license can get, and is -described in clear, concise terms at: - - http://en.wikipedia.org/wiki/MIT_License - -The full text of the MIT License follows: - -======================================================================== -Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors - -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. -======================================================================== -(END LICENSE TEXT) - -The MIT license is compatible with both the GPL and commercial -software, affording one all of the rights of Public Domain with the -minor nuisance of being required to keep the above copyright notice -and license text in the source code. Note also that by accepting the -Public Domain "license" you can re-license your copy using whatever -license you like. - -*/ - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: LICENSE -// ////////////////////////////////////////////////////////////////////// - - - - - -#ifndef JSON_AMALGATED_H_INCLUDED -# define JSON_AMALGATED_H_INCLUDED -/// If defined, indicates that the source file is amalgated -/// to prevent private header inclusion. -#define JSON_IS_AMALGAMATION - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/version.h -// ////////////////////////////////////////////////////////////////////// - -// DO NOT EDIT. This file (and "version") is generated by CMake. -// Run CMake configure step to update it. -#ifndef JSON_VERSION_H_INCLUDED -# define JSON_VERSION_H_INCLUDED - -# define JSONCPP_VERSION_STRING "1.8.3" -# define JSONCPP_VERSION_MAJOR 1 -# define JSONCPP_VERSION_MINOR 8 -# define JSONCPP_VERSION_PATCH 3 -# define JSONCPP_VERSION_QUALIFIER -# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) - -#ifdef JSONCPP_USING_SECURE_MEMORY -#undef JSONCPP_USING_SECURE_MEMORY -#endif -#define JSONCPP_USING_SECURE_MEMORY 0 -// If non-zero, the library zeroes any memory that it has allocated before -// it frees its memory. - -#endif // JSON_VERSION_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/version.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/config.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef JSON_CONFIG_H_INCLUDED -#define JSON_CONFIG_H_INCLUDED -#include -#include //typedef String -#include //typedef int64_t, uint64_t - -/// If defined, indicates that json library is embedded in CppTL library. -//# define JSON_IN_CPPTL 1 - -/// If defined, indicates that json may leverage CppTL library -//# define JSON_USE_CPPTL 1 -/// If defined, indicates that cpptl vector based map should be used instead of -/// std::map -/// as Value container. -//# define JSON_USE_CPPTL_SMALLMAP 1 - -// If non-zero, the library uses exceptions to report bad input instead of C -// assertion macros. The default is to use exceptions. -#ifndef JSON_USE_EXCEPTION -#define JSON_USE_EXCEPTION 1 -#endif - -/// If defined, indicates that the source file is amalgated -/// to prevent private header inclusion. -/// Remarks: it is automatically defined in the generated amalgated header. -// #define JSON_IS_AMALGAMATION - -#ifdef JSON_IN_CPPTL -#include -#ifndef JSON_USE_CPPTL -#define JSON_USE_CPPTL 1 -#endif -#endif - -#ifdef JSON_IN_CPPTL -#define JSON_API CPPTL_API -#elif defined(JSON_DLL_BUILD) -#if defined(_MSC_VER) || defined(__MINGW32__) -#define JSON_API __declspec(dllexport) -#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING -#endif // if defined(_MSC_VER) -#elif defined(JSON_DLL) -#if defined(_MSC_VER) || defined(__MINGW32__) -#define JSON_API __declspec(dllimport) -#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING -#endif // if defined(_MSC_VER) -#endif // ifdef JSON_IN_CPPTL -#if !defined(JSON_API) -#define JSON_API -#endif - -// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for -// integer -// Storages, and 64 bits integer support is disabled. -// #define JSON_NO_INT64 1 - -#if defined(_MSC_VER) // MSVC -# if _MSC_VER <= 1200 // MSVC 6 - // Microsoft Visual Studio 6 only support conversion from __int64 to double - // (no conversion from unsigned __int64). -# define JSON_USE_INT64_DOUBLE_CONVERSION 1 - // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' - // characters in the debug information) - // All projects I've ever seen with VS6 were using this globally (not bothering - // with pragma push/pop). -# pragma warning(disable : 4786) -# endif // MSVC 6 - -# if _MSC_VER >= 1500 // MSVC 2008 - /// Indicates that the following function is deprecated. -# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) -# endif - -#endif // defined(_MSC_VER) - -// In c++11 the override keyword allows you to explicity define that a function -// is intended to override the base-class version. This makes the code more -// managable and fixes a set of common hard-to-find bugs. -#if __cplusplus >= 201103L -# define JSONCPP_OVERRIDE override -# define JSONCPP_NOEXCEPT noexcept -#elif defined(_MSC_VER) && _MSC_VER > 1600 && _MSC_VER < 1900 -# define JSONCPP_OVERRIDE override -# define JSONCPP_NOEXCEPT throw() -#elif defined(_MSC_VER) && _MSC_VER >= 1900 -# define JSONCPP_OVERRIDE override -# define JSONCPP_NOEXCEPT noexcept -#else -# define JSONCPP_OVERRIDE -# define JSONCPP_NOEXCEPT throw() -#endif - -#ifndef JSON_HAS_RVALUE_REFERENCES - -#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 -#define JSON_HAS_RVALUE_REFERENCES 1 -#endif // MSVC >= 2010 - -#ifdef __clang__ -#if __has_feature(cxx_rvalue_references) -#define JSON_HAS_RVALUE_REFERENCES 1 -#endif // has_feature - -#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) -#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) -#define JSON_HAS_RVALUE_REFERENCES 1 -#endif // GXX_EXPERIMENTAL - -#endif // __clang__ || __GNUC__ - -#endif // not defined JSON_HAS_RVALUE_REFERENCES - -#ifndef JSON_HAS_RVALUE_REFERENCES -#define JSON_HAS_RVALUE_REFERENCES 0 -#endif - -#ifdef __clang__ -# if __has_extension(attribute_deprecated_with_message) -# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) -# endif -#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) -# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) -# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) -# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) -# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) -# endif // GNUC version -#endif // __clang__ || __GNUC__ - -#if !defined(JSONCPP_DEPRECATED) -#define JSONCPP_DEPRECATED(message) -#endif // if !defined(JSONCPP_DEPRECATED) - -#if __GNUC__ >= 6 -# define JSON_USE_INT64_DOUBLE_CONVERSION 1 -#endif - -#if !defined(JSON_IS_AMALGAMATION) - -# include "version.h" - -# if JSONCPP_USING_SECURE_MEMORY -# include "allocator.h" //typedef Allocator -# endif - -#endif // if !defined(JSON_IS_AMALGAMATION) - -namespace Json { -typedef int Int; -typedef unsigned int UInt; -#if defined(JSON_NO_INT64) -typedef int LargestInt; -typedef unsigned int LargestUInt; -#undef JSON_HAS_INT64 -#else // if defined(JSON_NO_INT64) -// For Microsoft Visual use specific types as long long is not supported -#if defined(_MSC_VER) // Microsoft Visual Studio -typedef __int64 Int64; -typedef unsigned __int64 UInt64; -#else // if defined(_MSC_VER) // Other platforms, use long long -typedef int64_t Int64; -typedef uint64_t UInt64; -#endif // if defined(_MSC_VER) -typedef Int64 LargestInt; -typedef UInt64 LargestUInt; -#define JSON_HAS_INT64 -#endif // if defined(JSON_NO_INT64) -#if JSONCPP_USING_SECURE_MEMORY -#define JSONCPP_STRING std::basic_string, Json::SecureAllocator > -#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream, Json::SecureAllocator > -#define JSONCPP_OSTREAM std::basic_ostream> -#define JSONCPP_ISTRINGSTREAM std::basic_istringstream, Json::SecureAllocator > -#define JSONCPP_ISTREAM std::istream -#else -#define JSONCPP_STRING std::string -#define JSONCPP_OSTRINGSTREAM std::ostringstream -#define JSONCPP_OSTREAM std::ostream -#define JSONCPP_ISTRINGSTREAM std::istringstream -#define JSONCPP_ISTREAM std::istream -#endif // if JSONCPP_USING_SECURE_MEMORY -} // end namespace Json - -#endif // JSON_CONFIG_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/config.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/forwards.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef JSON_FORWARDS_H_INCLUDED -#define JSON_FORWARDS_H_INCLUDED - -#if !defined(JSON_IS_AMALGAMATION) -#include "config.h" -#endif // if !defined(JSON_IS_AMALGAMATION) - -namespace Json { - -// writer.h -class FastWriter; -class StyledWriter; - -// reader.h -class Reader; - -// features.h -class Features; - -// value.h -typedef unsigned int ArrayIndex; -class StaticString; -class Path; -class PathArgument; -class Value; -class ValueIteratorBase; -class ValueIterator; -class ValueConstIterator; - -} // namespace Json - -#endif // JSON_FORWARDS_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/forwards.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/features.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef CPPTL_JSON_FEATURES_H_INCLUDED -#define CPPTL_JSON_FEATURES_H_INCLUDED - -#if !defined(JSON_IS_AMALGAMATION) -#include "forwards.h" -#endif // if !defined(JSON_IS_AMALGAMATION) - -#pragma pack(push, 8) - -namespace Json { - -/** \brief Configuration passed to reader and writer. - * This configuration object can be used to force the Reader or Writer - * to behave in a standard conforming way. - */ -class JSON_API Features { -public: - /** \brief A configuration that allows all features and assumes all strings - * are UTF-8. - * - C & C++ comments are allowed - * - Root object can be any JSON value - * - Assumes Value strings are encoded in UTF-8 - */ - static Features all(); - - /** \brief A configuration that is strictly compatible with the JSON - * specification. - * - Comments are forbidden. - * - Root object must be either an array or an object value. - * - Assumes Value strings are encoded in UTF-8 - */ - static Features strictMode(); - - /** \brief Initialize the configuration like JsonConfig::allFeatures; - */ - Features(); - - /// \c true if comments are allowed. Default: \c true. - bool allowComments_; - - /// \c true if root must be either an array or an object value. Default: \c - /// false. - bool strictRoot_; - - /// \c true if dropped null placeholders are allowed. Default: \c false. - bool allowDroppedNullPlaceholders_; - - /// \c true if numeric object key are allowed. Default: \c false. - bool allowNumericKeys_; -}; - -} // namespace Json - -#pragma pack(pop) - -#endif // CPPTL_JSON_FEATURES_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/features.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/value.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef CPPTL_JSON_H_INCLUDED -#define CPPTL_JSON_H_INCLUDED - -#if !defined(JSON_IS_AMALGAMATION) -#include "forwards.h" -#endif // if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include - -#ifndef JSON_USE_CPPTL_SMALLMAP -#include -#else -#include -#endif -#ifdef JSON_USE_CPPTL -#include -#endif - -//Conditional NORETURN attribute on the throw functions would: -// a) suppress false positives from static code analysis -// b) possibly improve optimization opportunities. -#if !defined(JSONCPP_NORETURN) -# if defined(_MSC_VER) -# define JSONCPP_NORETURN __declspec(noreturn) -# elif defined(__GNUC__) -# define JSONCPP_NORETURN __attribute__ ((__noreturn__)) -# else -# define JSONCPP_NORETURN -# endif -#endif - -// Disable warning C4251: : needs to have dll-interface to -// be used by... -#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma warning(push) -#pragma warning(disable : 4251) -#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) - -#pragma pack(push, 8) - -/** \brief JSON (JavaScript Object Notation). - */ -namespace Json { - -/** Base class for all exceptions we throw. - * - * We use nothing but these internally. Of course, STL can throw others. - */ -class JSON_API Exception : public std::exception { -public: - Exception(JSONCPP_STRING const& msg); - ~Exception() JSONCPP_NOEXCEPT JSONCPP_OVERRIDE; - char const* what() const JSONCPP_NOEXCEPT JSONCPP_OVERRIDE; -protected: - JSONCPP_STRING msg_; -}; - -/** Exceptions which the user cannot easily avoid. - * - * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input - * - * \remark derived from Json::Exception - */ -class JSON_API RuntimeError : public Exception { -public: - RuntimeError(JSONCPP_STRING const& msg); -}; - -/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. - * - * These are precondition-violations (user bugs) and internal errors (our bugs). - * - * \remark derived from Json::Exception - */ -class JSON_API LogicError : public Exception { -public: - LogicError(JSONCPP_STRING const& msg); -}; - -/// used internally -JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg); -/// used internally -JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg); - -/** \brief Type of the value held by a Value object. - */ -enum ValueType { - nullValue = 0, ///< 'null' value - intValue, ///< signed integer value - uintValue, ///< unsigned integer value - realValue, ///< double value - stringValue, ///< UTF-8 string value - booleanValue, ///< bool value - arrayValue, ///< array value (ordered list) - objectValue ///< object value (collection of name/value pairs). -}; - -enum CommentPlacement { - commentBefore = 0, ///< a comment placed on the line before a value - commentAfterOnSameLine, ///< a comment just after a value on the same line - commentAfter, ///< a comment on the line after a value (only make sense for - /// root value) - numberOfCommentPlacement -}; - -//# ifdef JSON_USE_CPPTL -// typedef CppTL::AnyEnumerator EnumMemberNames; -// typedef CppTL::AnyEnumerator EnumValues; -//# endif - -/** \brief Lightweight wrapper to tag static string. - * - * Value constructor and objectValue member assignement takes advantage of the - * StaticString and avoid the cost of string duplication when storing the - * string or the member name. - * - * Example of usage: - * \code - * Json::Value aValue( StaticString("some text") ); - * Json::Value object; - * static const StaticString code("code"); - * object[code] = 1234; - * \endcode - */ -class JSON_API StaticString { -public: - explicit StaticString(const char* czstring) : c_str_(czstring) {} - - operator const char*() const { return c_str_; } - - const char* c_str() const { return c_str_; } - -private: - const char* c_str_; -}; - -/** \brief Represents a JSON value. - * - * This class is a discriminated union wrapper that can represents a: - * - signed integer [range: Value::minInt - Value::maxInt] - * - unsigned integer (range: 0 - Value::maxUInt) - * - double - * - UTF-8 string - * - boolean - * - 'null' - * - an ordered list of Value - * - collection of name/value pairs (javascript object) - * - * The type of the held value is represented by a #ValueType and - * can be obtained using type(). - * - * Values of an #objectValue or #arrayValue can be accessed using operator[]() - * methods. - * Non-const methods will automatically create the a #nullValue element - * if it does not exist. - * The sequence of an #arrayValue will be automatically resized and initialized - * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. - * - * The get() methods can be used to obtain default value in the case the - * required element does not exist. - * - * It is possible to iterate over the list of a #objectValue values using - * the getMemberNames() method. - * - * \note #Value string-length fit in size_t, but keys must be < 2^30. - * (The reason is an implementation detail.) A #CharReader will raise an - * exception if a bound is exceeded to avoid security holes in your app, - * but the Value API does *not* check bounds. That is the responsibility - * of the caller. - */ -class JSON_API Value { - friend class ValueIteratorBase; -public: - typedef std::vector Members; - typedef ValueIterator iterator; - typedef ValueConstIterator const_iterator; - typedef Json::UInt UInt; - typedef Json::Int Int; -#if defined(JSON_HAS_INT64) - typedef Json::UInt64 UInt64; - typedef Json::Int64 Int64; -#endif // defined(JSON_HAS_INT64) - typedef Json::LargestInt LargestInt; - typedef Json::LargestUInt LargestUInt; - typedef Json::ArrayIndex ArrayIndex; - - // Required for boost integration, e. g. BOOST_TEST - typedef std::string value_type; - - static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value(). - static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null - static Value const& nullSingleton(); ///< Prefer this to null or nullRef. - - /// Minimum signed integer value that can be stored in a Json::Value. - static const LargestInt minLargestInt; - /// Maximum signed integer value that can be stored in a Json::Value. - static const LargestInt maxLargestInt; - /// Maximum unsigned integer value that can be stored in a Json::Value. - static const LargestUInt maxLargestUInt; - - /// Minimum signed int value that can be stored in a Json::Value. - static const Int minInt; - /// Maximum signed int value that can be stored in a Json::Value. - static const Int maxInt; - /// Maximum unsigned int value that can be stored in a Json::Value. - static const UInt maxUInt; - -#if defined(JSON_HAS_INT64) - /// Minimum signed 64 bits int value that can be stored in a Json::Value. - static const Int64 minInt64; - /// Maximum signed 64 bits int value that can be stored in a Json::Value. - static const Int64 maxInt64; - /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. - static const UInt64 maxUInt64; -#endif // defined(JSON_HAS_INT64) - -private: -#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION - class CZString { - public: - enum DuplicationPolicy { - noDuplication = 0, - duplicate, - duplicateOnCopy - }; - CZString(ArrayIndex index); - CZString(char const* str, unsigned length, DuplicationPolicy allocate); - CZString(CZString const& other); -#if JSON_HAS_RVALUE_REFERENCES - CZString(CZString&& other); -#endif - ~CZString(); - CZString& operator=(const CZString& other); - -#if JSON_HAS_RVALUE_REFERENCES - CZString& operator=(CZString&& other); -#endif - - bool operator<(CZString const& other) const; - bool operator==(CZString const& other) const; - ArrayIndex index() const; - //const char* c_str() const; ///< \deprecated - char const* data() const; - unsigned length() const; - bool isStaticString() const; - - private: - void swap(CZString& other); - - struct StringStorage { - unsigned policy_: 2; - unsigned length_: 30; // 1GB max - }; - - char const* cstr_; // actually, a prefixed string, unless policy is noDup - union { - ArrayIndex index_; - StringStorage storage_; - }; - }; - -public: -#ifndef JSON_USE_CPPTL_SMALLMAP - typedef std::map ObjectValues; -#else - typedef CppTL::SmallMap ObjectValues; -#endif // ifndef JSON_USE_CPPTL_SMALLMAP -#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION - -public: - /** \brief Create a default Value of the given type. - - This is a very useful constructor. - To create an empty array, pass arrayValue. - To create an empty object, pass objectValue. - Another Value can then be set to this one by assignment. -This is useful since clear() and resize() will not alter types. - - Examples: -\code -Json::Value null_value; // null -Json::Value arr_value(Json::arrayValue); // [] -Json::Value obj_value(Json::objectValue); // {} -\endcode - */ - Value(ValueType type = nullValue); - Value(Int value); - Value(UInt value); -#if defined(JSON_HAS_INT64) - Value(Int64 value); - Value(UInt64 value); -#endif // if defined(JSON_HAS_INT64) - Value(double value); - Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) - Value(const char* begin, const char* end); ///< Copy all, incl zeroes. - /** \brief Constructs a value from a static string. - - * Like other value string constructor but do not duplicate the string for - * internal storage. The given string must remain alive after the call to this - * constructor. - * \note This works only for null-terminated strings. (We cannot change the - * size of this class, so we have nowhere to store the length, - * which might be computed later for various operations.) - * - * Example of usage: - * \code - * static StaticString foo("some text"); - * Json::Value aValue(foo); - * \endcode - */ - Value(const StaticString& value); - Value(const JSONCPP_STRING& value); ///< Copy data() til size(). Embedded zeroes too. -#ifdef JSON_USE_CPPTL - Value(const CppTL::ConstString& value); -#endif - Value(bool value); - /// Deep copy. - Value(const Value& other); -#if JSON_HAS_RVALUE_REFERENCES - /// Move constructor - Value(Value&& other); -#endif - ~Value(); - - /// Deep copy, then swap(other). - /// \note Over-write existing comments. To preserve comments, use #swapPayload(). - Value& operator=(Value other); - - /// Swap everything. - void swap(Value& other); - /// Swap values but leave comments and source offsets in place. - void swapPayload(Value& other); - - /// copy everything. - void copy(const Value& other); - /// copy values but leave comments and source offsets in place. - void copyPayload(const Value& other); - - ValueType type() const; - - /// Compare payload only, not comments etc. - bool operator<(const Value& other) const; - bool operator<=(const Value& other) const; - bool operator>=(const Value& other) const; - bool operator>(const Value& other) const; - bool operator==(const Value& other) const; - bool operator!=(const Value& other) const; - int compare(const Value& other) const; - - const char* asCString() const; ///< Embedded zeroes could cause you trouble! -#if JSONCPP_USING_SECURE_MEMORY - unsigned getCStringLength() const; //Allows you to understand the length of the CString -#endif - JSONCPP_STRING asString() const; ///< Embedded zeroes are possible. - /** Get raw char* of string-value. - * \return false if !string. (Seg-fault if str or end are NULL.) - */ - bool getString( - char const** begin, char const** end) const; -#ifdef JSON_USE_CPPTL - CppTL::ConstString asConstString() const; -#endif - Int asInt() const; - UInt asUInt() const; -#if defined(JSON_HAS_INT64) - Int64 asInt64() const; - UInt64 asUInt64() const; -#endif // if defined(JSON_HAS_INT64) - LargestInt asLargestInt() const; - LargestUInt asLargestUInt() const; - float asFloat() const; - double asDouble() const; - bool asBool() const; - - bool isNull() const; - bool isBool() const; - bool isInt() const; - bool isInt64() const; - bool isUInt() const; - bool isUInt64() const; - bool isIntegral() const; - bool isDouble() const; - bool isNumeric() const; - bool isString() const; - bool isArray() const; - bool isObject() const; - - bool isConvertibleTo(ValueType other) const; - - /// Number of values in array or object - ArrayIndex size() const; - - /// \brief Return true if empty array, empty object, or null; - /// otherwise, false. - bool empty() const; - - /// Return isNull() - bool operator!() const; - - /// Remove all object members and array elements. - /// \pre type() is arrayValue, objectValue, or nullValue - /// \post type() is unchanged - void clear(); - - /// Resize the array to size elements. - /// New elements are initialized to null. - /// May only be called on nullValue or arrayValue. - /// \pre type() is arrayValue or nullValue - /// \post type() is arrayValue - void resize(ArrayIndex size); - - /// Access an array element (zero based index ). - /// If the array contains less than index element, then null value are - /// inserted - /// in the array so that its size is index+1. - /// (You may need to say 'value[0u]' to get your compiler to distinguish - /// this from the operator[] which takes a string.) - Value& operator[](ArrayIndex index); - - /// Access an array element (zero based index ). - /// If the array contains less than index element, then null value are - /// inserted - /// in the array so that its size is index+1. - /// (You may need to say 'value[0u]' to get your compiler to distinguish - /// this from the operator[] which takes a string.) - Value& operator[](int index); - - /// Access an array element (zero based index ) - /// (You may need to say 'value[0u]' to get your compiler to distinguish - /// this from the operator[] which takes a string.) - const Value& operator[](ArrayIndex index) const; - - /// Access an array element (zero based index ) - /// (You may need to say 'value[0u]' to get your compiler to distinguish - /// this from the operator[] which takes a string.) - const Value& operator[](int index) const; - - /// If the array contains at least index+1 elements, returns the element - /// value, - /// otherwise returns defaultValue. - Value get(ArrayIndex index, const Value& defaultValue) const; - /// Return true if index < size(). - bool isValidIndex(ArrayIndex index) const; - /// \brief Append value to array at the end. - /// - /// Equivalent to jsonvalue[jsonvalue.size()] = value; - Value& append(const Value& value); - -#if JSON_HAS_RVALUE_REFERENCES - Value& append(Value&& value); -#endif - - /// Access an object value by name, create a null member if it does not exist. - /// \note Because of our implementation, keys are limited to 2^30 -1 chars. - /// Exceeding that will cause an exception. - Value& operator[](const char* key); - /// Access an object value by name, returns null if there is no member with - /// that name. - const Value& operator[](const char* key) const; - /// Access an object value by name, create a null member if it does not exist. - /// \param key may contain embedded nulls. - Value& operator[](const JSONCPP_STRING& key); - /// Access an object value by name, returns null if there is no member with - /// that name. - /// \param key may contain embedded nulls. - const Value& operator[](const JSONCPP_STRING& key) const; - /** \brief Access an object value by name, create a null member if it does not - exist. - - * If the object has no entry for that name, then the member name used to store - * the new entry is not duplicated. - * Example of use: - * \code - * Json::Value object; - * static const StaticString code("code"); - * object[code] = 1234; - * \endcode - */ - Value& operator[](const StaticString& key); -#ifdef JSON_USE_CPPTL - /// Access an object value by name, create a null member if it does not exist. - Value& operator[](const CppTL::ConstString& key); - /// Access an object value by name, returns null if there is no member with - /// that name. - const Value& operator[](const CppTL::ConstString& key) const; -#endif - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - Value get(const char* key, const Value& defaultValue) const; - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - /// \note key may contain embedded nulls. - Value get(const char* begin, const char* end, const Value& defaultValue) const; - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - /// \param key may contain embedded nulls. - Value get(const JSONCPP_STRING& key, const Value& defaultValue) const; -#ifdef JSON_USE_CPPTL - /// Return the member named key if it exist, defaultValue otherwise. - /// \note deep copy - Value get(const CppTL::ConstString& key, const Value& defaultValue) const; -#endif - /// Most general and efficient version of isMember()const, get()const, - /// and operator[]const - /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 - Value const* find(char const* begin, char const* end) const; - /// Most general and efficient version of object-mutators. - /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 - /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. - Value const* demand(char const* begin, char const* end); - /// \brief Remove and return the named member. - /// - /// Do nothing if it did not exist. - /// \return the removed Value, or null. - /// \pre type() is objectValue or nullValue - /// \post type() is unchanged - /// \deprecated - JSONCPP_DEPRECATED("") - Value removeMember(const char* key); - /// Same as removeMember(const char*) - /// \param key may contain embedded nulls. - /// \deprecated - JSONCPP_DEPRECATED("") - Value removeMember(const JSONCPP_STRING& key); - /// Same as removeMember(const char* begin, const char* end, Value* removed), - /// but 'key' is null-terminated. - bool removeMember(const char* key, Value* removed); - /** \brief Remove the named map member. - - Update 'removed' iff removed. - \param key may contain embedded nulls. - \return true iff removed (no exceptions) - */ - bool removeMember(JSONCPP_STRING const& key, Value* removed); - /// Same as removeMember(JSONCPP_STRING const& key, Value* removed) - bool removeMember(const char* begin, const char* end, Value* removed); - /** \brief Remove the indexed array element. - - O(n) expensive operations. - Update 'removed' iff removed. - \return true iff removed (no exceptions) - */ - bool removeIndex(ArrayIndex i, Value* removed); - - /// Return true if the object has a member named key. - /// \note 'key' must be null-terminated. - bool isMember(const char* key) const; - /// Return true if the object has a member named key. - /// \param key may contain embedded nulls. - bool isMember(const JSONCPP_STRING& key) const; - /// Same as isMember(JSONCPP_STRING const& key)const - bool isMember(const char* begin, const char* end) const; -#ifdef JSON_USE_CPPTL - /// Return true if the object has a member named key. - bool isMember(const CppTL::ConstString& key) const; -#endif - - /// \brief Return a list of the member names. - /// - /// If null, return an empty list. - /// \pre type() is objectValue or nullValue - /// \post if type() was nullValue, it remains nullValue - Members getMemberNames() const; - - //# ifdef JSON_USE_CPPTL - // EnumMemberNames enumMemberNames() const; - // EnumValues enumValues() const; - //# endif - - /// \deprecated Always pass len. - JSONCPP_DEPRECATED("Use setComment(JSONCPP_STRING const&) instead.") - void setComment(const char* comment, CommentPlacement placement); - /// Comments must be //... or /* ... */ - void setComment(const char* comment, size_t len, CommentPlacement placement); - /// Comments must be //... or /* ... */ - void setComment(const JSONCPP_STRING& comment, CommentPlacement placement); - bool hasComment(CommentPlacement placement) const; - /// Include delimiters and embedded newlines. - JSONCPP_STRING getComment(CommentPlacement placement) const; - - JSONCPP_STRING toStyledString() const; - - const_iterator begin() const; - const_iterator end() const; - - iterator begin(); - iterator end(); - - // Accessors for the [start, limit) range of bytes within the JSON text from - // which this value was parsed, if any. - void setOffsetStart(ptrdiff_t start); - void setOffsetLimit(ptrdiff_t limit); - ptrdiff_t getOffsetStart() const; - ptrdiff_t getOffsetLimit() const; - -private: - void initBasic(ValueType type, bool allocated = false); - - Value& resolveReference(const char* key); - Value& resolveReference(const char* key, const char* end); - - struct CommentInfo { - CommentInfo(); - ~CommentInfo(); - - void setComment(const char* text, size_t len); - - char* comment_; - }; - - // struct MemberNamesTransform - //{ - // typedef const char *result_type; - // const char *operator()( const CZString &name ) const - // { - // return name.c_str(); - // } - //}; - - union ValueHolder { - LargestInt int_; - LargestUInt uint_; - double real_; - bool bool_; - char* string_; // actually ptr to unsigned, followed by str, unless !allocated_ - ObjectValues* map_; - } value_; - ValueType type_ : 8; - unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless. - // If not allocated_, string_ must be null-terminated. - CommentInfo* comments_; - - // [start, limit) byte offsets in the source JSON text from which this Value - // was extracted. - ptrdiff_t start_; - ptrdiff_t limit_; -}; - -/** \brief Experimental and untested: represents an element of the "path" to - * access a node. - */ -class JSON_API PathArgument { -public: - friend class Path; - - PathArgument(); - PathArgument(ArrayIndex index); - PathArgument(const char* key); - PathArgument(const JSONCPP_STRING& key); - -private: - enum Kind { - kindNone = 0, - kindIndex, - kindKey - }; - JSONCPP_STRING key_; - ArrayIndex index_; - Kind kind_; -}; - -/** \brief Experimental and untested: represents a "path" to access a node. - * - * Syntax: - * - "." => root node - * - ".[n]" => elements at index 'n' of root node (an array value) - * - ".name" => member named 'name' of root node (an object value) - * - ".name1.name2.name3" - * - ".[0][1][2].name1[3]" - * - ".%" => member name is provided as parameter - * - ".[%]" => index is provied as parameter - */ -class JSON_API Path { -public: - Path(const JSONCPP_STRING& path, - const PathArgument& a1 = PathArgument(), - const PathArgument& a2 = PathArgument(), - const PathArgument& a3 = PathArgument(), - const PathArgument& a4 = PathArgument(), - const PathArgument& a5 = PathArgument()); - - const Value& resolve(const Value& root) const; - Value resolve(const Value& root, const Value& defaultValue) const; - /// Creates the "path" to access the specified node and returns a reference on - /// the node. - Value& make(Value& root) const; - -private: - typedef std::vector InArgs; - typedef std::vector Args; - - void makePath(const JSONCPP_STRING& path, const InArgs& in); - void addPathInArg(const JSONCPP_STRING& path, - const InArgs& in, - InArgs::const_iterator& itInArg, - PathArgument::Kind kind); - void invalidPath(const JSONCPP_STRING& path, int location); - - Args args_; -}; - -/** \brief base class for Value iterators. - * - */ -class JSON_API ValueIteratorBase { -public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef unsigned int size_t; - typedef int difference_type; - typedef ValueIteratorBase SelfType; - - bool operator==(const SelfType& other) const { return isEqual(other); } - - bool operator!=(const SelfType& other) const { return !isEqual(other); } - - difference_type operator-(const SelfType& other) const { - return other.computeDistance(*this); - } - - /// Return either the index or the member name of the referenced value as a - /// Value. - Value key() const; - - /// Return the index of the referenced Value, or -1 if it is not an arrayValue. - UInt index() const; - - /// Return the member name of the referenced Value, or "" if it is not an - /// objectValue. - /// \note Avoid `c_str()` on result, as embedded zeroes are possible. - JSONCPP_STRING name() const; - - /// Return the member name of the referenced Value. "" if it is not an - /// objectValue. - /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls. - JSONCPP_DEPRECATED("Use `key = name();` instead.") - char const* memberName() const; - /// Return the member name of the referenced Value, or NULL if it is not an - /// objectValue. - /// \note Better version than memberName(). Allows embedded nulls. - char const* memberName(char const** end) const; - -protected: - Value& deref() const; - - void increment(); - - void decrement(); - - difference_type computeDistance(const SelfType& other) const; - - bool isEqual(const SelfType& other) const; - - void copy(const SelfType& other); - -private: - Value::ObjectValues::iterator current_; - // Indicates that iterator is for a null value. - bool isNull_; - -public: - // For some reason, BORLAND needs these at the end, rather - // than earlier. No idea why. - ValueIteratorBase(); - explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); -}; - -/** \brief const iterator for object and array value. - * - */ -class JSON_API ValueConstIterator : public ValueIteratorBase { - friend class Value; - -public: - typedef const Value value_type; - //typedef unsigned int size_t; - //typedef int difference_type; - typedef const Value& reference; - typedef const Value* pointer; - typedef ValueConstIterator SelfType; - - ValueConstIterator(); - ValueConstIterator(ValueIterator const& other); - -private: -/*! \internal Use by Value to create an iterator. - */ - explicit ValueConstIterator(const Value::ObjectValues::iterator& current); -public: - SelfType& operator=(const ValueIteratorBase& other); - - SelfType operator++(int) { - SelfType temp(*this); - ++*this; - return temp; - } - - SelfType operator--(int) { - SelfType temp(*this); - --*this; - return temp; - } - - SelfType& operator--() { - decrement(); - return *this; - } - - SelfType& operator++() { - increment(); - return *this; - } - - reference operator*() const { return deref(); } - - pointer operator->() const { return &deref(); } -}; - -/** \brief Iterator for object and array value. - */ -class JSON_API ValueIterator : public ValueIteratorBase { - friend class Value; - -public: - typedef Value value_type; - typedef unsigned int size_t; - typedef int difference_type; - typedef Value& reference; - typedef Value* pointer; - typedef ValueIterator SelfType; - - ValueIterator(); - explicit ValueIterator(const ValueConstIterator& other); - ValueIterator(const ValueIterator& other); - -private: -/*! \internal Use by Value to create an iterator. - */ - explicit ValueIterator(const Value::ObjectValues::iterator& current); -public: - SelfType& operator=(const SelfType& other); - - SelfType operator++(int) { - SelfType temp(*this); - ++*this; - return temp; - } - - SelfType operator--(int) { - SelfType temp(*this); - --*this; - return temp; - } - - SelfType& operator--() { - decrement(); - return *this; - } - - SelfType& operator++() { - increment(); - return *this; - } - - reference operator*() const { return deref(); } - - pointer operator->() const { return &deref(); } -}; - -} // namespace Json - - -namespace std { -/// Specialize std::swap() for Json::Value. -template<> -inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); } -} - -#pragma pack(pop) - -#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma warning(pop) -#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) - -#endif // CPPTL_JSON_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/value.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/reader.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef CPPTL_JSON_READER_H_INCLUDED -#define CPPTL_JSON_READER_H_INCLUDED - -#if !defined(JSON_IS_AMALGAMATION) -#include "features.h" -#include "value.h" -#endif // if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include -#include -#include - -// Disable warning C4251: : needs to have dll-interface to -// be used by... -#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma warning(push) -#pragma warning(disable : 4251) -#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) - -#pragma pack(push, 8) - -namespace Json { - -/** \brief Unserialize a JSON document into a - *Value. - * - * \deprecated Use CharReader and CharReaderBuilder. - */ -//class JSONCPP_DEPRECATED("Use CharReader and CharReaderBuilder instead") JSON_API Reader { -class JSON_API Reader { -public: - typedef char Char; - typedef const Char* Location; - - /** \brief An error tagged with where in the JSON text it was encountered. - * - * The offsets give the [start, limit) range of bytes within the text. Note - * that this is bytes, not codepoints. - * - */ - struct StructuredError { - ptrdiff_t offset_start; - ptrdiff_t offset_limit; - JSONCPP_STRING message; - }; - - /** \brief Constructs a Reader allowing all features - * for parsing. - */ - Reader(); - - /** \brief Constructs a Reader allowing the specified feature set - * for parsing. - */ - Reader(const Features& features); - - /** \brief Read a Value from a JSON - * document. - * \param document UTF-8 encoded string containing the document to read. - * \param root [out] Contains the root value of the document if it was - * successfully parsed. - * \param collectComments \c true to collect comment and allow writing them - * back during - * serialization, \c false to discard comments. - * This parameter is ignored if - * Features::allowComments_ - * is \c false. - * \return \c true if the document was successfully parsed, \c false if an - * error occurred. - */ - bool - parse(const std::string& document, Value& root, bool collectComments = true); - - /** \brief Read a Value from a JSON - document. - * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the - document to read. - * \param endDoc Pointer on the end of the UTF-8 encoded string of the - document to read. - * Must be >= beginDoc. - * \param root [out] Contains the root value of the document if it was - * successfully parsed. - * \param collectComments \c true to collect comment and allow writing them - back during - * serialization, \c false to discard comments. - * This parameter is ignored if - Features::allowComments_ - * is \c false. - * \return \c true if the document was successfully parsed, \c false if an - error occurred. - */ - bool parse(const char* beginDoc, - const char* endDoc, - Value& root, - bool collectComments = true); - - /// \brief Parse from input stream. - /// \see Json::operator>>(std::istream&, Json::Value&). - bool parse(JSONCPP_ISTREAM& is, Value& root, bool collectComments = true); - - /** \brief Returns a user friendly string that list errors in the parsed - * document. - * \return Formatted error message with the list of errors with their location - * in - * the parsed document. An empty string is returned if no error - * occurred - * during parsing. - * \deprecated Use getFormattedErrorMessages() instead (typo fix). - */ - JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") - JSONCPP_STRING getFormatedErrorMessages() const; - - /** \brief Returns a user friendly string that list errors in the parsed - * document. - * \return Formatted error message with the list of errors with their location - * in - * the parsed document. An empty string is returned if no error - * occurred - * during parsing. - */ - JSONCPP_STRING getFormattedErrorMessages() const; - - /** \brief Returns a vector of structured erros encounted while parsing. - * \return A (possibly empty) vector of StructuredError objects. Currently - * only one error can be returned, but the caller should tolerate - * multiple - * errors. This can occur if the parser recovers from a non-fatal - * parse error and then encounters additional errors. - */ - std::vector getStructuredErrors() const; - - /** \brief Add a semantic error message. - * \param value JSON Value location associated with the error - * \param message The error message. - * \return \c true if the error was successfully added, \c false if the - * Value offset exceeds the document size. - */ - bool pushError(const Value& value, const JSONCPP_STRING& message); - - /** \brief Add a semantic error message with extra context. - * \param value JSON Value location associated with the error - * \param message The error message. - * \param extra Additional JSON Value location to contextualize the error - * \return \c true if the error was successfully added, \c false if either - * Value offset exceeds the document size. - */ - bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra); - - /** \brief Return whether there are any errors. - * \return \c true if there are no errors to report \c false if - * errors have occurred. - */ - bool good() const; - -private: - enum TokenType { - tokenEndOfStream = 0, - tokenObjectBegin, - tokenObjectEnd, - tokenArrayBegin, - tokenArrayEnd, - tokenString, - tokenNumber, - tokenTrue, - tokenFalse, - tokenNull, - tokenArraySeparator, - tokenMemberSeparator, - tokenComment, - tokenError - }; - - class Token { - public: - TokenType type_; - Location start_; - Location end_; - }; - - class ErrorInfo { - public: - Token token_; - JSONCPP_STRING message_; - Location extra_; - }; - - typedef std::deque Errors; - - bool readToken(Token& token); - void skipSpaces(); - bool match(Location pattern, int patternLength); - bool readComment(); - bool readCStyleComment(); - bool readCppStyleComment(); - bool readString(); - void readNumber(); - bool readValue(); - bool readObject(Token& token); - bool readArray(Token& token); - bool decodeNumber(Token& token); - bool decodeNumber(Token& token, Value& decoded); - bool decodeString(Token& token); - bool decodeString(Token& token, JSONCPP_STRING& decoded); - bool decodeDouble(Token& token); - bool decodeDouble(Token& token, Value& decoded); - bool decodeUnicodeCodePoint(Token& token, - Location& current, - Location end, - unsigned int& unicode); - bool decodeUnicodeEscapeSequence(Token& token, - Location& current, - Location end, - unsigned int& unicode); - bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0); - bool recoverFromError(TokenType skipUntilToken); - bool addErrorAndRecover(const JSONCPP_STRING& message, - Token& token, - TokenType skipUntilToken); - void skipUntilSpace(); - Value& currentValue(); - Char getNextChar(); - void - getLocationLineAndColumn(Location location, int& line, int& column) const; - JSONCPP_STRING getLocationLineAndColumn(Location location) const; - void addComment(Location begin, Location end, CommentPlacement placement); - void skipCommentTokens(Token& token); - - static bool containsNewLine(Location begin, Location end); - static JSONCPP_STRING normalizeEOL(Location begin, Location end); - - typedef std::stack Nodes; - Nodes nodes_; - Errors errors_; - JSONCPP_STRING document_; - Location begin_; - Location end_; - Location current_; - Location lastValueEnd_; - Value* lastValue_; - JSONCPP_STRING commentsBefore_; - Features features_; - bool collectComments_; -}; // Reader - -/** Interface for reading JSON from a char array. - */ -class JSON_API CharReader { -public: - virtual ~CharReader() {} - /** \brief Read a Value from a JSON - document. - * The document must be a UTF-8 encoded string containing the document to read. - * - * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the - document to read. - * \param endDoc Pointer on the end of the UTF-8 encoded string of the - document to read. - * Must be >= beginDoc. - * \param root [out] Contains the root value of the document if it was - * successfully parsed. - * \param errs [out] Formatted error messages (if not NULL) - * a user friendly string that lists errors in the parsed - * document. - * \return \c true if the document was successfully parsed, \c false if an - error occurred. - */ - virtual bool parse( - char const* beginDoc, char const* endDoc, - Value* root, JSONCPP_STRING* errs) = 0; - - class JSON_API Factory { - public: - virtual ~Factory() {} - /** \brief Allocate a CharReader via operator new(). - * \throw std::exception if something goes wrong (e.g. invalid settings) - */ - virtual CharReader* newCharReader() const = 0; - }; // Factory -}; // CharReader - -/** \brief Build a CharReader implementation. - -Usage: -\code - using namespace Json; - CharReaderBuilder builder; - builder["collectComments"] = false; - Value value; - JSONCPP_STRING errs; - bool ok = parseFromStream(builder, std::cin, &value, &errs); -\endcode -*/ -class JSON_API CharReaderBuilder : public CharReader::Factory { -public: - // Note: We use a Json::Value so that we can add data-members to this class - // without a major version bump. - /** Configuration of this builder. - These are case-sensitive. - Available settings (case-sensitive): - - `"collectComments": false or true` - - true to collect comment and allow writing them - back during serialization, false to discard comments. - This parameter is ignored if allowComments is false. - - `"allowComments": false or true` - - true if comments are allowed. - - `"strictRoot": false or true` - - true if root must be either an array or an object value - - `"allowDroppedNullPlaceholders": false or true` - - true if dropped null placeholders are allowed. (See StreamWriterBuilder.) - - `"allowNumericKeys": false or true` - - true if numeric object keys are allowed. - - `"allowSingleQuotes": false or true` - - true if '' are allowed for strings (both keys and values) - - `"stackLimit": integer` - - Exceeding stackLimit (recursive depth of `readValue()`) will - cause an exception. - - This is a security issue (seg-faults caused by deeply nested JSON), - so the default is low. - - `"failIfExtra": false or true` - - If true, `parse()` returns false when extra non-whitespace trails - the JSON value in the input string. - - `"rejectDupKeys": false or true` - - If true, `parse()` returns false when a key is duplicated within an object. - - `"allowSpecialFloats": false or true` - - If true, special float values (NaNs and infinities) are allowed - and their values are lossfree restorable. - - You can examine 'settings_` yourself - to see the defaults. You can also write and read them just like any - JSON Value. - \sa setDefaults() - */ - Json::Value settings_; - - CharReaderBuilder(); - ~CharReaderBuilder() JSONCPP_OVERRIDE; - - CharReader* newCharReader() const JSONCPP_OVERRIDE; - - /** \return true if 'settings' are legal and consistent; - * otherwise, indicate bad settings via 'invalid'. - */ - bool validate(Json::Value* invalid) const; - - /** A simple way to update a specific setting. - */ - Value& operator[](JSONCPP_STRING key); - - /** Called by ctor, but you can use this to reset settings_. - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults - */ - static void setDefaults(Json::Value* settings); - /** Same as old Features::strictMode(). - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode - */ - static void strictMode(Json::Value* settings); -}; - -/** Consume entire stream and use its begin/end. - * Someday we might have a real StreamReader, but for now this - * is convenient. - */ -bool JSON_API parseFromStream( - CharReader::Factory const&, - JSONCPP_ISTREAM&, - Value* root, std::string* errs); - -/** \brief Read from 'sin' into 'root'. - - Always keep comments from the input JSON. - - This can be used to read a file into a particular sub-object. - For example: - \code - Json::Value root; - cin >> root["dir"]["file"]; - cout << root; - \endcode - Result: - \verbatim - { - "dir": { - "file": { - // The input stream JSON would be nested here. - } - } - } - \endverbatim - \throw std::exception on parse error. - \see Json::operator<<() -*/ -JSON_API JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM&, Value&); - -} // namespace Json - -#pragma pack(pop) - -#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma warning(pop) -#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) - -#endif // CPPTL_JSON_READER_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/reader.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/writer.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef JSON_WRITER_H_INCLUDED -#define JSON_WRITER_H_INCLUDED - -#if !defined(JSON_IS_AMALGAMATION) -#include "value.h" -#endif // if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include - -// Disable warning C4251: : needs to have dll-interface to -// be used by... -#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) && defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable : 4251) -#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) - -#pragma pack(push, 8) - -namespace Json { - -class Value; - -/** - -Usage: -\code - using namespace Json; - void writeToStdout(StreamWriter::Factory const& factory, Value const& value) { - std::unique_ptr const writer( - factory.newStreamWriter()); - writer->write(value, &std::cout); - std::cout << std::endl; // add lf and flush - } -\endcode -*/ -class JSON_API StreamWriter { -protected: - JSONCPP_OSTREAM* sout_; // not owned; will not delete -public: - StreamWriter(); - virtual ~StreamWriter(); - /** Write Value into document as configured in sub-class. - Do not take ownership of sout, but maintain a reference during function. - \pre sout != NULL - \return zero on success (For now, we always return zero, so check the stream instead.) - \throw std::exception possibly, depending on configuration - */ - virtual int write(Value const& root, JSONCPP_OSTREAM* sout) = 0; - - /** \brief A simple abstract factory. - */ - class JSON_API Factory { - public: - virtual ~Factory(); - /** \brief Allocate a CharReader via operator new(). - * \throw std::exception if something goes wrong (e.g. invalid settings) - */ - virtual StreamWriter* newStreamWriter() const = 0; - }; // Factory -}; // StreamWriter - -/** \brief Write into stringstream, then return string, for convenience. - * A StreamWriter will be created from the factory, used, and then deleted. - */ -JSONCPP_STRING JSON_API writeString(StreamWriter::Factory const& factory, Value const& root); - - -/** \brief Build a StreamWriter implementation. - -Usage: -\code - using namespace Json; - Value value = ...; - StreamWriterBuilder builder; - builder["commentStyle"] = "None"; - builder["indentation"] = " "; // or whatever you like - std::unique_ptr writer( - builder.newStreamWriter()); - writer->write(value, &std::cout); - std::cout << std::endl; // add lf and flush -\endcode -*/ -class JSON_API StreamWriterBuilder : public StreamWriter::Factory { -public: - // Note: We use a Json::Value so that we can add data-members to this class - // without a major version bump. - /** Configuration of this builder. - Available settings (case-sensitive): - - "commentStyle": "None" or "All" - - "indentation": "" - - "enableYAMLCompatibility": false or true - - slightly change the whitespace around colons - - "dropNullPlaceholders": false or true - - Drop the "null" string from the writer's output for nullValues. - Strictly speaking, this is not valid JSON. But when the output is being - fed to a browser's Javascript, it makes for smaller output and the - browser can handle the output just fine. - - "useSpecialFloats": false or true - - If true, outputs non-finite floating point values in the following way: - NaN values as "NaN", positive infinity as "Infinity", and negative infinity - as "-Infinity". - - You can examine 'settings_` yourself - to see the defaults. You can also write and read them just like any - JSON Value. - \sa setDefaults() - */ - Json::Value settings_; - - StreamWriterBuilder(); - ~StreamWriterBuilder() JSONCPP_OVERRIDE; - - /** - * \throw std::exception if something goes wrong (e.g. invalid settings) - */ - StreamWriter* newStreamWriter() const JSONCPP_OVERRIDE; - - /** \return true if 'settings' are legal and consistent; - * otherwise, indicate bad settings via 'invalid'. - */ - bool validate(Json::Value* invalid) const; - /** A simple way to update a specific setting. - */ - Value& operator[](JSONCPP_STRING key); - - /** Called by ctor, but you can use this to reset settings_. - * \pre 'settings' != NULL (but Json::null is fine) - * \remark Defaults: - * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults - */ - static void setDefaults(Json::Value* settings); -}; - -/** \brief Abstract class for writers. - * \deprecated Use StreamWriter. (And really, this is an implementation detail.) - */ -class JSONCPP_DEPRECATED("Use StreamWriter instead") JSON_API Writer { -public: - virtual ~Writer(); - - virtual JSONCPP_STRING write(const Value& root) = 0; -}; - -/** \brief Outputs a Value in JSON format - *without formatting (not human friendly). - * - * The JSON document is written in a single line. It is not intended for 'human' - *consumption, - * but may be usefull to support feature such as RPC where bandwith is limited. - * \sa Reader, Value - * \deprecated Use StreamWriterBuilder. - */ -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4996) // Deriving from deprecated class -#endif -//class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API FastWriter : public Writer { -class JSON_API FastWriter : public Writer { - -public: - FastWriter(); - ~FastWriter() JSONCPP_OVERRIDE {} - - void enableYAMLCompatibility(); - - /** \brief Drop the "null" string from the writer's output for nullValues. - * Strictly speaking, this is not valid JSON. But when the output is being - * fed to a browser's Javascript, it makes for smaller output and the - * browser can handle the output just fine. - */ - void dropNullPlaceholders(); - - void omitEndingLineFeed(); - -public: // overridden from Writer - JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE; - -private: - void writeValue(const Value& value); - - JSONCPP_STRING document_; - bool yamlCompatiblityEnabled_; - bool dropNullPlaceholders_; - bool omitEndingLineFeed_; -}; -#if defined(_MSC_VER) -#pragma warning(pop) -#endif - -/** \brief Writes a Value in JSON format in a - *human friendly way. - * - * The rules for line break and indent are as follow: - * - Object value: - * - if empty then print {} without indent and line break - * - if not empty the print '{', line break & indent, print one value per - *line - * and then unindent and line break and print '}'. - * - Array value: - * - if empty then print [] without indent and line break - * - if the array contains no object value, empty array or some other value - *types, - * and all the values fit on one lines, then print the array on a single - *line. - * - otherwise, it the values do not fit on one line, or the array contains - * object or non empty array, then print one value per line. - * - * If the Value have comments then they are outputed according to their - *#CommentPlacement. - * - * \sa Reader, Value, Value::setComment() - * \deprecated Use StreamWriterBuilder. - */ -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4996) // Deriving from deprecated class -#endif -class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API StyledWriter : public Writer { -public: - StyledWriter(); - ~StyledWriter() JSONCPP_OVERRIDE {} - -public: // overridden from Writer - /** \brief Serialize a Value in JSON format. - * \param root Value to serialize. - * \return String containing the JSON document that represents the root value. - */ - JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE; - -private: - void writeValue(const Value& value); - void writeArrayValue(const Value& value); - bool isMultineArray(const Value& value); - void pushValue(const JSONCPP_STRING& value); - void writeIndent(); - void writeWithIndent(const JSONCPP_STRING& value); - void indent(); - void unindent(); - void writeCommentBeforeValue(const Value& root); - void writeCommentAfterValueOnSameLine(const Value& root); - bool hasCommentForValue(const Value& value); - static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text); - - typedef std::vector ChildValues; - - ChildValues childValues_; - JSONCPP_STRING document_; - JSONCPP_STRING indentString_; - unsigned int rightMargin_; - unsigned int indentSize_; - bool addChildValues_; -}; -#if defined(_MSC_VER) -#pragma warning(pop) -#endif - -/** \brief Writes a Value in JSON format in a - human friendly way, - to a stream rather than to a string. - * - * The rules for line break and indent are as follow: - * - Object value: - * - if empty then print {} without indent and line break - * - if not empty the print '{', line break & indent, print one value per - line - * and then unindent and line break and print '}'. - * - Array value: - * - if empty then print [] without indent and line break - * - if the array contains no object value, empty array or some other value - types, - * and all the values fit on one lines, then print the array on a single - line. - * - otherwise, it the values do not fit on one line, or the array contains - * object or non empty array, then print one value per line. - * - * If the Value have comments then they are outputed according to their - #CommentPlacement. - * - * \sa Reader, Value, Value::setComment() - * \deprecated Use StreamWriterBuilder. - */ -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4996) // Deriving from deprecated class -#endif -class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API StyledStreamWriter { -public: -/** - * \param indentation Each level will be indented by this amount extra. - */ - StyledStreamWriter(JSONCPP_STRING indentation = "\t"); - ~StyledStreamWriter() {} - -public: - /** \brief Serialize a Value in JSON format. - * \param out Stream to write to. (Can be ostringstream, e.g.) - * \param root Value to serialize. - * \note There is no point in deriving from Writer, since write() should not - * return a value. - */ - void write(JSONCPP_OSTREAM& out, const Value& root); - -private: - void writeValue(const Value& value); - void writeArrayValue(const Value& value); - bool isMultineArray(const Value& value); - void pushValue(const JSONCPP_STRING& value); - void writeIndent(); - void writeWithIndent(const JSONCPP_STRING& value); - void indent(); - void unindent(); - void writeCommentBeforeValue(const Value& root); - void writeCommentAfterValueOnSameLine(const Value& root); - bool hasCommentForValue(const Value& value); - static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text); - - typedef std::vector ChildValues; - - ChildValues childValues_; - JSONCPP_OSTREAM* document_; - JSONCPP_STRING indentString_; - unsigned int rightMargin_; - JSONCPP_STRING indentation_; - bool addChildValues_ : 1; - bool indented_ : 1; -}; -#if defined(_MSC_VER) -#pragma warning(pop) -#endif - -#if defined(JSON_HAS_INT64) -JSONCPP_STRING JSON_API valueToString(Int value); -JSONCPP_STRING JSON_API valueToString(UInt value); -#endif // if defined(JSON_HAS_INT64) -JSONCPP_STRING JSON_API valueToString(LargestInt value); -JSONCPP_STRING JSON_API valueToString(LargestUInt value); -JSONCPP_STRING JSON_API valueToString(double value); -JSONCPP_STRING JSON_API valueToString(bool value); -JSONCPP_STRING JSON_API valueToQuotedString(const char* value); - -/// \brief Output using the StyledStreamWriter. -/// \see Json::operator>>() -JSON_API JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM&, const Value& root); - -} // namespace Json - -#pragma pack(pop) - -#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma warning(pop) -#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) - -#endif // JSON_WRITER_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/writer.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: include/json/assertions.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED -#define CPPTL_JSON_ASSERTIONS_H_INCLUDED - -#include -#include - -#if !defined(JSON_IS_AMALGAMATION) -#include "config.h" -#endif // if !defined(JSON_IS_AMALGAMATION) - -/** It should not be possible for a maliciously designed file to - * cause an abort() or seg-fault, so these macros are used only - * for pre-condition violations and internal logic errors. - */ -#if JSON_USE_EXCEPTION - -// @todo <= add detail about condition in exception -# define JSON_ASSERT(condition) \ - {if (!(condition)) {Json::throwLogicError( "assert json failed" );}} - -# define JSON_FAIL_MESSAGE(message) \ - { \ - JSONCPP_OSTRINGSTREAM oss; oss << message; \ - Json::throwLogicError(oss.str()); \ - abort(); \ - } - -#else // JSON_USE_EXCEPTION - -# define JSON_ASSERT(condition) assert(condition) - -// The call to assert() will show the failure message in debug builds. In -// release builds we abort, for a core-dump or debugger. -# define JSON_FAIL_MESSAGE(message) \ - { \ - JSONCPP_OSTRINGSTREAM oss; oss << message; \ - assert(false && oss.str().c_str()); \ - abort(); \ - } - - -#endif - -#define JSON_ASSERT_MESSAGE(condition, message) \ - if (!(condition)) { \ - JSON_FAIL_MESSAGE(message); \ - } - -#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: include/json/assertions.h -// ////////////////////////////////////////////////////////////////////// - - - - - -#endif //ifndef JSON_AMALGATED_H_INCLUDED diff --git a/lib/jsoncpp-1.8.3/src/jsoncpp.cpp b/lib/jsoncpp-1.8.3/src/jsoncpp.cpp deleted file mode 100644 index 8314eab..0000000 --- a/lib/jsoncpp-1.8.3/src/jsoncpp.cpp +++ /dev/null @@ -1,5397 +0,0 @@ -/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/). -/// It is intended to be used with #include "json/json.h" - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: LICENSE -// ////////////////////////////////////////////////////////////////////// - -/* -The JsonCpp library's source code, including accompanying documentation, -tests and demonstration applications, are licensed under the following -conditions... - -Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all -jurisdictions which recognize such a disclaimer. In such jurisdictions, -this software is released into the Public Domain. - -In jurisdictions which do not recognize Public Domain property (e.g. Germany as of -2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and -The JsonCpp Authors, and is released under the terms of the MIT License (see below). - -In jurisdictions which recognize Public Domain property, the user of this -software may choose to accept it either as 1) Public Domain, 2) under the -conditions of the MIT License (see below), or 3) under the terms of dual -Public Domain/MIT License conditions described here, as they choose. - -The MIT License is about as close to Public Domain as a license can get, and is -described in clear, concise terms at: - - http://en.wikipedia.org/wiki/MIT_License - -The full text of the MIT License follows: - -======================================================================== -Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors - -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. -======================================================================== -(END LICENSE TEXT) - -The MIT license is compatible with both the GPL and commercial -software, affording one all of the rights of Public Domain with the -minor nuisance of being required to keep the above copyright notice -and license text in the source code. Note also that by accepting the -Public Domain "license" you can re-license your copy using whatever -license you like. - -*/ - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: LICENSE -// ////////////////////////////////////////////////////////////////////// - - - - - - -#include "json/json.h" - -#ifndef JSON_IS_AMALGAMATION -#error "Compile with -I PATH_TO_JSON_DIRECTORY" -#endif - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: src/lib_json/json_tool.h -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED -#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED - - -// Also support old flag NO_LOCALE_SUPPORT -#ifdef NO_LOCALE_SUPPORT -#define JSONCPP_NO_LOCALE_SUPPORT -#endif - -#ifndef JSONCPP_NO_LOCALE_SUPPORT -#include -#endif - -/* This header provides common string manipulation support, such as UTF-8, - * portable conversion from/to string... - * - * It is an internal header that must not be exposed. - */ - -namespace Json { -static char getDecimalPoint() { -#ifdef JSONCPP_NO_LOCALE_SUPPORT - return '\0'; -#else - struct lconv* lc = localeconv(); - return lc ? *(lc->decimal_point) : '\0'; -#endif -} - -/// Converts a unicode code-point to UTF-8. -static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) { - JSONCPP_STRING result; - - // based on description from http://en.wikipedia.org/wiki/UTF-8 - - if (cp <= 0x7f) { - result.resize(1); - result[0] = static_cast(cp); - } else if (cp <= 0x7FF) { - result.resize(2); - result[1] = static_cast(0x80 | (0x3f & cp)); - result[0] = static_cast(0xC0 | (0x1f & (cp >> 6))); - } else if (cp <= 0xFFFF) { - result.resize(3); - result[2] = static_cast(0x80 | (0x3f & cp)); - result[1] = static_cast(0x80 | (0x3f & (cp >> 6))); - result[0] = static_cast(0xE0 | (0xf & (cp >> 12))); - } else if (cp <= 0x10FFFF) { - result.resize(4); - result[3] = static_cast(0x80 | (0x3f & cp)); - result[2] = static_cast(0x80 | (0x3f & (cp >> 6))); - result[1] = static_cast(0x80 | (0x3f & (cp >> 12))); - result[0] = static_cast(0xF0 | (0x7 & (cp >> 18))); - } - - return result; -} - -/// Returns true if ch is a control character (in range [1,31]). -static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; } - -enum { - /// Constant that specify the size of the buffer that must be passed to - /// uintToString. - uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 -}; - -// Defines a char buffer for use with uintToString(). -typedef char UIntToStringBuffer[uintToStringBufferSize]; - -/** Converts an unsigned integer to string. - * @param value Unsigned interger to convert to string - * @param current Input/Output string buffer. - * Must have at least uintToStringBufferSize chars free. - */ -static inline void uintToString(LargestUInt value, char*& current) { - *--current = 0; - do { - *--current = static_cast(value % 10U + static_cast('0')); - value /= 10; - } while (value != 0); -} - -/** Change ',' to '.' everywhere in buffer. - * - * We had a sophisticated way, but it did not work in WinCE. - * @see https://github.com/open-source-parsers/jsoncpp/pull/9 - */ -static inline void fixNumericLocale(char* begin, char* end) { - while (begin < end) { - if (*begin == ',') { - *begin = '.'; - } - ++begin; - } -} - -static inline void fixNumericLocaleInput(char* begin, char* end) { - char decimalPoint = getDecimalPoint(); - if (decimalPoint != '\0' && decimalPoint != '.') { - while (begin < end) { - if (*begin == '.') { - *begin = decimalPoint; - } - ++begin; - } - } -} - -} // namespace Json { - -#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: src/lib_json/json_tool.h -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: src/lib_json/json_reader.cpp -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2011 Baptiste Lepilleur and The JsonCpp Authors -// Copyright (C) 2016 InfoTeCS JSC. All rights reserved. -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include -#include "json_tool.h" -#endif // if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(_MSC_VER) -#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above -#define snprintf sprintf_s -#elif _MSC_VER >= 1900 // VC++ 14.0 and above -#define snprintf std::snprintf -#else -#define snprintf _snprintf -#endif -#elif defined(__ANDROID__) || defined(__QNXNTO__) -#define snprintf snprintf -#elif __cplusplus >= 201103L -#if !defined(__MINGW32__) && !defined(__CYGWIN__) -#define snprintf std::snprintf -#endif -#endif - -#if defined(__QNXNTO__) -#define sscanf std::sscanf -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 -// Disable warning about strdup being deprecated. -#pragma warning(disable : 4996) -#endif - -// Define JSONCPP_DEPRECATED_STACK_LIMIT as an appropriate integer at compile time to change the stack limit -#if !defined(JSONCPP_DEPRECATED_STACK_LIMIT) -#define JSONCPP_DEPRECATED_STACK_LIMIT 1000 -#endif - -static size_t const stackLimit_g = JSONCPP_DEPRECATED_STACK_LIMIT; // see readValue() - -namespace Json { - -#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) -typedef std::unique_ptr CharReaderPtr; -#else -typedef std::auto_ptr CharReaderPtr; -#endif - -// Implementation of class Features -// //////////////////////////////// - -Features::Features() - : allowComments_(true), strictRoot_(false), - allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {} - -Features Features::all() { return Features(); } - -Features Features::strictMode() { - Features features; - features.allowComments_ = false; - features.strictRoot_ = true; - features.allowDroppedNullPlaceholders_ = false; - features.allowNumericKeys_ = false; - return features; -} - -// Implementation of class Reader -// //////////////////////////////// - -bool Reader::containsNewLine(Reader::Location begin, Reader::Location end) { - for (; begin < end; ++begin) - if (*begin == '\n' || *begin == '\r') - return true; - return false; -} - -// Class Reader -// ////////////////////////////////////////////////////////////////// - -Reader::Reader() - : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), - lastValue_(), commentsBefore_(), features_(Features::all()), - collectComments_() {} - -Reader::Reader(const Features& features) - : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), - lastValue_(), commentsBefore_(), features_(features), collectComments_() { -} - -bool -Reader::parse(const std::string& document, Value& root, bool collectComments) { - document_.assign(document.begin(), document.end()); - const char* begin = document_.c_str(); - const char* end = begin + document_.length(); - return parse(begin, end, root, collectComments); -} - -bool Reader::parse(std::istream& sin, Value& root, bool collectComments) { - // std::istream_iterator begin(sin); - // std::istream_iterator end; - // Those would allow streamed input from a file, if parse() were a - // template function. - - // Since JSONCPP_STRING is reference-counted, this at least does not - // create an extra copy. - JSONCPP_STRING doc; - std::getline(sin, doc, (char)EOF); - return parse(doc.data(), doc.data() + doc.size(), root, collectComments); -} - -bool Reader::parse(const char* beginDoc, - const char* endDoc, - Value& root, - bool collectComments) { - if (!features_.allowComments_) { - collectComments = false; - } - - begin_ = beginDoc; - end_ = endDoc; - collectComments_ = collectComments; - current_ = begin_; - lastValueEnd_ = 0; - lastValue_ = 0; - commentsBefore_.clear(); - errors_.clear(); - while (!nodes_.empty()) - nodes_.pop(); - nodes_.push(&root); - - bool successful = readValue(); - Token token; - skipCommentTokens(token); - if (collectComments_ && !commentsBefore_.empty()) - root.setComment(commentsBefore_, commentAfter); - if (features_.strictRoot_) { - if (!root.isArray() && !root.isObject()) { - // Set error location to start of doc, ideally should be first token found - // in doc - token.type_ = tokenError; - token.start_ = beginDoc; - token.end_ = endDoc; - addError( - "A valid JSON document must be either an array or an object value.", - token); - return false; - } - } - return successful; -} - -bool Reader::readValue() { - // readValue() may call itself only if it calls readObject() or ReadArray(). - // These methods execute nodes_.push() just before and nodes_.pop)() just after calling readValue(). - // parse() executes one nodes_.push(), so > instead of >=. - if (nodes_.size() > stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue()."); - - Token token; - skipCommentTokens(token); - bool successful = true; - - if (collectComments_ && !commentsBefore_.empty()) { - currentValue().setComment(commentsBefore_, commentBefore); - commentsBefore_.clear(); - } - - switch (token.type_) { - case tokenObjectBegin: - successful = readObject(token); - currentValue().setOffsetLimit(current_ - begin_); - break; - case tokenArrayBegin: - successful = readArray(token); - currentValue().setOffsetLimit(current_ - begin_); - break; - case tokenNumber: - successful = decodeNumber(token); - break; - case tokenString: - successful = decodeString(token); - break; - case tokenTrue: - { - Value v(true); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenFalse: - { - Value v(false); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenNull: - { - Value v; - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenArraySeparator: - case tokenObjectEnd: - case tokenArrayEnd: - if (features_.allowDroppedNullPlaceholders_) { - // "Un-read" the current token and mark the current value as a null - // token. - current_--; - Value v; - currentValue().swapPayload(v); - currentValue().setOffsetStart(current_ - begin_ - 1); - currentValue().setOffsetLimit(current_ - begin_); - break; - } // Else, fall through... - default: - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return addError("Syntax error: value, object or array expected.", token); - } - - if (collectComments_) { - lastValueEnd_ = current_; - lastValue_ = ¤tValue(); - } - - return successful; -} - -void Reader::skipCommentTokens(Token& token) { - if (features_.allowComments_) { - do { - readToken(token); - } while (token.type_ == tokenComment); - } else { - readToken(token); - } -} - -bool Reader::readToken(Token& token) { - skipSpaces(); - token.start_ = current_; - Char c = getNextChar(); - bool ok = true; - switch (c) { - case '{': - token.type_ = tokenObjectBegin; - break; - case '}': - token.type_ = tokenObjectEnd; - break; - case '[': - token.type_ = tokenArrayBegin; - break; - case ']': - token.type_ = tokenArrayEnd; - break; - case '"': - token.type_ = tokenString; - ok = readString(); - break; - case '/': - token.type_ = tokenComment; - ok = readComment(); - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - token.type_ = tokenNumber; - readNumber(); - break; - case 't': - token.type_ = tokenTrue; - ok = match("rue", 3); - break; - case 'f': - token.type_ = tokenFalse; - ok = match("alse", 4); - break; - case 'n': - token.type_ = tokenNull; - ok = match("ull", 3); - break; - case ',': - token.type_ = tokenArraySeparator; - break; - case ':': - token.type_ = tokenMemberSeparator; - break; - case 0: - token.type_ = tokenEndOfStream; - break; - default: - ok = false; - break; - } - if (!ok) - token.type_ = tokenError; - token.end_ = current_; - return true; -} - -void Reader::skipSpaces() { - while (current_ != end_) { - Char c = *current_; - if (c == ' ' || c == '\t' || c == '\r' || c == '\n') - ++current_; - else - break; - } -} - -bool Reader::match(Location pattern, int patternLength) { - if (end_ - current_ < patternLength) - return false; - int index = patternLength; - while (index--) - if (current_[index] != pattern[index]) - return false; - current_ += patternLength; - return true; -} - -bool Reader::readComment() { - Location commentBegin = current_ - 1; - Char c = getNextChar(); - bool successful = false; - if (c == '*') - successful = readCStyleComment(); - else if (c == '/') - successful = readCppStyleComment(); - if (!successful) - return false; - - if (collectComments_) { - CommentPlacement placement = commentBefore; - if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { - if (c != '*' || !containsNewLine(commentBegin, current_)) - placement = commentAfterOnSameLine; - } - - addComment(commentBegin, current_, placement); - } - return true; -} - -JSONCPP_STRING Reader::normalizeEOL(Reader::Location begin, Reader::Location end) { - JSONCPP_STRING normalized; - normalized.reserve(static_cast(end - begin)); - Reader::Location current = begin; - while (current != end) { - char c = *current++; - if (c == '\r') { - if (current != end && *current == '\n') - // convert dos EOL - ++current; - // convert Mac EOL - normalized += '\n'; - } else { - normalized += c; - } - } - return normalized; -} - -void -Reader::addComment(Location begin, Location end, CommentPlacement placement) { - assert(collectComments_); - const JSONCPP_STRING& normalized = normalizeEOL(begin, end); - if (placement == commentAfterOnSameLine) { - assert(lastValue_ != 0); - lastValue_->setComment(normalized, placement); - } else { - commentsBefore_ += normalized; - } -} - -bool Reader::readCStyleComment() { - while ((current_ + 1) < end_) { - Char c = getNextChar(); - if (c == '*' && *current_ == '/') - break; - } - return getNextChar() == '/'; -} - -bool Reader::readCppStyleComment() { - while (current_ != end_) { - Char c = getNextChar(); - if (c == '\n') - break; - if (c == '\r') { - // Consume DOS EOL. It will be normalized in addComment. - if (current_ != end_ && *current_ == '\n') - getNextChar(); - // Break on Moc OS 9 EOL. - break; - } - } - return true; -} - -void Reader::readNumber() { - const char *p = current_; - char c = '0'; // stopgap for already consumed character - // integral part - while (c >= '0' && c <= '9') - c = (current_ = p) < end_ ? *p++ : '\0'; - // fractional part - if (c == '.') { - c = (current_ = p) < end_ ? *p++ : '\0'; - while (c >= '0' && c <= '9') - c = (current_ = p) < end_ ? *p++ : '\0'; - } - // exponential part - if (c == 'e' || c == 'E') { - c = (current_ = p) < end_ ? *p++ : '\0'; - if (c == '+' || c == '-') - c = (current_ = p) < end_ ? *p++ : '\0'; - while (c >= '0' && c <= '9') - c = (current_ = p) < end_ ? *p++ : '\0'; - } -} - -bool Reader::readString() { - Char c = '\0'; - while (current_ != end_) { - c = getNextChar(); - if (c == '\\') - getNextChar(); - else if (c == '"') - break; - } - return c == '"'; -} - -bool Reader::readObject(Token& tokenStart) { - Token tokenName; - JSONCPP_STRING name; - Value init(objectValue); - currentValue().swapPayload(init); - currentValue().setOffsetStart(tokenStart.start_ - begin_); - while (readToken(tokenName)) { - bool initialTokenOk = true; - while (tokenName.type_ == tokenComment && initialTokenOk) - initialTokenOk = readToken(tokenName); - if (!initialTokenOk) - break; - if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object - return true; - name.clear(); - if (tokenName.type_ == tokenString) { - if (!decodeString(tokenName, name)) - return recoverFromError(tokenObjectEnd); - } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { - Value numberName; - if (!decodeNumber(tokenName, numberName)) - return recoverFromError(tokenObjectEnd); - name = JSONCPP_STRING(numberName.asCString()); - } else { - break; - } - - Token colon; - if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { - return addErrorAndRecover( - "Missing ':' after object member name", colon, tokenObjectEnd); - } - Value& value = currentValue()[name]; - nodes_.push(&value); - bool ok = readValue(); - nodes_.pop(); - if (!ok) // error already set - return recoverFromError(tokenObjectEnd); - - Token comma; - if (!readToken(comma) || - (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && - comma.type_ != tokenComment)) { - return addErrorAndRecover( - "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); - } - bool finalizeTokenOk = true; - while (comma.type_ == tokenComment && finalizeTokenOk) - finalizeTokenOk = readToken(comma); - if (comma.type_ == tokenObjectEnd) - return true; - } - return addErrorAndRecover( - "Missing '}' or object member name", tokenName, tokenObjectEnd); -} - -bool Reader::readArray(Token& tokenStart) { - Value init(arrayValue); - currentValue().swapPayload(init); - currentValue().setOffsetStart(tokenStart.start_ - begin_); - skipSpaces(); - if (current_ != end_ && *current_ == ']') // empty array - { - Token endArray; - readToken(endArray); - return true; - } - int index = 0; - for (;;) { - Value& value = currentValue()[index++]; - nodes_.push(&value); - bool ok = readValue(); - nodes_.pop(); - if (!ok) // error already set - return recoverFromError(tokenArrayEnd); - - Token token; - // Accept Comment after last item in the array. - ok = readToken(token); - while (token.type_ == tokenComment && ok) { - ok = readToken(token); - } - bool badTokenType = - (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); - if (!ok || badTokenType) { - return addErrorAndRecover( - "Missing ',' or ']' in array declaration", token, tokenArrayEnd); - } - if (token.type_ == tokenArrayEnd) - break; - } - return true; -} - -bool Reader::decodeNumber(Token& token) { - Value decoded; - if (!decodeNumber(token, decoded)) - return false; - currentValue().swapPayload(decoded); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return true; -} - -bool Reader::decodeNumber(Token& token, Value& decoded) { - // Attempts to parse the number as an integer. If the number is - // larger than the maximum supported value of an integer then - // we decode the number as a double. - Location current = token.start_; - bool isNegative = *current == '-'; - if (isNegative) - ++current; - // TODO: Help the compiler do the div and mod at compile time or get rid of them. - Value::LargestUInt maxIntegerValue = - isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1 - : Value::maxLargestUInt; - Value::LargestUInt threshold = maxIntegerValue / 10; - Value::LargestUInt value = 0; - while (current < token.end_) { - Char c = *current++; - if (c < '0' || c > '9') - return decodeDouble(token, decoded); - Value::UInt digit(static_cast(c - '0')); - if (value >= threshold) { - // We've hit or exceeded the max value divided by 10 (rounded down). If - // a) we've only just touched the limit, b) this is the last digit, and - // c) it's small enough to fit in that rounding delta, we're okay. - // Otherwise treat this number as a double to avoid overflow. - if (value > threshold || current != token.end_ || - digit > maxIntegerValue % 10) { - return decodeDouble(token, decoded); - } - } - value = value * 10 + digit; - } - if (isNegative && value == maxIntegerValue) - decoded = Value::minLargestInt; - else if (isNegative) - decoded = -Value::LargestInt(value); - else if (value <= Value::LargestUInt(Value::maxInt)) - decoded = Value::LargestInt(value); - else - decoded = value; - return true; -} - -bool Reader::decodeDouble(Token& token) { - Value decoded; - if (!decodeDouble(token, decoded)) - return false; - currentValue().swapPayload(decoded); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return true; -} - -bool Reader::decodeDouble(Token& token, Value& decoded) { - double value = 0; - JSONCPP_STRING buffer(token.start_, token.end_); - JSONCPP_ISTRINGSTREAM is(buffer); - if (!(is >> value)) - return addError("'" + JSONCPP_STRING(token.start_, token.end_) + - "' is not a number.", - token); - decoded = value; - return true; -} - -bool Reader::decodeString(Token& token) { - JSONCPP_STRING decoded_string; - if (!decodeString(token, decoded_string)) - return false; - Value decoded(decoded_string); - currentValue().swapPayload(decoded); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return true; -} - -bool Reader::decodeString(Token& token, JSONCPP_STRING& decoded) { - decoded.reserve(static_cast(token.end_ - token.start_ - 2)); - Location current = token.start_ + 1; // skip '"' - Location end = token.end_ - 1; // do not include '"' - while (current != end) { - Char c = *current++; - if (c == '"') - break; - else if (c == '\\') { - if (current == end) - return addError("Empty escape sequence in string", token, current); - Char escape = *current++; - switch (escape) { - case '"': - decoded += '"'; - break; - case '/': - decoded += '/'; - break; - case '\\': - decoded += '\\'; - break; - case 'b': - decoded += '\b'; - break; - case 'f': - decoded += '\f'; - break; - case 'n': - decoded += '\n'; - break; - case 'r': - decoded += '\r'; - break; - case 't': - decoded += '\t'; - break; - case 'u': { - unsigned int unicode; - if (!decodeUnicodeCodePoint(token, current, end, unicode)) - return false; - decoded += codePointToUTF8(unicode); - } break; - default: - return addError("Bad escape sequence in string", token, current); - } - } else { - decoded += c; - } - } - return true; -} - -bool Reader::decodeUnicodeCodePoint(Token& token, - Location& current, - Location end, - unsigned int& unicode) { - - if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) - return false; - if (unicode >= 0xD800 && unicode <= 0xDBFF) { - // surrogate pairs - if (end - current < 6) - return addError( - "additional six characters expected to parse unicode surrogate pair.", - token, - current); - unsigned int surrogatePair; - if (*(current++) == '\\' && *(current++) == 'u') { - if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { - unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); - } else - return false; - } else - return addError("expecting another \\u token to begin the second half of " - "a unicode surrogate pair", - token, - current); - } - return true; -} - -bool Reader::decodeUnicodeEscapeSequence(Token& token, - Location& current, - Location end, - unsigned int& ret_unicode) { - if (end - current < 4) - return addError( - "Bad unicode escape sequence in string: four digits expected.", - token, - current); - int unicode = 0; - for (int index = 0; index < 4; ++index) { - Char c = *current++; - unicode *= 16; - if (c >= '0' && c <= '9') - unicode += c - '0'; - else if (c >= 'a' && c <= 'f') - unicode += c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - unicode += c - 'A' + 10; - else - return addError( - "Bad unicode escape sequence in string: hexadecimal digit expected.", - token, - current); - } - ret_unicode = static_cast(unicode); - return true; -} - -bool -Reader::addError(const JSONCPP_STRING& message, Token& token, Location extra) { - ErrorInfo info; - info.token_ = token; - info.message_ = message; - info.extra_ = extra; - errors_.push_back(info); - return false; -} - -bool Reader::recoverFromError(TokenType skipUntilToken) { - size_t const errorCount = errors_.size(); - Token skip; - for (;;) { - if (!readToken(skip)) - errors_.resize(errorCount); // discard errors caused by recovery - if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) - break; - } - errors_.resize(errorCount); - return false; -} - -bool Reader::addErrorAndRecover(const JSONCPP_STRING& message, - Token& token, - TokenType skipUntilToken) { - addError(message, token); - return recoverFromError(skipUntilToken); -} - -Value& Reader::currentValue() { return *(nodes_.top()); } - -Reader::Char Reader::getNextChar() { - if (current_ == end_) - return 0; - return *current_++; -} - -void Reader::getLocationLineAndColumn(Location location, - int& line, - int& column) const { - Location current = begin_; - Location lastLineStart = current; - line = 0; - while (current < location && current != end_) { - Char c = *current++; - if (c == '\r') { - if (*current == '\n') - ++current; - lastLineStart = current; - ++line; - } else if (c == '\n') { - lastLineStart = current; - ++line; - } - } - // column & line start at 1 - column = int(location - lastLineStart) + 1; - ++line; -} - -JSONCPP_STRING Reader::getLocationLineAndColumn(Location location) const { - int line, column; - getLocationLineAndColumn(location, line, column); - char buffer[18 + 16 + 16 + 1]; - snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); - return buffer; -} - -// Deprecated. Preserved for backward compatibility -JSONCPP_STRING Reader::getFormatedErrorMessages() const { - return getFormattedErrorMessages(); -} - -JSONCPP_STRING Reader::getFormattedErrorMessages() const { - JSONCPP_STRING formattedMessage; - for (Errors::const_iterator itError = errors_.begin(); - itError != errors_.end(); - ++itError) { - const ErrorInfo& error = *itError; - formattedMessage += - "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; - formattedMessage += " " + error.message_ + "\n"; - if (error.extra_) - formattedMessage += - "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; - } - return formattedMessage; -} - -std::vector Reader::getStructuredErrors() const { - std::vector allErrors; - for (Errors::const_iterator itError = errors_.begin(); - itError != errors_.end(); - ++itError) { - const ErrorInfo& error = *itError; - Reader::StructuredError structured; - structured.offset_start = error.token_.start_ - begin_; - structured.offset_limit = error.token_.end_ - begin_; - structured.message = error.message_; - allErrors.push_back(structured); - } - return allErrors; -} - -bool Reader::pushError(const Value& value, const JSONCPP_STRING& message) { - ptrdiff_t const length = end_ - begin_; - if(value.getOffsetStart() > length - || value.getOffsetLimit() > length) - return false; - Token token; - token.type_ = tokenError; - token.start_ = begin_ + value.getOffsetStart(); - token.end_ = end_ + value.getOffsetLimit(); - ErrorInfo info; - info.token_ = token; - info.message_ = message; - info.extra_ = 0; - errors_.push_back(info); - return true; -} - -bool Reader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) { - ptrdiff_t const length = end_ - begin_; - if(value.getOffsetStart() > length - || value.getOffsetLimit() > length - || extra.getOffsetLimit() > length) - return false; - Token token; - token.type_ = tokenError; - token.start_ = begin_ + value.getOffsetStart(); - token.end_ = begin_ + value.getOffsetLimit(); - ErrorInfo info; - info.token_ = token; - info.message_ = message; - info.extra_ = begin_ + extra.getOffsetStart(); - errors_.push_back(info); - return true; -} - -bool Reader::good() const { - return !errors_.size(); -} - -// exact copy of Features -class OurFeatures { -public: - static OurFeatures all(); - bool allowComments_; - bool strictRoot_; - bool allowDroppedNullPlaceholders_; - bool allowNumericKeys_; - bool allowSingleQuotes_; - bool failIfExtra_; - bool rejectDupKeys_; - bool allowSpecialFloats_; - int stackLimit_; -}; // OurFeatures - -// exact copy of Implementation of class Features -// //////////////////////////////// - -OurFeatures OurFeatures::all() { return OurFeatures(); } - -// Implementation of class Reader -// //////////////////////////////// - -// exact copy of Reader, renamed to OurReader -class OurReader { -public: - typedef char Char; - typedef const Char* Location; - struct StructuredError { - ptrdiff_t offset_start; - ptrdiff_t offset_limit; - JSONCPP_STRING message; - }; - - OurReader(OurFeatures const& features); - bool parse(const char* beginDoc, - const char* endDoc, - Value& root, - bool collectComments = true); - JSONCPP_STRING getFormattedErrorMessages() const; - std::vector getStructuredErrors() const; - bool pushError(const Value& value, const JSONCPP_STRING& message); - bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra); - bool good() const; - -private: - OurReader(OurReader const&); // no impl - void operator=(OurReader const&); // no impl - - enum TokenType { - tokenEndOfStream = 0, - tokenObjectBegin, - tokenObjectEnd, - tokenArrayBegin, - tokenArrayEnd, - tokenString, - tokenNumber, - tokenTrue, - tokenFalse, - tokenNull, - tokenNaN, - tokenPosInf, - tokenNegInf, - tokenArraySeparator, - tokenMemberSeparator, - tokenComment, - tokenError - }; - - class Token { - public: - TokenType type_; - Location start_; - Location end_; - }; - - class ErrorInfo { - public: - Token token_; - JSONCPP_STRING message_; - Location extra_; - }; - - typedef std::deque Errors; - - bool readToken(Token& token); - void skipSpaces(); - bool match(Location pattern, int patternLength); - bool readComment(); - bool readCStyleComment(); - bool readCppStyleComment(); - bool readString(); - bool readStringSingleQuote(); - bool readNumber(bool checkInf); - bool readValue(); - bool readObject(Token& token); - bool readArray(Token& token); - bool decodeNumber(Token& token); - bool decodeNumber(Token& token, Value& decoded); - bool decodeString(Token& token); - bool decodeString(Token& token, JSONCPP_STRING& decoded); - bool decodeDouble(Token& token); - bool decodeDouble(Token& token, Value& decoded); - bool decodeUnicodeCodePoint(Token& token, - Location& current, - Location end, - unsigned int& unicode); - bool decodeUnicodeEscapeSequence(Token& token, - Location& current, - Location end, - unsigned int& unicode); - bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0); - bool recoverFromError(TokenType skipUntilToken); - bool addErrorAndRecover(const JSONCPP_STRING& message, - Token& token, - TokenType skipUntilToken); - void skipUntilSpace(); - Value& currentValue(); - Char getNextChar(); - void - getLocationLineAndColumn(Location location, int& line, int& column) const; - JSONCPP_STRING getLocationLineAndColumn(Location location) const; - void addComment(Location begin, Location end, CommentPlacement placement); - void skipCommentTokens(Token& token); - - static JSONCPP_STRING normalizeEOL(Location begin, Location end); - static bool containsNewLine(Location begin, Location end); - - typedef std::stack Nodes; - Nodes nodes_; - Errors errors_; - JSONCPP_STRING document_; - Location begin_; - Location end_; - Location current_; - Location lastValueEnd_; - Value* lastValue_; - JSONCPP_STRING commentsBefore_; - - OurFeatures const features_; - bool collectComments_; -}; // OurReader - -// complete copy of Read impl, for OurReader - -bool OurReader::containsNewLine(OurReader::Location begin, OurReader::Location end) { - for (; begin < end; ++begin) - if (*begin == '\n' || *begin == '\r') - return true; - return false; -} - -OurReader::OurReader(OurFeatures const& features) - : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), - lastValue_(), commentsBefore_(), - features_(features), collectComments_() { -} - -bool OurReader::parse(const char* beginDoc, - const char* endDoc, - Value& root, - bool collectComments) { - if (!features_.allowComments_) { - collectComments = false; - } - - begin_ = beginDoc; - end_ = endDoc; - collectComments_ = collectComments; - current_ = begin_; - lastValueEnd_ = 0; - lastValue_ = 0; - commentsBefore_.clear(); - errors_.clear(); - while (!nodes_.empty()) - nodes_.pop(); - nodes_.push(&root); - - bool successful = readValue(); - Token token; - skipCommentTokens(token); - if (features_.failIfExtra_) { - if ((features_.strictRoot_ || token.type_ != tokenError) && token.type_ != tokenEndOfStream) { - addError("Extra non-whitespace after JSON value.", token); - return false; - } - } - if (collectComments_ && !commentsBefore_.empty()) - root.setComment(commentsBefore_, commentAfter); - if (features_.strictRoot_) { - if (!root.isArray() && !root.isObject()) { - // Set error location to start of doc, ideally should be first token found - // in doc - token.type_ = tokenError; - token.start_ = beginDoc; - token.end_ = endDoc; - addError( - "A valid JSON document must be either an array or an object value.", - token); - return false; - } - } - return successful; -} - -bool OurReader::readValue() { - // To preserve the old behaviour we cast size_t to int. - if (static_cast(nodes_.size()) > features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); - Token token; - skipCommentTokens(token); - bool successful = true; - - if (collectComments_ && !commentsBefore_.empty()) { - currentValue().setComment(commentsBefore_, commentBefore); - commentsBefore_.clear(); - } - - switch (token.type_) { - case tokenObjectBegin: - successful = readObject(token); - currentValue().setOffsetLimit(current_ - begin_); - break; - case tokenArrayBegin: - successful = readArray(token); - currentValue().setOffsetLimit(current_ - begin_); - break; - case tokenNumber: - successful = decodeNumber(token); - break; - case tokenString: - successful = decodeString(token); - break; - case tokenTrue: - { - Value v(true); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenFalse: - { - Value v(false); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenNull: - { - Value v; - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenNaN: - { - Value v(std::numeric_limits::quiet_NaN()); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenPosInf: - { - Value v(std::numeric_limits::infinity()); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenNegInf: - { - Value v(-std::numeric_limits::infinity()); - currentValue().swapPayload(v); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - } - break; - case tokenArraySeparator: - case tokenObjectEnd: - case tokenArrayEnd: - if (features_.allowDroppedNullPlaceholders_) { - // "Un-read" the current token and mark the current value as a null - // token. - current_--; - Value v; - currentValue().swapPayload(v); - currentValue().setOffsetStart(current_ - begin_ - 1); - currentValue().setOffsetLimit(current_ - begin_); - break; - } // else, fall through ... - default: - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return addError("Syntax error: value, object or array expected.", token); - } - - if (collectComments_) { - lastValueEnd_ = current_; - lastValue_ = ¤tValue(); - } - - return successful; -} - -void OurReader::skipCommentTokens(Token& token) { - if (features_.allowComments_) { - do { - readToken(token); - } while (token.type_ == tokenComment); - } else { - readToken(token); - } -} - -bool OurReader::readToken(Token& token) { - skipSpaces(); - token.start_ = current_; - Char c = getNextChar(); - bool ok = true; - switch (c) { - case '{': - token.type_ = tokenObjectBegin; - break; - case '}': - token.type_ = tokenObjectEnd; - break; - case '[': - token.type_ = tokenArrayBegin; - break; - case ']': - token.type_ = tokenArrayEnd; - break; - case '"': - token.type_ = tokenString; - ok = readString(); - break; - case '\'': - if (features_.allowSingleQuotes_) { - token.type_ = tokenString; - ok = readStringSingleQuote(); - break; - } // else continue - case '/': - token.type_ = tokenComment; - ok = readComment(); - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - token.type_ = tokenNumber; - readNumber(false); - break; - case '-': - if (readNumber(true)) { - token.type_ = tokenNumber; - } else { - token.type_ = tokenNegInf; - ok = features_.allowSpecialFloats_ && match("nfinity", 7); - } - break; - case 't': - token.type_ = tokenTrue; - ok = match("rue", 3); - break; - case 'f': - token.type_ = tokenFalse; - ok = match("alse", 4); - break; - case 'n': - token.type_ = tokenNull; - ok = match("ull", 3); - break; - case 'N': - if (features_.allowSpecialFloats_) { - token.type_ = tokenNaN; - ok = match("aN", 2); - } else { - ok = false; - } - break; - case 'I': - if (features_.allowSpecialFloats_) { - token.type_ = tokenPosInf; - ok = match("nfinity", 7); - } else { - ok = false; - } - break; - case ',': - token.type_ = tokenArraySeparator; - break; - case ':': - token.type_ = tokenMemberSeparator; - break; - case 0: - token.type_ = tokenEndOfStream; - break; - default: - ok = false; - break; - } - if (!ok) - token.type_ = tokenError; - token.end_ = current_; - return true; -} - -void OurReader::skipSpaces() { - while (current_ != end_) { - Char c = *current_; - if (c == ' ' || c == '\t' || c == '\r' || c == '\n') - ++current_; - else - break; - } -} - -bool OurReader::match(Location pattern, int patternLength) { - if (end_ - current_ < patternLength) - return false; - int index = patternLength; - while (index--) - if (current_[index] != pattern[index]) - return false; - current_ += patternLength; - return true; -} - -bool OurReader::readComment() { - Location commentBegin = current_ - 1; - Char c = getNextChar(); - bool successful = false; - if (c == '*') - successful = readCStyleComment(); - else if (c == '/') - successful = readCppStyleComment(); - if (!successful) - return false; - - if (collectComments_) { - CommentPlacement placement = commentBefore; - if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { - if (c != '*' || !containsNewLine(commentBegin, current_)) - placement = commentAfterOnSameLine; - } - - addComment(commentBegin, current_, placement); - } - return true; -} - -JSONCPP_STRING OurReader::normalizeEOL(OurReader::Location begin, OurReader::Location end) { - JSONCPP_STRING normalized; - normalized.reserve(static_cast(end - begin)); - OurReader::Location current = begin; - while (current != end) { - char c = *current++; - if (c == '\r') { - if (current != end && *current == '\n') - // convert dos EOL - ++current; - // convert Mac EOL - normalized += '\n'; - } else { - normalized += c; - } - } - return normalized; -} - -void -OurReader::addComment(Location begin, Location end, CommentPlacement placement) { - assert(collectComments_); - const JSONCPP_STRING& normalized = normalizeEOL(begin, end); - if (placement == commentAfterOnSameLine) { - assert(lastValue_ != 0); - lastValue_->setComment(normalized, placement); - } else { - commentsBefore_ += normalized; - } -} - -bool OurReader::readCStyleComment() { - while ((current_ + 1) < end_) { - Char c = getNextChar(); - if (c == '*' && *current_ == '/') - break; - } - return getNextChar() == '/'; -} - -bool OurReader::readCppStyleComment() { - while (current_ != end_) { - Char c = getNextChar(); - if (c == '\n') - break; - if (c == '\r') { - // Consume DOS EOL. It will be normalized in addComment. - if (current_ != end_ && *current_ == '\n') - getNextChar(); - // Break on Moc OS 9 EOL. - break; - } - } - return true; -} - -bool OurReader::readNumber(bool checkInf) { - const char *p = current_; - if (checkInf && p != end_ && *p == 'I') { - current_ = ++p; - return false; - } - char c = '0'; // stopgap for already consumed character - // integral part - while (c >= '0' && c <= '9') - c = (current_ = p) < end_ ? *p++ : '\0'; - // fractional part - if (c == '.') { - c = (current_ = p) < end_ ? *p++ : '\0'; - while (c >= '0' && c <= '9') - c = (current_ = p) < end_ ? *p++ : '\0'; - } - // exponential part - if (c == 'e' || c == 'E') { - c = (current_ = p) < end_ ? *p++ : '\0'; - if (c == '+' || c == '-') - c = (current_ = p) < end_ ? *p++ : '\0'; - while (c >= '0' && c <= '9') - c = (current_ = p) < end_ ? *p++ : '\0'; - } - return true; -} -bool OurReader::readString() { - Char c = 0; - while (current_ != end_) { - c = getNextChar(); - if (c == '\\') - getNextChar(); - else if (c == '"') - break; - } - return c == '"'; -} - - -bool OurReader::readStringSingleQuote() { - Char c = 0; - while (current_ != end_) { - c = getNextChar(); - if (c == '\\') - getNextChar(); - else if (c == '\'') - break; - } - return c == '\''; -} - -bool OurReader::readObject(Token& tokenStart) { - Token tokenName; - JSONCPP_STRING name; - Value init(objectValue); - currentValue().swapPayload(init); - currentValue().setOffsetStart(tokenStart.start_ - begin_); - while (readToken(tokenName)) { - bool initialTokenOk = true; - while (tokenName.type_ == tokenComment && initialTokenOk) - initialTokenOk = readToken(tokenName); - if (!initialTokenOk) - break; - if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object - return true; - name.clear(); - if (tokenName.type_ == tokenString) { - if (!decodeString(tokenName, name)) - return recoverFromError(tokenObjectEnd); - } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { - Value numberName; - if (!decodeNumber(tokenName, numberName)) - return recoverFromError(tokenObjectEnd); - name = numberName.asString(); - } else { - break; - } - - Token colon; - if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { - return addErrorAndRecover( - "Missing ':' after object member name", colon, tokenObjectEnd); - } - if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30"); - if (features_.rejectDupKeys_ && currentValue().isMember(name)) { - JSONCPP_STRING msg = "Duplicate key: '" + name + "'"; - return addErrorAndRecover( - msg, tokenName, tokenObjectEnd); - } - Value& value = currentValue()[name]; - nodes_.push(&value); - bool ok = readValue(); - nodes_.pop(); - if (!ok) // error already set - return recoverFromError(tokenObjectEnd); - - Token comma; - if (!readToken(comma) || - (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && - comma.type_ != tokenComment)) { - return addErrorAndRecover( - "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); - } - bool finalizeTokenOk = true; - while (comma.type_ == tokenComment && finalizeTokenOk) - finalizeTokenOk = readToken(comma); - if (comma.type_ == tokenObjectEnd) - return true; - } - return addErrorAndRecover( - "Missing '}' or object member name", tokenName, tokenObjectEnd); -} - -bool OurReader::readArray(Token& tokenStart) { - Value init(arrayValue); - currentValue().swapPayload(init); - currentValue().setOffsetStart(tokenStart.start_ - begin_); - skipSpaces(); - if (current_ != end_ && *current_ == ']') // empty array - { - Token endArray; - readToken(endArray); - return true; - } - int index = 0; - for (;;) { - Value& value = currentValue()[index++]; - nodes_.push(&value); - bool ok = readValue(); - nodes_.pop(); - if (!ok) // error already set - return recoverFromError(tokenArrayEnd); - - Token token; - // Accept Comment after last item in the array. - ok = readToken(token); - while (token.type_ == tokenComment && ok) { - ok = readToken(token); - } - bool badTokenType = - (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); - if (!ok || badTokenType) { - return addErrorAndRecover( - "Missing ',' or ']' in array declaration", token, tokenArrayEnd); - } - if (token.type_ == tokenArrayEnd) - break; - } - return true; -} - -bool OurReader::decodeNumber(Token& token) { - Value decoded; - if (!decodeNumber(token, decoded)) - return false; - currentValue().swapPayload(decoded); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return true; -} - -bool OurReader::decodeNumber(Token& token, Value& decoded) { - // Attempts to parse the number as an integer. If the number is - // larger than the maximum supported value of an integer then - // we decode the number as a double. - Location current = token.start_; - bool isNegative = *current == '-'; - if (isNegative) - ++current; - // TODO: Help the compiler do the div and mod at compile time or get rid of them. - Value::LargestUInt maxIntegerValue = - isNegative ? Value::LargestUInt(-Value::minLargestInt) - : Value::maxLargestUInt; - Value::LargestUInt threshold = maxIntegerValue / 10; - Value::LargestUInt value = 0; - while (current < token.end_) { - Char c = *current++; - if (c < '0' || c > '9') - return decodeDouble(token, decoded); - Value::UInt digit(static_cast(c - '0')); - if (value >= threshold) { - // We've hit or exceeded the max value divided by 10 (rounded down). If - // a) we've only just touched the limit, b) this is the last digit, and - // c) it's small enough to fit in that rounding delta, we're okay. - // Otherwise treat this number as a double to avoid overflow. - if (value > threshold || current != token.end_ || - digit > maxIntegerValue % 10) { - return decodeDouble(token, decoded); - } - } - value = value * 10 + digit; - } - if (isNegative) - decoded = -Value::LargestInt(value); - else if (value <= Value::LargestUInt(Value::maxInt)) - decoded = Value::LargestInt(value); - else - decoded = value; - return true; -} - -bool OurReader::decodeDouble(Token& token) { - Value decoded; - if (!decodeDouble(token, decoded)) - return false; - currentValue().swapPayload(decoded); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return true; -} - -bool OurReader::decodeDouble(Token& token, Value& decoded) { - double value = 0; - const int bufferSize = 32; - int count; - ptrdiff_t const length = token.end_ - token.start_; - - // Sanity check to avoid buffer overflow exploits. - if (length < 0) { - return addError("Unable to parse token length", token); - } - size_t const ulength = static_cast(length); - - // Avoid using a string constant for the format control string given to - // sscanf, as this can cause hard to debug crashes on OS X. See here for more - // info: - // - // http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html - char format[] = "%lf"; - - if (length <= bufferSize) { - Char buffer[bufferSize + 1]; - memcpy(buffer, token.start_, ulength); - buffer[length] = 0; - fixNumericLocaleInput(buffer, buffer + length); - count = sscanf(buffer, format, &value); - } else { - JSONCPP_STRING buffer(token.start_, token.end_); - count = sscanf(buffer.c_str(), format, &value); - } - - if (count != 1) - return addError("'" + JSONCPP_STRING(token.start_, token.end_) + - "' is not a number.", - token); - decoded = value; - return true; -} - -bool OurReader::decodeString(Token& token) { - JSONCPP_STRING decoded_string; - if (!decodeString(token, decoded_string)) - return false; - Value decoded(decoded_string); - currentValue().swapPayload(decoded); - currentValue().setOffsetStart(token.start_ - begin_); - currentValue().setOffsetLimit(token.end_ - begin_); - return true; -} - -bool OurReader::decodeString(Token& token, JSONCPP_STRING& decoded) { - decoded.reserve(static_cast(token.end_ - token.start_ - 2)); - Location current = token.start_ + 1; // skip '"' - Location end = token.end_ - 1; // do not include '"' - while (current != end) { - Char c = *current++; - if (c == '"') - break; - else if (c == '\\') { - if (current == end) - return addError("Empty escape sequence in string", token, current); - Char escape = *current++; - switch (escape) { - case '"': - decoded += '"'; - break; - case '/': - decoded += '/'; - break; - case '\\': - decoded += '\\'; - break; - case 'b': - decoded += '\b'; - break; - case 'f': - decoded += '\f'; - break; - case 'n': - decoded += '\n'; - break; - case 'r': - decoded += '\r'; - break; - case 't': - decoded += '\t'; - break; - case 'u': { - unsigned int unicode; - if (!decodeUnicodeCodePoint(token, current, end, unicode)) - return false; - decoded += codePointToUTF8(unicode); - } break; - default: - return addError("Bad escape sequence in string", token, current); - } - } else { - decoded += c; - } - } - return true; -} - -bool OurReader::decodeUnicodeCodePoint(Token& token, - Location& current, - Location end, - unsigned int& unicode) { - - if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) - return false; - if (unicode >= 0xD800 && unicode <= 0xDBFF) { - // surrogate pairs - if (end - current < 6) - return addError( - "additional six characters expected to parse unicode surrogate pair.", - token, - current); - unsigned int surrogatePair; - if (*(current++) == '\\' && *(current++) == 'u') { - if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { - unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); - } else - return false; - } else - return addError("expecting another \\u token to begin the second half of " - "a unicode surrogate pair", - token, - current); - } - return true; -} - -bool OurReader::decodeUnicodeEscapeSequence(Token& token, - Location& current, - Location end, - unsigned int& ret_unicode) { - if (end - current < 4) - return addError( - "Bad unicode escape sequence in string: four digits expected.", - token, - current); - int unicode = 0; - for (int index = 0; index < 4; ++index) { - Char c = *current++; - unicode *= 16; - if (c >= '0' && c <= '9') - unicode += c - '0'; - else if (c >= 'a' && c <= 'f') - unicode += c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - unicode += c - 'A' + 10; - else - return addError( - "Bad unicode escape sequence in string: hexadecimal digit expected.", - token, - current); - } - ret_unicode = static_cast(unicode); - return true; -} - -bool -OurReader::addError(const JSONCPP_STRING& message, Token& token, Location extra) { - ErrorInfo info; - info.token_ = token; - info.message_ = message; - info.extra_ = extra; - errors_.push_back(info); - return false; -} - -bool OurReader::recoverFromError(TokenType skipUntilToken) { - size_t errorCount = errors_.size(); - Token skip; - for (;;) { - if (!readToken(skip)) - errors_.resize(errorCount); // discard errors caused by recovery - if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) - break; - } - errors_.resize(errorCount); - return false; -} - -bool OurReader::addErrorAndRecover(const JSONCPP_STRING& message, - Token& token, - TokenType skipUntilToken) { - addError(message, token); - return recoverFromError(skipUntilToken); -} - -Value& OurReader::currentValue() { return *(nodes_.top()); } - -OurReader::Char OurReader::getNextChar() { - if (current_ == end_) - return 0; - return *current_++; -} - -void OurReader::getLocationLineAndColumn(Location location, - int& line, - int& column) const { - Location current = begin_; - Location lastLineStart = current; - line = 0; - while (current < location && current != end_) { - Char c = *current++; - if (c == '\r') { - if (*current == '\n') - ++current; - lastLineStart = current; - ++line; - } else if (c == '\n') { - lastLineStart = current; - ++line; - } - } - // column & line start at 1 - column = int(location - lastLineStart) + 1; - ++line; -} - -JSONCPP_STRING OurReader::getLocationLineAndColumn(Location location) const { - int line, column; - getLocationLineAndColumn(location, line, column); - char buffer[18 + 16 + 16 + 1]; - snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); - return buffer; -} - -JSONCPP_STRING OurReader::getFormattedErrorMessages() const { - JSONCPP_STRING formattedMessage; - for (Errors::const_iterator itError = errors_.begin(); - itError != errors_.end(); - ++itError) { - const ErrorInfo& error = *itError; - formattedMessage += - "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; - formattedMessage += " " + error.message_ + "\n"; - if (error.extra_) - formattedMessage += - "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; - } - return formattedMessage; -} - -std::vector OurReader::getStructuredErrors() const { - std::vector allErrors; - for (Errors::const_iterator itError = errors_.begin(); - itError != errors_.end(); - ++itError) { - const ErrorInfo& error = *itError; - OurReader::StructuredError structured; - structured.offset_start = error.token_.start_ - begin_; - structured.offset_limit = error.token_.end_ - begin_; - structured.message = error.message_; - allErrors.push_back(structured); - } - return allErrors; -} - -bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message) { - ptrdiff_t length = end_ - begin_; - if(value.getOffsetStart() > length - || value.getOffsetLimit() > length) - return false; - Token token; - token.type_ = tokenError; - token.start_ = begin_ + value.getOffsetStart(); - token.end_ = end_ + value.getOffsetLimit(); - ErrorInfo info; - info.token_ = token; - info.message_ = message; - info.extra_ = 0; - errors_.push_back(info); - return true; -} - -bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) { - ptrdiff_t length = end_ - begin_; - if(value.getOffsetStart() > length - || value.getOffsetLimit() > length - || extra.getOffsetLimit() > length) - return false; - Token token; - token.type_ = tokenError; - token.start_ = begin_ + value.getOffsetStart(); - token.end_ = begin_ + value.getOffsetLimit(); - ErrorInfo info; - info.token_ = token; - info.message_ = message; - info.extra_ = begin_ + extra.getOffsetStart(); - errors_.push_back(info); - return true; -} - -bool OurReader::good() const { - return !errors_.size(); -} - - -class OurCharReader : public CharReader { - bool const collectComments_; - OurReader reader_; -public: - OurCharReader( - bool collectComments, - OurFeatures const& features) - : collectComments_(collectComments) - , reader_(features) - {} - bool parse( - char const* beginDoc, char const* endDoc, - Value* root, JSONCPP_STRING* errs) JSONCPP_OVERRIDE { - bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); - if (errs) { - *errs = reader_.getFormattedErrorMessages(); - } - return ok; - } -}; - -CharReaderBuilder::CharReaderBuilder() -{ - setDefaults(&settings_); -} -CharReaderBuilder::~CharReaderBuilder() -{} -CharReader* CharReaderBuilder::newCharReader() const -{ - bool collectComments = settings_["collectComments"].asBool(); - OurFeatures features = OurFeatures::all(); - features.allowComments_ = settings_["allowComments"].asBool(); - features.strictRoot_ = settings_["strictRoot"].asBool(); - features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool(); - features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool(); - features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool(); - features.stackLimit_ = settings_["stackLimit"].asInt(); - features.failIfExtra_ = settings_["failIfExtra"].asBool(); - features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool(); - features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool(); - return new OurCharReader(collectComments, features); -} -static void getValidReaderKeys(std::set* valid_keys) -{ - valid_keys->clear(); - valid_keys->insert("collectComments"); - valid_keys->insert("allowComments"); - valid_keys->insert("strictRoot"); - valid_keys->insert("allowDroppedNullPlaceholders"); - valid_keys->insert("allowNumericKeys"); - valid_keys->insert("allowSingleQuotes"); - valid_keys->insert("stackLimit"); - valid_keys->insert("failIfExtra"); - valid_keys->insert("rejectDupKeys"); - valid_keys->insert("allowSpecialFloats"); -} -bool CharReaderBuilder::validate(Json::Value* invalid) const -{ - Json::Value my_invalid; - if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL - Json::Value& inv = *invalid; - std::set valid_keys; - getValidReaderKeys(&valid_keys); - Value::Members keys = settings_.getMemberNames(); - size_t n = keys.size(); - for (size_t i = 0; i < n; ++i) { - JSONCPP_STRING const& key = keys[i]; - if (valid_keys.find(key) == valid_keys.end()) { - inv[key] = settings_[key]; - } - } - return 0u == inv.size(); -} -Value& CharReaderBuilder::operator[](JSONCPP_STRING key) -{ - return settings_[key]; -} -// static -void CharReaderBuilder::strictMode(Json::Value* settings) -{ -//! [CharReaderBuilderStrictMode] - (*settings)["allowComments"] = false; - (*settings)["strictRoot"] = true; - (*settings)["allowDroppedNullPlaceholders"] = false; - (*settings)["allowNumericKeys"] = false; - (*settings)["allowSingleQuotes"] = false; - (*settings)["stackLimit"] = 1000; - (*settings)["failIfExtra"] = true; - (*settings)["rejectDupKeys"] = true; - (*settings)["allowSpecialFloats"] = false; -//! [CharReaderBuilderStrictMode] -} -// static -void CharReaderBuilder::setDefaults(Json::Value* settings) -{ -//! [CharReaderBuilderDefaults] - (*settings)["collectComments"] = true; - (*settings)["allowComments"] = true; - (*settings)["strictRoot"] = false; - (*settings)["allowDroppedNullPlaceholders"] = false; - (*settings)["allowNumericKeys"] = false; - (*settings)["allowSingleQuotes"] = false; - (*settings)["stackLimit"] = 1000; - (*settings)["failIfExtra"] = false; - (*settings)["rejectDupKeys"] = false; - (*settings)["allowSpecialFloats"] = false; -//! [CharReaderBuilderDefaults] -} - -////////////////////////////////// -// global functions - -bool parseFromStream( - CharReader::Factory const& fact, JSONCPP_ISTREAM& sin, - Value* root, JSONCPP_STRING* errs) -{ - JSONCPP_OSTRINGSTREAM ssin; - ssin << sin.rdbuf(); - JSONCPP_STRING doc = ssin.str(); - char const* begin = doc.data(); - char const* end = begin + doc.size(); - // Note that we do not actually need a null-terminator. - CharReaderPtr const reader(fact.newCharReader()); - return reader->parse(begin, end, root, errs); -} - -JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM& sin, Value& root) { - CharReaderBuilder b; - JSONCPP_STRING errs; - bool ok = parseFromStream(b, sin, &root, &errs); - if (!ok) { - throwRuntimeError(errs); - } - return sin; -} - -} // namespace Json - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: src/lib_json/json_reader.cpp -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: src/lib_json/json_valueiterator.inl -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -// included by json_value.cpp - -namespace Json { - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// class ValueIteratorBase -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// - -ValueIteratorBase::ValueIteratorBase() - : current_(), isNull_(true) { -} - -ValueIteratorBase::ValueIteratorBase( - const Value::ObjectValues::iterator& current) - : current_(current), isNull_(false) {} - -Value& ValueIteratorBase::deref() const { - return current_->second; -} - -void ValueIteratorBase::increment() { - ++current_; -} - -void ValueIteratorBase::decrement() { - --current_; -} - -ValueIteratorBase::difference_type -ValueIteratorBase::computeDistance(const SelfType& other) const { -#ifdef JSON_USE_CPPTL_SMALLMAP - return other.current_ - current_; -#else - // Iterator for null value are initialized using the default - // constructor, which initialize current_ to the default - // std::map::iterator. As begin() and end() are two instance - // of the default std::map::iterator, they can not be compared. - // To allow this, we handle this comparison specifically. - if (isNull_ && other.isNull_) { - return 0; - } - - // Usage of std::distance is not portable (does not compile with Sun Studio 12 - // RogueWave STL, - // which is the one used by default). - // Using a portable hand-made version for non random iterator instead: - // return difference_type( std::distance( current_, other.current_ ) ); - difference_type myDistance = 0; - for (Value::ObjectValues::iterator it = current_; it != other.current_; - ++it) { - ++myDistance; - } - return myDistance; -#endif -} - -bool ValueIteratorBase::isEqual(const SelfType& other) const { - if (isNull_) { - return other.isNull_; - } - return current_ == other.current_; -} - -void ValueIteratorBase::copy(const SelfType& other) { - current_ = other.current_; - isNull_ = other.isNull_; -} - -Value ValueIteratorBase::key() const { - const Value::CZString czstring = (*current_).first; - if (czstring.data()) { - if (czstring.isStaticString()) - return Value(StaticString(czstring.data())); - return Value(czstring.data(), czstring.data() + czstring.length()); - } - return Value(czstring.index()); -} - -UInt ValueIteratorBase::index() const { - const Value::CZString czstring = (*current_).first; - if (!czstring.data()) - return czstring.index(); - return Value::UInt(-1); -} - -JSONCPP_STRING ValueIteratorBase::name() const { - char const* keey; - char const* end; - keey = memberName(&end); - if (!keey) return JSONCPP_STRING(); - return JSONCPP_STRING(keey, end); -} - -char const* ValueIteratorBase::memberName() const { - const char* cname = (*current_).first.data(); - return cname ? cname : ""; -} - -char const* ValueIteratorBase::memberName(char const** end) const { - const char* cname = (*current_).first.data(); - if (!cname) { - *end = NULL; - return NULL; - } - *end = cname + (*current_).first.length(); - return cname; -} - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// class ValueConstIterator -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// - -ValueConstIterator::ValueConstIterator() {} - -ValueConstIterator::ValueConstIterator( - const Value::ObjectValues::iterator& current) - : ValueIteratorBase(current) {} - -ValueConstIterator::ValueConstIterator(ValueIterator const& other) - : ValueIteratorBase(other) {} - -ValueConstIterator& ValueConstIterator:: -operator=(const ValueIteratorBase& other) { - copy(other); - return *this; -} - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// class ValueIterator -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// - -ValueIterator::ValueIterator() {} - -ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current) - : ValueIteratorBase(current) {} - -ValueIterator::ValueIterator(const ValueConstIterator& other) - : ValueIteratorBase(other) { - throwRuntimeError("ConstIterator to Iterator should never be allowed."); -} - -ValueIterator::ValueIterator(const ValueIterator& other) - : ValueIteratorBase(other) {} - -ValueIterator& ValueIterator::operator=(const SelfType& other) { - copy(other); - return *this; -} - -} // namespace Json - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: src/lib_json/json_valueiterator.inl -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: src/lib_json/json_value.cpp -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include -#endif // if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include -#include -#include -#ifdef JSON_USE_CPPTL -#include -#endif -#include // size_t -#include // min() - -#define JSON_ASSERT_UNREACHABLE assert(false) - -namespace Json { - -// This is a walkaround to avoid the static initialization of Value::null. -// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of -// 8 (instead of 4) as a bit of future-proofing. -#if defined(__ARMEL__) -#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) -#else -#define ALIGNAS(byte_alignment) -#endif -//static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 }; -//const unsigned char& kNullRef = kNull[0]; -//const Value& Value::null = reinterpret_cast(kNullRef); -//const Value& Value::nullRef = null; - -// static -Value const& Value::nullSingleton() -{ - static Value const nullStatic; - return nullStatic; -} - -// for backwards compatibility, we'll leave these global references around, but DO NOT -// use them in JSONCPP library code any more! -Value const& Value::null = Value::nullSingleton(); -Value const& Value::nullRef = Value::nullSingleton(); - -const Int Value::minInt = Int(~(UInt(-1) / 2)); -const Int Value::maxInt = Int(UInt(-1) / 2); -const UInt Value::maxUInt = UInt(-1); -#if defined(JSON_HAS_INT64) -const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2)); -const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2); -const UInt64 Value::maxUInt64 = UInt64(-1); -// The constant is hard-coded because some compiler have trouble -// converting Value::maxUInt64 to a double correctly (AIX/xlC). -// Assumes that UInt64 is a 64 bits integer. -static const double maxUInt64AsDouble = 18446744073709551615.0; -#endif // defined(JSON_HAS_INT64) -const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2)); -const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2); -const LargestUInt Value::maxLargestUInt = LargestUInt(-1); - -#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) -template -static inline bool InRange(double d, T min, U max) { - // The casts can lose precision, but we are looking only for - // an approximate range. Might fail on edge cases though. ~cdunn - //return d >= static_cast(min) && d <= static_cast(max); - return d >= min && d <= max; -} -#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) -static inline double integerToDouble(Json::UInt64 value) { - return static_cast(Int64(value / 2)) * 2.0 + static_cast(Int64(value & 1)); -} - -template static inline double integerToDouble(T value) { - return static_cast(value); -} - -template -static inline bool InRange(double d, T min, U max) { - return d >= integerToDouble(min) && d <= integerToDouble(max); -} -#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - -/** Duplicates the specified string value. - * @param value Pointer to the string to duplicate. Must be zero-terminated if - * length is "unknown". - * @param length Length of the value. if equals to unknown, then it will be - * computed using strlen(value). - * @return Pointer on the duplicate instance of string. - */ -static inline char* duplicateStringValue(const char* value, - size_t length) -{ - // Avoid an integer overflow in the call to malloc below by limiting length - // to a sane value. - if (length >= static_cast(Value::maxInt)) - length = Value::maxInt - 1; - - char* newString = static_cast(malloc(length + 1)); - if (newString == NULL) { - throwRuntimeError( - "in Json::Value::duplicateStringValue(): " - "Failed to allocate string value buffer"); - } - memcpy(newString, value, length); - newString[length] = 0; - return newString; -} - -/* Record the length as a prefix. - */ -static inline char* duplicateAndPrefixStringValue( - const char* value, - unsigned int length) -{ - // Avoid an integer overflow in the call to malloc below by limiting length - // to a sane value. - JSON_ASSERT_MESSAGE(length <= static_cast(Value::maxInt) - sizeof(unsigned) - 1U, - "in Json::Value::duplicateAndPrefixStringValue(): " - "length too big for prefixing"); - unsigned actualLength = length + static_cast(sizeof(unsigned)) + 1U; - char* newString = static_cast(malloc(actualLength)); - if (newString == 0) { - throwRuntimeError( - "in Json::Value::duplicateAndPrefixStringValue(): " - "Failed to allocate string value buffer"); - } - *reinterpret_cast(newString) = length; - memcpy(newString + sizeof(unsigned), value, length); - newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later - return newString; -} -inline static void decodePrefixedString( - bool isPrefixed, char const* prefixed, - unsigned* length, char const** value) -{ - if (!isPrefixed) { - *length = static_cast(strlen(prefixed)); - *value = prefixed; - } else { - *length = *reinterpret_cast(prefixed); - *value = prefixed + sizeof(unsigned); - } -} -/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). - */ -#if JSONCPP_USING_SECURE_MEMORY -static inline void releasePrefixedStringValue(char* value) { - unsigned length = 0; - char const* valueDecoded; - decodePrefixedString(true, value, &length, &valueDecoded); - size_t const size = sizeof(unsigned) + length + 1U; - memset(value, 0, size); - free(value); -} -static inline void releaseStringValue(char* value, unsigned length) { - // length==0 => we allocated the strings memory - size_t size = (length==0) ? strlen(value) : length; - memset(value, 0, size); - free(value); -} -#else // !JSONCPP_USING_SECURE_MEMORY -static inline void releasePrefixedStringValue(char* value) { - free(value); -} -static inline void releaseStringValue(char* value, unsigned) { - free(value); -} -#endif // JSONCPP_USING_SECURE_MEMORY - -} // namespace Json - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ValueInternals... -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -#if !defined(JSON_IS_AMALGAMATION) - -#include "json_valueiterator.inl" -#endif // if !defined(JSON_IS_AMALGAMATION) - -namespace Json { - -Exception::Exception(JSONCPP_STRING const& msg) - : msg_(msg) -{} -Exception::~Exception() JSONCPP_NOEXCEPT -{} -char const* Exception::what() const JSONCPP_NOEXCEPT -{ - return msg_.c_str(); -} -RuntimeError::RuntimeError(JSONCPP_STRING const& msg) - : Exception(msg) -{} -LogicError::LogicError(JSONCPP_STRING const& msg) - : Exception(msg) -{} -JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg) -{ - throw RuntimeError(msg); -} -JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg) -{ - throw LogicError(msg); -} - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// class Value::CommentInfo -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// - -Value::CommentInfo::CommentInfo() : comment_(0) -{} - -Value::CommentInfo::~CommentInfo() { - if (comment_) - releaseStringValue(comment_, 0u); -} - -void Value::CommentInfo::setComment(const char* text, size_t len) { - if (comment_) { - releaseStringValue(comment_, 0u); - comment_ = 0; - } - JSON_ASSERT(text != 0); - JSON_ASSERT_MESSAGE( - text[0] == '\0' || text[0] == '/', - "in Json::Value::setComment(): Comments must start with /"); - // It seems that /**/ style comments are acceptable as well. - comment_ = duplicateStringValue(text, len); -} - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// class Value::CZString -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// - -// Notes: policy_ indicates if the string was allocated when -// a string is stored. - -Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {} - -Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate) - : cstr_(str) { - // allocate != duplicate - storage_.policy_ = allocate & 0x3; - storage_.length_ = ulength & 0x3FFFFFFF; -} - -Value::CZString::CZString(const CZString& other) { - cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0 - ? duplicateStringValue(other.cstr_, other.storage_.length_) - : other.cstr_); - storage_.policy_ = static_cast(other.cstr_ - ? (static_cast(other.storage_.policy_) == noDuplication - ? noDuplication : duplicate) - : static_cast(other.storage_.policy_)) & 3U; - storage_.length_ = other.storage_.length_; -} - -#if JSON_HAS_RVALUE_REFERENCES -Value::CZString::CZString(CZString&& other) - : cstr_(other.cstr_), index_(other.index_) { - other.cstr_ = nullptr; -} -#endif - -Value::CZString::~CZString() { - if (cstr_ && storage_.policy_ == duplicate) { - releaseStringValue(const_cast(cstr_), storage_.length_ + 1u); //+1 for null terminating character for sake of completeness but not actually necessary - } -} - -void Value::CZString::swap(CZString& other) { - std::swap(cstr_, other.cstr_); - std::swap(index_, other.index_); -} - -Value::CZString& Value::CZString::operator=(const CZString& other) { - cstr_ = other.cstr_; - index_ = other.index_; - return *this; -} - -#if JSON_HAS_RVALUE_REFERENCES -Value::CZString& Value::CZString::operator=(CZString&& other) { - cstr_ = other.cstr_; - index_ = other.index_; - other.cstr_ = nullptr; - return *this; -} -#endif - -bool Value::CZString::operator<(const CZString& other) const { - if (!cstr_) return index_ < other.index_; - //return strcmp(cstr_, other.cstr_) < 0; - // Assume both are strings. - unsigned this_len = this->storage_.length_; - unsigned other_len = other.storage_.length_; - unsigned min_len = std::min(this_len, other_len); - JSON_ASSERT(this->cstr_ && other.cstr_); - int comp = memcmp(this->cstr_, other.cstr_, min_len); - if (comp < 0) return true; - if (comp > 0) return false; - return (this_len < other_len); -} - -bool Value::CZString::operator==(const CZString& other) const { - if (!cstr_) return index_ == other.index_; - //return strcmp(cstr_, other.cstr_) == 0; - // Assume both are strings. - unsigned this_len = this->storage_.length_; - unsigned other_len = other.storage_.length_; - if (this_len != other_len) return false; - JSON_ASSERT(this->cstr_ && other.cstr_); - int comp = memcmp(this->cstr_, other.cstr_, this_len); - return comp == 0; -} - -ArrayIndex Value::CZString::index() const { return index_; } - -//const char* Value::CZString::c_str() const { return cstr_; } -const char* Value::CZString::data() const { return cstr_; } -unsigned Value::CZString::length() const { return storage_.length_; } -bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; } - -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// class Value::Value -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// -// ////////////////////////////////////////////////////////////////// - -/*! \internal Default constructor initialization must be equivalent to: - * memset( this, 0, sizeof(Value) ) - * This optimization is used in ValueInternalMap fast allocator. - */ -Value::Value(ValueType vtype) { - static char const emptyString[] = ""; - initBasic(vtype); - switch (vtype) { - case nullValue: - break; - case intValue: - case uintValue: - value_.int_ = 0; - break; - case realValue: - value_.real_ = 0.0; - break; - case stringValue: - // allocated_ == false, so this is safe. - value_.string_ = const_cast(static_cast(emptyString)); - break; - case arrayValue: - case objectValue: - value_.map_ = new ObjectValues(); - break; - case booleanValue: - value_.bool_ = false; - break; - default: - JSON_ASSERT_UNREACHABLE; - } -} - -Value::Value(Int value) { - initBasic(intValue); - value_.int_ = value; -} - -Value::Value(UInt value) { - initBasic(uintValue); - value_.uint_ = value; -} -#if defined(JSON_HAS_INT64) -Value::Value(Int64 value) { - initBasic(intValue); - value_.int_ = value; -} -Value::Value(UInt64 value) { - initBasic(uintValue); - value_.uint_ = value; -} -#endif // defined(JSON_HAS_INT64) - -Value::Value(double value) { - initBasic(realValue); - value_.real_ = value; -} - -Value::Value(const char* value) { - initBasic(stringValue, true); - JSON_ASSERT_MESSAGE(value != NULL, "Null Value Passed to Value Constructor"); - value_.string_ = duplicateAndPrefixStringValue(value, static_cast(strlen(value))); -} - -Value::Value(const char* beginValue, const char* endValue) { - initBasic(stringValue, true); - value_.string_ = - duplicateAndPrefixStringValue(beginValue, static_cast(endValue - beginValue)); -} - -Value::Value(const JSONCPP_STRING& value) { - initBasic(stringValue, true); - value_.string_ = - duplicateAndPrefixStringValue(value.data(), static_cast(value.length())); -} - -Value::Value(const StaticString& value) { - initBasic(stringValue); - value_.string_ = const_cast(value.c_str()); -} - -#ifdef JSON_USE_CPPTL -Value::Value(const CppTL::ConstString& value) { - initBasic(stringValue, true); - value_.string_ = duplicateAndPrefixStringValue(value, static_cast(value.length())); -} -#endif - -Value::Value(bool value) { - initBasic(booleanValue); - value_.bool_ = value; -} - -Value::Value(Value const& other) - : type_(other.type_), allocated_(false) - , - comments_(0), start_(other.start_), limit_(other.limit_) -{ - switch (type_) { - case nullValue: - case intValue: - case uintValue: - case realValue: - case booleanValue: - value_ = other.value_; - break; - case stringValue: - if (other.value_.string_ && other.allocated_) { - unsigned len; - char const* str; - decodePrefixedString(other.allocated_, other.value_.string_, - &len, &str); - value_.string_ = duplicateAndPrefixStringValue(str, len); - allocated_ = true; - } else { - value_.string_ = other.value_.string_; - allocated_ = false; - } - break; - case arrayValue: - case objectValue: - value_.map_ = new ObjectValues(*other.value_.map_); - break; - default: - JSON_ASSERT_UNREACHABLE; - } - if (other.comments_) { - comments_ = new CommentInfo[numberOfCommentPlacement]; - for (int comment = 0; comment < numberOfCommentPlacement; ++comment) { - const CommentInfo& otherComment = other.comments_[comment]; - if (otherComment.comment_) - comments_[comment].setComment( - otherComment.comment_, strlen(otherComment.comment_)); - } - } -} - -#if JSON_HAS_RVALUE_REFERENCES -// Move constructor -Value::Value(Value&& other) { - initBasic(nullValue); - swap(other); -} -#endif - -Value::~Value() { - switch (type_) { - case nullValue: - case intValue: - case uintValue: - case realValue: - case booleanValue: - break; - case stringValue: - if (allocated_) - releasePrefixedStringValue(value_.string_); - break; - case arrayValue: - case objectValue: - delete value_.map_; - break; - default: - JSON_ASSERT_UNREACHABLE; - } - - delete[] comments_; - - value_.uint_ = 0; -} - -Value& Value::operator=(Value other) { - swap(other); - return *this; -} - -void Value::swapPayload(Value& other) { - ValueType temp = type_; - type_ = other.type_; - other.type_ = temp; - std::swap(value_, other.value_); - int temp2 = allocated_; - allocated_ = other.allocated_; - other.allocated_ = temp2 & 0x1; -} - -void Value::copyPayload(const Value& other) { - type_ = other.type_; - value_ = other.value_; - allocated_ = other.allocated_; -} - -void Value::swap(Value& other) { - swapPayload(other); - std::swap(comments_, other.comments_); - std::swap(start_, other.start_); - std::swap(limit_, other.limit_); -} - -void Value::copy(const Value& other) { - copyPayload(other); - comments_ = other.comments_; - start_ = other.start_; - limit_ = other.limit_; -} - -ValueType Value::type() const { return type_; } - -int Value::compare(const Value& other) const { - if (*this < other) - return -1; - if (*this > other) - return 1; - return 0; -} - -bool Value::operator<(const Value& other) const { - int typeDelta = type_ - other.type_; - if (typeDelta) - return typeDelta < 0 ? true : false; - switch (type_) { - case nullValue: - return false; - case intValue: - return value_.int_ < other.value_.int_; - case uintValue: - return value_.uint_ < other.value_.uint_; - case realValue: - return value_.real_ < other.value_.real_; - case booleanValue: - return value_.bool_ < other.value_.bool_; - case stringValue: - { - if ((value_.string_ == 0) || (other.value_.string_ == 0)) { - if (other.value_.string_) return true; - else return false; - } - unsigned this_len; - unsigned other_len; - char const* this_str; - char const* other_str; - decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); - decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); - unsigned min_len = std::min(this_len, other_len); - JSON_ASSERT(this_str && other_str); - int comp = memcmp(this_str, other_str, min_len); - if (comp < 0) return true; - if (comp > 0) return false; - return (this_len < other_len); - } - case arrayValue: - case objectValue: { - int delta = int(value_.map_->size() - other.value_.map_->size()); - if (delta) - return delta < 0; - return (*value_.map_) < (*other.value_.map_); - } - default: - JSON_ASSERT_UNREACHABLE; - } - return false; // unreachable -} - -bool Value::operator<=(const Value& other) const { return !(other < *this); } - -bool Value::operator>=(const Value& other) const { return !(*this < other); } - -bool Value::operator>(const Value& other) const { return other < *this; } - -bool Value::operator==(const Value& other) const { - // if ( type_ != other.type_ ) - // GCC 2.95.3 says: - // attempt to take address of bit-field structure member `Json::Value::type_' - // Beats me, but a temp solves the problem. - int temp = other.type_; - if (type_ != temp) - return false; - switch (type_) { - case nullValue: - return true; - case intValue: - return value_.int_ == other.value_.int_; - case uintValue: - return value_.uint_ == other.value_.uint_; - case realValue: - return value_.real_ == other.value_.real_; - case booleanValue: - return value_.bool_ == other.value_.bool_; - case stringValue: - { - if ((value_.string_ == 0) || (other.value_.string_ == 0)) { - return (value_.string_ == other.value_.string_); - } - unsigned this_len; - unsigned other_len; - char const* this_str; - char const* other_str; - decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); - decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); - if (this_len != other_len) return false; - JSON_ASSERT(this_str && other_str); - int comp = memcmp(this_str, other_str, this_len); - return comp == 0; - } - case arrayValue: - case objectValue: - return value_.map_->size() == other.value_.map_->size() && - (*value_.map_) == (*other.value_.map_); - default: - JSON_ASSERT_UNREACHABLE; - } - return false; // unreachable -} - -bool Value::operator!=(const Value& other) const { return !(*this == other); } - -const char* Value::asCString() const { - JSON_ASSERT_MESSAGE(type_ == stringValue, - "in Json::Value::asCString(): requires stringValue"); - if (value_.string_ == 0) return 0; - unsigned this_len; - char const* this_str; - decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); - return this_str; -} - -#if JSONCPP_USING_SECURE_MEMORY -unsigned Value::getCStringLength() const { - JSON_ASSERT_MESSAGE(type_ == stringValue, - "in Json::Value::asCString(): requires stringValue"); - if (value_.string_ == 0) return 0; - unsigned this_len; - char const* this_str; - decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); - return this_len; -} -#endif - -bool Value::getString(char const** str, char const** cend) const { - if (type_ != stringValue) return false; - if (value_.string_ == 0) return false; - unsigned length; - decodePrefixedString(this->allocated_, this->value_.string_, &length, str); - *cend = *str + length; - return true; -} - -JSONCPP_STRING Value::asString() const { - switch (type_) { - case nullValue: - return ""; - case stringValue: - { - if (value_.string_ == 0) return ""; - unsigned this_len; - char const* this_str; - decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); - return JSONCPP_STRING(this_str, this_len); - } - case booleanValue: - return value_.bool_ ? "true" : "false"; - case intValue: - return valueToString(value_.int_); - case uintValue: - return valueToString(value_.uint_); - case realValue: - return valueToString(value_.real_); - default: - JSON_FAIL_MESSAGE("Type is not convertible to string"); - } -} - -#ifdef JSON_USE_CPPTL -CppTL::ConstString Value::asConstString() const { - unsigned len; - char const* str; - decodePrefixedString(allocated_, value_.string_, - &len, &str); - return CppTL::ConstString(str, len); -} -#endif - -Value::Int Value::asInt() const { - switch (type_) { - case intValue: - JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range"); - return Int(value_.int_); - case uintValue: - JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range"); - return Int(value_.uint_); - case realValue: - JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt), - "double out of Int range"); - return Int(value_.real_); - case nullValue: - return 0; - case booleanValue: - return value_.bool_ ? 1 : 0; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to Int."); -} - -Value::UInt Value::asUInt() const { - switch (type_) { - case intValue: - JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range"); - return UInt(value_.int_); - case uintValue: - JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range"); - return UInt(value_.uint_); - case realValue: - JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt), - "double out of UInt range"); - return UInt(value_.real_); - case nullValue: - return 0; - case booleanValue: - return value_.bool_ ? 1 : 0; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to UInt."); -} - -#if defined(JSON_HAS_INT64) - -Value::Int64 Value::asInt64() const { - switch (type_) { - case intValue: - return Int64(value_.int_); - case uintValue: - JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); - return Int64(value_.uint_); - case realValue: - JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), - "double out of Int64 range"); - return Int64(value_.real_); - case nullValue: - return 0; - case booleanValue: - return value_.bool_ ? 1 : 0; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to Int64."); -} - -Value::UInt64 Value::asUInt64() const { - switch (type_) { - case intValue: - JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range"); - return UInt64(value_.int_); - case uintValue: - return UInt64(value_.uint_); - case realValue: - JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64), - "double out of UInt64 range"); - return UInt64(value_.real_); - case nullValue: - return 0; - case booleanValue: - return value_.bool_ ? 1 : 0; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to UInt64."); -} -#endif // if defined(JSON_HAS_INT64) - -LargestInt Value::asLargestInt() const { -#if defined(JSON_NO_INT64) - return asInt(); -#else - return asInt64(); -#endif -} - -LargestUInt Value::asLargestUInt() const { -#if defined(JSON_NO_INT64) - return asUInt(); -#else - return asUInt64(); -#endif -} - -double Value::asDouble() const { - switch (type_) { - case intValue: - return static_cast(value_.int_); - case uintValue: -#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - return static_cast(value_.uint_); -#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - return integerToDouble(value_.uint_); -#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - case realValue: - return value_.real_; - case nullValue: - return 0.0; - case booleanValue: - return value_.bool_ ? 1.0 : 0.0; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to double."); -} - -float Value::asFloat() const { - switch (type_) { - case intValue: - return static_cast(value_.int_); - case uintValue: -#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - return static_cast(value_.uint_); -#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - // This can fail (silently?) if the value is bigger than MAX_FLOAT. - return static_cast(integerToDouble(value_.uint_)); -#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - case realValue: - return static_cast(value_.real_); - case nullValue: - return 0.0; - case booleanValue: - return value_.bool_ ? 1.0f : 0.0f; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to float."); -} - -bool Value::asBool() const { - switch (type_) { - case booleanValue: - return value_.bool_; - case nullValue: - return false; - case intValue: - return value_.int_ ? true : false; - case uintValue: - return value_.uint_ ? true : false; - case realValue: - // This is kind of strange. Not recommended. - return (value_.real_ != 0.0) ? true : false; - default: - break; - } - JSON_FAIL_MESSAGE("Value is not convertible to bool."); -} - -bool Value::isConvertibleTo(ValueType other) const { - switch (other) { - case nullValue: - return (isNumeric() && asDouble() == 0.0) || - (type_ == booleanValue && value_.bool_ == false) || - (type_ == stringValue && asString().empty()) || - (type_ == arrayValue && value_.map_->size() == 0) || - (type_ == objectValue && value_.map_->size() == 0) || - type_ == nullValue; - case intValue: - return isInt() || - (type_ == realValue && InRange(value_.real_, minInt, maxInt)) || - type_ == booleanValue || type_ == nullValue; - case uintValue: - return isUInt() || - (type_ == realValue && InRange(value_.real_, 0, maxUInt)) || - type_ == booleanValue || type_ == nullValue; - case realValue: - return isNumeric() || type_ == booleanValue || type_ == nullValue; - case booleanValue: - return isNumeric() || type_ == booleanValue || type_ == nullValue; - case stringValue: - return isNumeric() || type_ == booleanValue || type_ == stringValue || - type_ == nullValue; - case arrayValue: - return type_ == arrayValue || type_ == nullValue; - case objectValue: - return type_ == objectValue || type_ == nullValue; - } - JSON_ASSERT_UNREACHABLE; - return false; -} - -/// Number of values in array or object -ArrayIndex Value::size() const { - switch (type_) { - case nullValue: - case intValue: - case uintValue: - case realValue: - case booleanValue: - case stringValue: - return 0; - case arrayValue: // size of the array is highest index + 1 - if (!value_.map_->empty()) { - ObjectValues::const_iterator itLast = value_.map_->end(); - --itLast; - return (*itLast).first.index() + 1; - } - return 0; - case objectValue: - return ArrayIndex(value_.map_->size()); - } - JSON_ASSERT_UNREACHABLE; - return 0; // unreachable; -} - -bool Value::empty() const { - if (isNull() || isArray() || isObject()) - return size() == 0u; - else - return false; -} - -bool Value::operator!() const { return isNull(); } - -void Value::clear() { - JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || - type_ == objectValue, - "in Json::Value::clear(): requires complex value"); - start_ = 0; - limit_ = 0; - switch (type_) { - case arrayValue: - case objectValue: - value_.map_->clear(); - break; - default: - break; - } -} - -void Value::resize(ArrayIndex newSize) { - JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue, - "in Json::Value::resize(): requires arrayValue"); - if (type_ == nullValue) - *this = Value(arrayValue); - ArrayIndex oldSize = size(); - if (newSize == 0) - clear(); - else if (newSize > oldSize) - (*this)[newSize - 1]; - else { - for (ArrayIndex index = newSize; index < oldSize; ++index) { - value_.map_->erase(index); - } - JSON_ASSERT(size() == newSize); - } -} - -Value& Value::operator[](ArrayIndex index) { - JSON_ASSERT_MESSAGE( - type_ == nullValue || type_ == arrayValue, - "in Json::Value::operator[](ArrayIndex): requires arrayValue"); - if (type_ == nullValue) - *this = Value(arrayValue); - CZString key(index); - ObjectValues::iterator it = value_.map_->lower_bound(key); - if (it != value_.map_->end() && (*it).first == key) - return (*it).second; - - ObjectValues::value_type defaultValue(key, nullSingleton()); - it = value_.map_->insert(it, defaultValue); - return (*it).second; -} - -Value& Value::operator[](int index) { - JSON_ASSERT_MESSAGE( - index >= 0, - "in Json::Value::operator[](int index): index cannot be negative"); - return (*this)[ArrayIndex(index)]; -} - -const Value& Value::operator[](ArrayIndex index) const { - JSON_ASSERT_MESSAGE( - type_ == nullValue || type_ == arrayValue, - "in Json::Value::operator[](ArrayIndex)const: requires arrayValue"); - if (type_ == nullValue) - return nullSingleton(); - CZString key(index); - ObjectValues::const_iterator it = value_.map_->find(key); - if (it == value_.map_->end()) - return nullSingleton(); - return (*it).second; -} - -const Value& Value::operator[](int index) const { - JSON_ASSERT_MESSAGE( - index >= 0, - "in Json::Value::operator[](int index) const: index cannot be negative"); - return (*this)[ArrayIndex(index)]; -} - -void Value::initBasic(ValueType vtype, bool allocated) { - type_ = vtype; - allocated_ = allocated; - comments_ = 0; - start_ = 0; - limit_ = 0; -} - -// Access an object value by name, create a null member if it does not exist. -// @pre Type of '*this' is object or null. -// @param key is null-terminated. -Value& Value::resolveReference(const char* key) { - JSON_ASSERT_MESSAGE( - type_ == nullValue || type_ == objectValue, - "in Json::Value::resolveReference(): requires objectValue"); - if (type_ == nullValue) - *this = Value(objectValue); - CZString actualKey( - key, static_cast(strlen(key)), CZString::noDuplication); // NOTE! - ObjectValues::iterator it = value_.map_->lower_bound(actualKey); - if (it != value_.map_->end() && (*it).first == actualKey) - return (*it).second; - - ObjectValues::value_type defaultValue(actualKey, nullSingleton()); - it = value_.map_->insert(it, defaultValue); - Value& value = (*it).second; - return value; -} - -// @param key is not null-terminated. -Value& Value::resolveReference(char const* key, char const* cend) -{ - JSON_ASSERT_MESSAGE( - type_ == nullValue || type_ == objectValue, - "in Json::Value::resolveReference(key, end): requires objectValue"); - if (type_ == nullValue) - *this = Value(objectValue); - CZString actualKey( - key, static_cast(cend-key), CZString::duplicateOnCopy); - ObjectValues::iterator it = value_.map_->lower_bound(actualKey); - if (it != value_.map_->end() && (*it).first == actualKey) - return (*it).second; - - ObjectValues::value_type defaultValue(actualKey, nullSingleton()); - it = value_.map_->insert(it, defaultValue); - Value& value = (*it).second; - return value; -} - -Value Value::get(ArrayIndex index, const Value& defaultValue) const { - const Value* value = &((*this)[index]); - return value == &nullSingleton() ? defaultValue : *value; -} - -bool Value::isValidIndex(ArrayIndex index) const { return index < size(); } - -Value const* Value::find(char const* key, char const* cend) const -{ - JSON_ASSERT_MESSAGE( - type_ == nullValue || type_ == objectValue, - "in Json::Value::find(key, end, found): requires objectValue or nullValue"); - if (type_ == nullValue) return NULL; - CZString actualKey(key, static_cast(cend-key), CZString::noDuplication); - ObjectValues::const_iterator it = value_.map_->find(actualKey); - if (it == value_.map_->end()) return NULL; - return &(*it).second; -} -const Value& Value::operator[](const char* key) const -{ - Value const* found = find(key, key + strlen(key)); - if (!found) return nullSingleton(); - return *found; -} -Value const& Value::operator[](JSONCPP_STRING const& key) const -{ - Value const* found = find(key.data(), key.data() + key.length()); - if (!found) return nullSingleton(); - return *found; -} - -Value& Value::operator[](const char* key) { - return resolveReference(key, key + strlen(key)); -} - -Value& Value::operator[](const JSONCPP_STRING& key) { - return resolveReference(key.data(), key.data() + key.length()); -} - -Value& Value::operator[](const StaticString& key) { - return resolveReference(key.c_str()); -} - -#ifdef JSON_USE_CPPTL -Value& Value::operator[](const CppTL::ConstString& key) { - return resolveReference(key.c_str(), key.end_c_str()); -} -Value const& Value::operator[](CppTL::ConstString const& key) const -{ - Value const* found = find(key.c_str(), key.end_c_str()); - if (!found) return nullSingleton(); - return *found; -} -#endif - -Value& Value::append(const Value& value) { return (*this)[size()] = value; } - -#if JSON_HAS_RVALUE_REFERENCES - Value& Value::append(Value&& value) { return (*this)[size()] = std::move(value); } -#endif - -Value Value::get(char const* key, char const* cend, Value const& defaultValue) const -{ - Value const* found = find(key, cend); - return !found ? defaultValue : *found; -} -Value Value::get(char const* key, Value const& defaultValue) const -{ - return get(key, key + strlen(key), defaultValue); -} -Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const -{ - return get(key.data(), key.data() + key.length(), defaultValue); -} - - -bool Value::removeMember(const char* key, const char* cend, Value* removed) -{ - if (type_ != objectValue) { - return false; - } - CZString actualKey(key, static_cast(cend-key), CZString::noDuplication); - ObjectValues::iterator it = value_.map_->find(actualKey); - if (it == value_.map_->end()) - return false; - *removed = it->second; - value_.map_->erase(it); - return true; -} -bool Value::removeMember(const char* key, Value* removed) -{ - return removeMember(key, key + strlen(key), removed); -} -bool Value::removeMember(JSONCPP_STRING const& key, Value* removed) -{ - return removeMember(key.data(), key.data() + key.length(), removed); -} -Value Value::removeMember(const char* key) -{ - JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, - "in Json::Value::removeMember(): requires objectValue"); - if (type_ == nullValue) - return nullSingleton(); - - Value removed; // null - removeMember(key, key + strlen(key), &removed); - return removed; // still null if removeMember() did nothing -} -Value Value::removeMember(const JSONCPP_STRING& key) -{ - JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, - "in Json::Value::removeMember(): requires objectValue"); - if (type_ == nullValue) - return nullSingleton(); - - Value removed; // null - removeMember(key.c_str(), key.c_str() + key.size(), &removed); - return removed; // still null if removeMember() did nothing -} - -bool Value::removeIndex(ArrayIndex index, Value* removed) { - if (type_ != arrayValue) { - return false; - } - CZString key(index); - ObjectValues::iterator it = value_.map_->find(key); - if (it == value_.map_->end()) { - return false; - } - *removed = it->second; - ArrayIndex oldSize = size(); - // shift left all items left, into the place of the "removed" - for (ArrayIndex i = index; i < (oldSize - 1); ++i){ - CZString keey(i); - (*value_.map_)[keey] = (*this)[i + 1]; - } - // erase the last one ("leftover") - CZString keyLast(oldSize - 1); - ObjectValues::iterator itLast = value_.map_->find(keyLast); - value_.map_->erase(itLast); - return true; -} - -#ifdef JSON_USE_CPPTL -Value Value::get(const CppTL::ConstString& key, - const Value& defaultValue) const { - return get(key.c_str(), key.end_c_str(), defaultValue); -} -#endif - -bool Value::isMember(char const* key, char const* cend) const -{ - Value const* value = find(key, cend); - return NULL != value; -} -bool Value::isMember(char const* key) const -{ - return isMember(key, key + strlen(key)); -} -bool Value::isMember(JSONCPP_STRING const& key) const -{ - return isMember(key.data(), key.data() + key.length()); -} - -#ifdef JSON_USE_CPPTL -bool Value::isMember(const CppTL::ConstString& key) const { - return isMember(key.c_str(), key.end_c_str()); -} -#endif - -Value::Members Value::getMemberNames() const { - JSON_ASSERT_MESSAGE( - type_ == nullValue || type_ == objectValue, - "in Json::Value::getMemberNames(), value must be objectValue"); - if (type_ == nullValue) - return Value::Members(); - Members members; - members.reserve(value_.map_->size()); - ObjectValues::const_iterator it = value_.map_->begin(); - ObjectValues::const_iterator itEnd = value_.map_->end(); - for (; it != itEnd; ++it) { - members.push_back(JSONCPP_STRING((*it).first.data(), - (*it).first.length())); - } - return members; -} -// -//# ifdef JSON_USE_CPPTL -// EnumMemberNames -// Value::enumMemberNames() const -//{ -// if ( type_ == objectValue ) -// { -// return CppTL::Enum::any( CppTL::Enum::transform( -// CppTL::Enum::keys( *(value_.map_), CppTL::Type() ), -// MemberNamesTransform() ) ); -// } -// return EnumMemberNames(); -//} -// -// -// EnumValues -// Value::enumValues() const -//{ -// if ( type_ == objectValue || type_ == arrayValue ) -// return CppTL::Enum::anyValues( *(value_.map_), -// CppTL::Type() ); -// return EnumValues(); -//} -// -//# endif - -static bool IsIntegral(double d) { - double integral_part; - return modf(d, &integral_part) == 0.0; -} - -bool Value::isNull() const { return type_ == nullValue; } - -bool Value::isBool() const { return type_ == booleanValue; } - -bool Value::isInt() const { - switch (type_) { - case intValue: -#if defined(JSON_HAS_INT64) - return value_.int_ >= minInt && value_.int_ <= maxInt; -#else - return true; -#endif - case uintValue: - return value_.uint_ <= UInt(maxInt); - case realValue: - return value_.real_ >= minInt && value_.real_ <= maxInt && - IsIntegral(value_.real_); - default: - break; - } - return false; -} - -bool Value::isUInt() const { - switch (type_) { - case intValue: -#if defined(JSON_HAS_INT64) - return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt); -#else - return value_.int_ >= 0; -#endif - case uintValue: -#if defined(JSON_HAS_INT64) - return value_.uint_ <= maxUInt; -#else - return true; -#endif - case realValue: - return value_.real_ >= 0 && value_.real_ <= maxUInt && - IsIntegral(value_.real_); - default: - break; - } - return false; -} - -bool Value::isInt64() const { -#if defined(JSON_HAS_INT64) - switch (type_) { - case intValue: - return true; - case uintValue: - return value_.uint_ <= UInt64(maxInt64); - case realValue: - // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a - // double, so double(maxInt64) will be rounded up to 2^63. Therefore we - // require the value to be strictly less than the limit. - return value_.real_ >= double(minInt64) && - value_.real_ < double(maxInt64) && IsIntegral(value_.real_); - default: - break; - } -#endif // JSON_HAS_INT64 - return false; -} - -bool Value::isUInt64() const { -#if defined(JSON_HAS_INT64) - switch (type_) { - case intValue: - return value_.int_ >= 0; - case uintValue: - return true; - case realValue: - // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a - // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we - // require the value to be strictly less than the limit. - return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble && - IsIntegral(value_.real_); - default: - break; - } -#endif // JSON_HAS_INT64 - return false; -} - -bool Value::isIntegral() const { - switch (type_) { - case intValue: - case uintValue: - return true; - case realValue: -#if defined(JSON_HAS_INT64) - // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a - // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we - // require the value to be strictly less than the limit. - return value_.real_ >= double(minInt64) && value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_); -#else - return value_.real_ >= minInt && value_.real_ <= maxUInt && IsIntegral(value_.real_); -#endif // JSON_HAS_INT64 - default: - break; - } - return false; -} - -bool Value::isDouble() const { return type_ == intValue || type_ == uintValue || type_ == realValue; } - -bool Value::isNumeric() const { return isDouble(); } - -bool Value::isString() const { return type_ == stringValue; } - -bool Value::isArray() const { return type_ == arrayValue; } - -bool Value::isObject() const { return type_ == objectValue; } - -void Value::setComment(const char* comment, size_t len, CommentPlacement placement) { - if (!comments_) - comments_ = new CommentInfo[numberOfCommentPlacement]; - if ((len > 0) && (comment[len-1] == '\n')) { - // Always discard trailing newline, to aid indentation. - len -= 1; - } - comments_[placement].setComment(comment, len); -} - -void Value::setComment(const char* comment, CommentPlacement placement) { - setComment(comment, strlen(comment), placement); -} - -void Value::setComment(const JSONCPP_STRING& comment, CommentPlacement placement) { - setComment(comment.c_str(), comment.length(), placement); -} - -bool Value::hasComment(CommentPlacement placement) const { - return comments_ != 0 && comments_[placement].comment_ != 0; -} - -JSONCPP_STRING Value::getComment(CommentPlacement placement) const { - if (hasComment(placement)) - return comments_[placement].comment_; - return ""; -} - -void Value::setOffsetStart(ptrdiff_t start) { start_ = start; } - -void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; } - -ptrdiff_t Value::getOffsetStart() const { return start_; } - -ptrdiff_t Value::getOffsetLimit() const { return limit_; } - -JSONCPP_STRING Value::toStyledString() const { - StreamWriterBuilder builder; - - JSONCPP_STRING out = this->hasComment(commentBefore) ? "\n" : ""; - out += Json::writeString(builder, *this); - out += "\n"; - - return out; -} - -Value::const_iterator Value::begin() const { - switch (type_) { - case arrayValue: - case objectValue: - if (value_.map_) - return const_iterator(value_.map_->begin()); - break; - default: - break; - } - return const_iterator(); -} - -Value::const_iterator Value::end() const { - switch (type_) { - case arrayValue: - case objectValue: - if (value_.map_) - return const_iterator(value_.map_->end()); - break; - default: - break; - } - return const_iterator(); -} - -Value::iterator Value::begin() { - switch (type_) { - case arrayValue: - case objectValue: - if (value_.map_) - return iterator(value_.map_->begin()); - break; - default: - break; - } - return iterator(); -} - -Value::iterator Value::end() { - switch (type_) { - case arrayValue: - case objectValue: - if (value_.map_) - return iterator(value_.map_->end()); - break; - default: - break; - } - return iterator(); -} - -// class PathArgument -// ////////////////////////////////////////////////////////////////// - -PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {} - -PathArgument::PathArgument(ArrayIndex index) - : key_(), index_(index), kind_(kindIndex) {} - -PathArgument::PathArgument(const char* key) - : key_(key), index_(), kind_(kindKey) {} - -PathArgument::PathArgument(const JSONCPP_STRING& key) - : key_(key.c_str()), index_(), kind_(kindKey) {} - -// class Path -// ////////////////////////////////////////////////////////////////// - -Path::Path(const JSONCPP_STRING& path, - const PathArgument& a1, - const PathArgument& a2, - const PathArgument& a3, - const PathArgument& a4, - const PathArgument& a5) { - InArgs in; - in.reserve(5); - in.push_back(&a1); - in.push_back(&a2); - in.push_back(&a3); - in.push_back(&a4); - in.push_back(&a5); - makePath(path, in); -} - -void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) { - const char* current = path.c_str(); - const char* end = current + path.length(); - InArgs::const_iterator itInArg = in.begin(); - while (current != end) { - if (*current == '[') { - ++current; - if (*current == '%') - addPathInArg(path, in, itInArg, PathArgument::kindIndex); - else { - ArrayIndex index = 0; - for (; current != end && *current >= '0' && *current <= '9'; ++current) - index = index * 10 + ArrayIndex(*current - '0'); - args_.push_back(index); - } - if (current == end || *++current != ']') - invalidPath(path, int(current - path.c_str())); - } else if (*current == '%') { - addPathInArg(path, in, itInArg, PathArgument::kindKey); - ++current; - } else if (*current == '.' || *current == ']') { - ++current; - } else { - const char* beginName = current; - while (current != end && !strchr("[.", *current)) - ++current; - args_.push_back(JSONCPP_STRING(beginName, current)); - } - } -} - -void Path::addPathInArg(const JSONCPP_STRING& /*path*/, - const InArgs& in, - InArgs::const_iterator& itInArg, - PathArgument::Kind kind) { - if (itInArg == in.end()) { - // Error: missing argument %d - } else if ((*itInArg)->kind_ != kind) { - // Error: bad argument type - } else { - args_.push_back(**itInArg++); - } -} - -void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/) { - // Error: invalid path. -} - -const Value& Path::resolve(const Value& root) const { - const Value* node = &root; - for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { - const PathArgument& arg = *it; - if (arg.kind_ == PathArgument::kindIndex) { - if (!node->isArray() || !node->isValidIndex(arg.index_)) { - // Error: unable to resolve path (array value expected at position... - return Value::null; - } - node = &((*node)[arg.index_]); - } else if (arg.kind_ == PathArgument::kindKey) { - if (!node->isObject()) { - // Error: unable to resolve path (object value expected at position...) - return Value::null; - } - node = &((*node)[arg.key_]); - if (node == &Value::nullSingleton()) { - // Error: unable to resolve path (object has no member named '' at - // position...) - return Value::null; - } - } - } - return *node; -} - -Value Path::resolve(const Value& root, const Value& defaultValue) const { - const Value* node = &root; - for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { - const PathArgument& arg = *it; - if (arg.kind_ == PathArgument::kindIndex) { - if (!node->isArray() || !node->isValidIndex(arg.index_)) - return defaultValue; - node = &((*node)[arg.index_]); - } else if (arg.kind_ == PathArgument::kindKey) { - if (!node->isObject()) - return defaultValue; - node = &((*node)[arg.key_]); - if (node == &Value::nullSingleton()) - return defaultValue; - } - } - return *node; -} - -Value& Path::make(Value& root) const { - Value* node = &root; - for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { - const PathArgument& arg = *it; - if (arg.kind_ == PathArgument::kindIndex) { - if (!node->isArray()) { - // Error: node is not an array at position ... - } - node = &((*node)[arg.index_]); - } else if (arg.kind_ == PathArgument::kindKey) { - if (!node->isObject()) { - // Error: node is not an object at position... - } - node = &((*node)[arg.key_]); - } - } - return *node; -} - -} // namespace Json - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: src/lib_json/json_value.cpp -// ////////////////////////////////////////////////////////////////////// - - - - - - -// ////////////////////////////////////////////////////////////////////// -// Beginning of content of file: src/lib_json/json_writer.cpp -// ////////////////////////////////////////////////////////////////////// - -// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -#if !defined(JSON_IS_AMALGAMATION) -#include -#include "json_tool.h" -#endif // if !defined(JSON_IS_AMALGAMATION) -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 -#include -#define isfinite _finite -#elif defined(__sun) && defined(__SVR4) //Solaris -#if !defined(isfinite) -#include -#define isfinite finite -#endif -#elif defined(_AIX) -#if !defined(isfinite) -#include -#define isfinite finite -#endif -#elif defined(__hpux) -#if !defined(isfinite) -#if defined(__ia64) && !defined(finite) -#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ - _Isfinitef(x) : _IsFinite(x))) -#else -#include -#define isfinite finite -#endif -#endif -#else -#include -#if !(defined(__QNXNTO__)) // QNX already defines isfinite -#define isfinite std::isfinite -#endif -#endif - -#if defined(_MSC_VER) -#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above -#define snprintf sprintf_s -#elif _MSC_VER >= 1900 // VC++ 14.0 and above -#define snprintf std::snprintf -#else -#define snprintf _snprintf -#endif -#elif defined(__ANDROID__) || defined(__QNXNTO__) -#define snprintf snprintf -#elif __cplusplus >= 201103L -#if !defined(__MINGW32__) && !defined(__CYGWIN__) -#define snprintf std::snprintf -#endif -#endif - -#if defined(__BORLANDC__) -#include -#define isfinite _finite -#define snprintf _snprintf -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 -// Disable warning about strdup being deprecated. -#pragma warning(disable : 4996) -#endif - -namespace Json { - -#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) -typedef std::unique_ptr StreamWriterPtr; -#else -typedef std::auto_ptr StreamWriterPtr; -#endif - -JSONCPP_STRING valueToString(LargestInt value) { - UIntToStringBuffer buffer; - char* current = buffer + sizeof(buffer); - if (value == Value::minLargestInt) { - uintToString(LargestUInt(Value::maxLargestInt) + 1, current); - *--current = '-'; - } else if (value < 0) { - uintToString(LargestUInt(-value), current); - *--current = '-'; - } else { - uintToString(LargestUInt(value), current); - } - assert(current >= buffer); - return current; -} - -JSONCPP_STRING valueToString(LargestUInt value) { - UIntToStringBuffer buffer; - char* current = buffer + sizeof(buffer); - uintToString(value, current); - assert(current >= buffer); - return current; -} - -#if defined(JSON_HAS_INT64) - -JSONCPP_STRING valueToString(Int value) { - return valueToString(LargestInt(value)); -} - -JSONCPP_STRING valueToString(UInt value) { - return valueToString(LargestUInt(value)); -} - -#endif // # if defined(JSON_HAS_INT64) - -namespace { -JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) { - // Allocate a buffer that is more than large enough to store the 16 digits of - // precision requested below. - char buffer[36]; - int len = -1; - - char formatString[15]; - snprintf(formatString, sizeof(formatString), "%%.%dg", precision); - - // Print into the buffer. We need not request the alternative representation - // that always has a decimal point because JSON doesn't distingish the - // concepts of reals and integers. - if (isfinite(value)) { - len = snprintf(buffer, sizeof(buffer), formatString, value); - fixNumericLocale(buffer, buffer + len); - - // try to ensure we preserve the fact that this was given to us as a double on input - if (!strchr(buffer, '.') && !strchr(buffer, 'e')) { - strcat(buffer, ".0"); - } - - } else { - // IEEE standard states that NaN values will not compare to themselves - if (value != value) { - len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); - } else if (value < 0) { - len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); - } else { - len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); - } - } - assert(len >= 0); - return buffer; -} -} - -JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); } - -JSONCPP_STRING valueToString(bool value) { return value ? "true" : "false"; } - -static bool isAnyCharRequiredQuoting(char const* s, size_t n) { - assert(s || !n); - - char const* const end = s + n; - for (char const* cur = s; cur < end; ++cur) { - if (*cur == '\\' || *cur == '\"' || *cur < ' ' - || static_cast(*cur) < 0x80) - return true; - } - return false; -} - -static unsigned int utf8ToCodepoint(const char*& s, const char* e) { - const unsigned int REPLACEMENT_CHARACTER = 0xFFFD; - - unsigned int firstByte = static_cast(*s); - - if (firstByte < 0x80) - return firstByte; - - if (firstByte < 0xE0) { - if (e - s < 2) - return REPLACEMENT_CHARACTER; - - unsigned int calculated = ((firstByte & 0x1F) << 6) - | (static_cast(s[1]) & 0x3F); - s += 1; - // oversized encoded characters are invalid - return calculated < 0x80 ? REPLACEMENT_CHARACTER : calculated; - } - - if (firstByte < 0xF0) { - if (e - s < 3) - return REPLACEMENT_CHARACTER; - - unsigned int calculated = ((firstByte & 0x0F) << 12) - | ((static_cast(s[1]) & 0x3F) << 6) - | (static_cast(s[2]) & 0x3F); - s += 2; - // surrogates aren't valid codepoints itself - // shouldn't be UTF-8 encoded - if (calculated >= 0xD800 && calculated >= 0xDFFF) - return REPLACEMENT_CHARACTER; - // oversized encoded characters are invalid - return calculated < 0x800 ? REPLACEMENT_CHARACTER : calculated; - } - - if (firstByte < 0xF8) { - if (e - s < 4) - return REPLACEMENT_CHARACTER; - - unsigned int calculated = ((firstByte & 0x07) << 24) - | ((static_cast(s[1]) & 0x3F) << 12) - | ((static_cast(s[2]) & 0x3F) << 6) - | (static_cast(s[3]) & 0x3F); - s += 3; - // oversized encoded characters are invalid - return calculated < 0x10000 ? REPLACEMENT_CHARACTER : calculated; - } - - return REPLACEMENT_CHARACTER; -} - -static const char hex2[] = - "000102030405060708090a0b0c0d0e0f" - "101112131415161718191a1b1c1d1e1f" - "202122232425262728292a2b2c2d2e2f" - "303132333435363738393a3b3c3d3e3f" - "404142434445464748494a4b4c4d4e4f" - "505152535455565758595a5b5c5d5e5f" - "606162636465666768696a6b6c6d6e6f" - "707172737475767778797a7b7c7d7e7f" - "808182838485868788898a8b8c8d8e8f" - "909192939495969798999a9b9c9d9e9f" - "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf" - "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" - "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf" - "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf" - "e0e1e2e3e4e5e6e7e8e9eaebecedeeef" - "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"; - -static JSONCPP_STRING toHex16Bit(unsigned int x) { - const unsigned int hi = (x >> 8) & 0xff; - const unsigned int lo = x & 0xff; - JSONCPP_STRING result(4, ' '); - result[0] = hex2[2 * hi]; - result[1] = hex2[2 * hi + 1]; - result[2] = hex2[2 * lo]; - result[3] = hex2[2 * lo + 1]; - return result; -} - -static JSONCPP_STRING valueToQuotedStringN(const char* value, unsigned length) { - if (value == NULL) - return ""; - - if (!isAnyCharRequiredQuoting(value, length)) - return JSONCPP_STRING("\"") + value + "\""; - // We have to walk value and escape any special characters. - // Appending to JSONCPP_STRING is not efficient, but this should be rare. - // (Note: forward slashes are *not* rare, but I am not escaping them.) - JSONCPP_STRING::size_type maxsize = - length * 2 + 3; // allescaped+quotes+NULL - JSONCPP_STRING result; - result.reserve(maxsize); // to avoid lots of mallocs - result += "\""; - char const* end = value + length; - for (const char* c = value; c != end; ++c) { - switch (*c) { - case '\"': - result += "\\\""; - break; - case '\\': - result += "\\\\"; - break; - case '\b': - result += "\\b"; - break; - case '\f': - result += "\\f"; - break; - case '\n': - result += "\\n"; - break; - case '\r': - result += "\\r"; - break; - case '\t': - result += "\\t"; - break; - // case '/': - // Even though \/ is considered a legal escape in JSON, a bare - // slash is also legal, so I see no reason to escape it. - // (I hope I am not misunderstanding something.) - // blep notes: actually escaping \/ may be useful in javascript to avoid = 0x20) - result += static_cast(cp); - else if (cp < 0x10000) { // codepoint is in Basic Multilingual Plane - result += "\\u"; - result += toHex16Bit(cp); - } - else { // codepoint is not in Basic Multilingual Plane - // convert to surrogate pair first - cp -= 0x10000; - result += "\\u"; - result += toHex16Bit((cp >> 10) + 0xD800); - result += "\\u"; - result += toHex16Bit((cp & 0x3FF) + 0xDC00); - } - } - break; - } - } - result += "\""; - return result; -} - -JSONCPP_STRING valueToQuotedString(const char* value) { - return valueToQuotedStringN(value, static_cast(strlen(value))); -} - -// Class Writer -// ////////////////////////////////////////////////////////////////// -Writer::~Writer() {} - -// Class FastWriter -// ////////////////////////////////////////////////////////////////// - -FastWriter::FastWriter() - : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), - omitEndingLineFeed_(false) {} - -void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } - -void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } - -void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } - -JSONCPP_STRING FastWriter::write(const Value& root) { - document_.clear(); - writeValue(root); - if (!omitEndingLineFeed_) - document_ += "\n"; - return document_; -} - -void FastWriter::writeValue(const Value& value) { - switch (value.type()) { - case nullValue: - if (!dropNullPlaceholders_) - document_ += "null"; - break; - case intValue: - document_ += valueToString(value.asLargestInt()); - break; - case uintValue: - document_ += valueToString(value.asLargestUInt()); - break; - case realValue: - document_ += valueToString(value.asDouble()); - break; - case stringValue: - { - // Is NULL possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) document_ += valueToQuotedStringN(str, static_cast(end-str)); - break; - } - case booleanValue: - document_ += valueToString(value.asBool()); - break; - case arrayValue: { - document_ += '['; - ArrayIndex size = value.size(); - for (ArrayIndex index = 0; index < size; ++index) { - if (index > 0) - document_ += ','; - writeValue(value[index]); - } - document_ += ']'; - } break; - case objectValue: { - Value::Members members(value.getMemberNames()); - document_ += '{'; - for (Value::Members::iterator it = members.begin(); it != members.end(); - ++it) { - const JSONCPP_STRING& name = *it; - if (it != members.begin()) - document_ += ','; - document_ += valueToQuotedStringN(name.data(), static_cast(name.length())); - document_ += yamlCompatiblityEnabled_ ? ": " : ":"; - writeValue(value[name]); - } - document_ += '}'; - } break; - } -} - -// Class StyledWriter -// ////////////////////////////////////////////////////////////////// - -StyledWriter::StyledWriter() - : rightMargin_(74), indentSize_(3), addChildValues_() {} - -JSONCPP_STRING StyledWriter::write(const Value& root) { - document_.clear(); - addChildValues_ = false; - indentString_.clear(); - writeCommentBeforeValue(root); - writeValue(root); - writeCommentAfterValueOnSameLine(root); - document_ += "\n"; - return document_; -} - -void StyledWriter::writeValue(const Value& value) { - switch (value.type()) { - case nullValue: - pushValue("null"); - break; - case intValue: - pushValue(valueToString(value.asLargestInt())); - break; - case uintValue: - pushValue(valueToString(value.asLargestUInt())); - break; - case realValue: - pushValue(valueToString(value.asDouble())); - break; - case stringValue: - { - // Is NULL possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); - else pushValue(""); - break; - } - case booleanValue: - pushValue(valueToString(value.asBool())); - break; - case arrayValue: - writeArrayValue(value); - break; - case objectValue: { - Value::Members members(value.getMemberNames()); - if (members.empty()) - pushValue("{}"); - else { - writeWithIndent("{"); - indent(); - Value::Members::iterator it = members.begin(); - for (;;) { - const JSONCPP_STRING& name = *it; - const Value& childValue = value[name]; - writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedString(name.c_str())); - document_ += " : "; - writeValue(childValue); - if (++it == members.end()) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - document_ += ','; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("}"); - } - } break; - } -} - -void StyledWriter::writeArrayValue(const Value& value) { - unsigned size = value.size(); - if (size == 0) - pushValue("[]"); - else { - bool isArrayMultiLine = isMultineArray(value); - if (isArrayMultiLine) { - writeWithIndent("["); - indent(); - bool hasChildValue = !childValues_.empty(); - unsigned index = 0; - for (;;) { - const Value& childValue = value[index]; - writeCommentBeforeValue(childValue); - if (hasChildValue) - writeWithIndent(childValues_[index]); - else { - writeIndent(); - writeValue(childValue); - } - if (++index == size) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - document_ += ','; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("]"); - } else // output on a single line - { - assert(childValues_.size() == size); - document_ += "[ "; - for (unsigned index = 0; index < size; ++index) { - if (index > 0) - document_ += ", "; - document_ += childValues_[index]; - } - document_ += " ]"; - } - } -} - -bool StyledWriter::isMultineArray(const Value& value) { - ArrayIndex const size = value.size(); - bool isMultiLine = size * 3 >= rightMargin_; - childValues_.clear(); - for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { - const Value& childValue = value[index]; - isMultiLine = ((childValue.isArray() || childValue.isObject()) && - childValue.size() > 0); - } - if (!isMultiLine) // check if line length > max line length - { - childValues_.reserve(size); - addChildValues_ = true; - ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' - for (ArrayIndex index = 0; index < size; ++index) { - if (hasCommentForValue(value[index])) { - isMultiLine = true; - } - writeValue(value[index]); - lineLength += static_cast(childValues_[index].length()); - } - addChildValues_ = false; - isMultiLine = isMultiLine || lineLength >= rightMargin_; - } - return isMultiLine; -} - -void StyledWriter::pushValue(const JSONCPP_STRING& value) { - if (addChildValues_) - childValues_.push_back(value); - else - document_ += value; -} - -void StyledWriter::writeIndent() { - if (!document_.empty()) { - char last = document_[document_.length() - 1]; - if (last == ' ') // already indented - return; - if (last != '\n') // Comments may add new-line - document_ += '\n'; - } - document_ += indentString_; -} - -void StyledWriter::writeWithIndent(const JSONCPP_STRING& value) { - writeIndent(); - document_ += value; -} - -void StyledWriter::indent() { indentString_ += JSONCPP_STRING(indentSize_, ' '); } - -void StyledWriter::unindent() { - assert(indentString_.size() >= indentSize_); - indentString_.resize(indentString_.size() - indentSize_); -} - -void StyledWriter::writeCommentBeforeValue(const Value& root) { - if (!root.hasComment(commentBefore)) - return; - - document_ += "\n"; - writeIndent(); - const JSONCPP_STRING& comment = root.getComment(commentBefore); - JSONCPP_STRING::const_iterator iter = comment.begin(); - while (iter != comment.end()) { - document_ += *iter; - if (*iter == '\n' && - ((iter+1) != comment.end() && *(iter + 1) == '/')) - writeIndent(); - ++iter; - } - - // Comments are stripped of trailing newlines, so add one here - document_ += "\n"; -} - -void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { - if (root.hasComment(commentAfterOnSameLine)) - document_ += " " + root.getComment(commentAfterOnSameLine); - - if (root.hasComment(commentAfter)) { - document_ += "\n"; - document_ += root.getComment(commentAfter); - document_ += "\n"; - } -} - -bool StyledWriter::hasCommentForValue(const Value& value) { - return value.hasComment(commentBefore) || - value.hasComment(commentAfterOnSameLine) || - value.hasComment(commentAfter); -} - -// Class StyledStreamWriter -// ////////////////////////////////////////////////////////////////// - -StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation) - : document_(NULL), rightMargin_(74), indentation_(indentation), - addChildValues_() {} - -void StyledStreamWriter::write(JSONCPP_OSTREAM& out, const Value& root) { - document_ = &out; - addChildValues_ = false; - indentString_.clear(); - indented_ = true; - writeCommentBeforeValue(root); - if (!indented_) writeIndent(); - indented_ = true; - writeValue(root); - writeCommentAfterValueOnSameLine(root); - *document_ << "\n"; - document_ = NULL; // Forget the stream, for safety. -} - -void StyledStreamWriter::writeValue(const Value& value) { - switch (value.type()) { - case nullValue: - pushValue("null"); - break; - case intValue: - pushValue(valueToString(value.asLargestInt())); - break; - case uintValue: - pushValue(valueToString(value.asLargestUInt())); - break; - case realValue: - pushValue(valueToString(value.asDouble())); - break; - case stringValue: - { - // Is NULL possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); - else pushValue(""); - break; - } - case booleanValue: - pushValue(valueToString(value.asBool())); - break; - case arrayValue: - writeArrayValue(value); - break; - case objectValue: { - Value::Members members(value.getMemberNames()); - if (members.empty()) - pushValue("{}"); - else { - writeWithIndent("{"); - indent(); - Value::Members::iterator it = members.begin(); - for (;;) { - const JSONCPP_STRING& name = *it; - const Value& childValue = value[name]; - writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedString(name.c_str())); - *document_ << " : "; - writeValue(childValue); - if (++it == members.end()) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *document_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("}"); - } - } break; - } -} - -void StyledStreamWriter::writeArrayValue(const Value& value) { - unsigned size = value.size(); - if (size == 0) - pushValue("[]"); - else { - bool isArrayMultiLine = isMultineArray(value); - if (isArrayMultiLine) { - writeWithIndent("["); - indent(); - bool hasChildValue = !childValues_.empty(); - unsigned index = 0; - for (;;) { - const Value& childValue = value[index]; - writeCommentBeforeValue(childValue); - if (hasChildValue) - writeWithIndent(childValues_[index]); - else { - if (!indented_) writeIndent(); - indented_ = true; - writeValue(childValue); - indented_ = false; - } - if (++index == size) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *document_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("]"); - } else // output on a single line - { - assert(childValues_.size() == size); - *document_ << "[ "; - for (unsigned index = 0; index < size; ++index) { - if (index > 0) - *document_ << ", "; - *document_ << childValues_[index]; - } - *document_ << " ]"; - } - } -} - -bool StyledStreamWriter::isMultineArray(const Value& value) { - ArrayIndex const size = value.size(); - bool isMultiLine = size * 3 >= rightMargin_; - childValues_.clear(); - for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { - const Value& childValue = value[index]; - isMultiLine = ((childValue.isArray() || childValue.isObject()) && - childValue.size() > 0); - } - if (!isMultiLine) // check if line length > max line length - { - childValues_.reserve(size); - addChildValues_ = true; - ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' - for (ArrayIndex index = 0; index < size; ++index) { - if (hasCommentForValue(value[index])) { - isMultiLine = true; - } - writeValue(value[index]); - lineLength += static_cast(childValues_[index].length()); - } - addChildValues_ = false; - isMultiLine = isMultiLine || lineLength >= rightMargin_; - } - return isMultiLine; -} - -void StyledStreamWriter::pushValue(const JSONCPP_STRING& value) { - if (addChildValues_) - childValues_.push_back(value); - else - *document_ << value; -} - -void StyledStreamWriter::writeIndent() { - // blep intended this to look at the so-far-written string - // to determine whether we are already indented, but - // with a stream we cannot do that. So we rely on some saved state. - // The caller checks indented_. - *document_ << '\n' << indentString_; -} - -void StyledStreamWriter::writeWithIndent(const JSONCPP_STRING& value) { - if (!indented_) writeIndent(); - *document_ << value; - indented_ = false; -} - -void StyledStreamWriter::indent() { indentString_ += indentation_; } - -void StyledStreamWriter::unindent() { - assert(indentString_.size() >= indentation_.size()); - indentString_.resize(indentString_.size() - indentation_.size()); -} - -void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { - if (!root.hasComment(commentBefore)) - return; - - if (!indented_) writeIndent(); - const JSONCPP_STRING& comment = root.getComment(commentBefore); - JSONCPP_STRING::const_iterator iter = comment.begin(); - while (iter != comment.end()) { - *document_ << *iter; - if (*iter == '\n' && - ((iter+1) != comment.end() && *(iter + 1) == '/')) - // writeIndent(); // would include newline - *document_ << indentString_; - ++iter; - } - indented_ = false; -} - -void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { - if (root.hasComment(commentAfterOnSameLine)) - *document_ << ' ' << root.getComment(commentAfterOnSameLine); - - if (root.hasComment(commentAfter)) { - writeIndent(); - *document_ << root.getComment(commentAfter); - } - indented_ = false; -} - -bool StyledStreamWriter::hasCommentForValue(const Value& value) { - return value.hasComment(commentBefore) || - value.hasComment(commentAfterOnSameLine) || - value.hasComment(commentAfter); -} - -////////////////////////// -// BuiltStyledStreamWriter - -/// Scoped enums are not available until C++11. -struct CommentStyle { - /// Decide whether to write comments. - enum Enum { - None, ///< Drop all comments. - Most, ///< Recover odd behavior of previous versions (not implemented yet). - All ///< Keep all comments. - }; -}; - -struct BuiltStyledStreamWriter : public StreamWriter -{ - BuiltStyledStreamWriter( - JSONCPP_STRING const& indentation, - CommentStyle::Enum cs, - JSONCPP_STRING const& colonSymbol, - JSONCPP_STRING const& nullSymbol, - JSONCPP_STRING const& endingLineFeedSymbol, - bool useSpecialFloats, - unsigned int precision); - int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE; -private: - void writeValue(Value const& value); - void writeArrayValue(Value const& value); - bool isMultineArray(Value const& value); - void pushValue(JSONCPP_STRING const& value); - void writeIndent(); - void writeWithIndent(JSONCPP_STRING const& value); - void indent(); - void unindent(); - void writeCommentBeforeValue(Value const& root); - void writeCommentAfterValueOnSameLine(Value const& root); - static bool hasCommentForValue(const Value& value); - - typedef std::vector ChildValues; - - ChildValues childValues_; - JSONCPP_STRING indentString_; - unsigned int rightMargin_; - JSONCPP_STRING indentation_; - CommentStyle::Enum cs_; - JSONCPP_STRING colonSymbol_; - JSONCPP_STRING nullSymbol_; - JSONCPP_STRING endingLineFeedSymbol_; - bool addChildValues_ : 1; - bool indented_ : 1; - bool useSpecialFloats_ : 1; - unsigned int precision_; -}; -BuiltStyledStreamWriter::BuiltStyledStreamWriter( - JSONCPP_STRING const& indentation, - CommentStyle::Enum cs, - JSONCPP_STRING const& colonSymbol, - JSONCPP_STRING const& nullSymbol, - JSONCPP_STRING const& endingLineFeedSymbol, - bool useSpecialFloats, - unsigned int precision) - : rightMargin_(74) - , indentation_(indentation) - , cs_(cs) - , colonSymbol_(colonSymbol) - , nullSymbol_(nullSymbol) - , endingLineFeedSymbol_(endingLineFeedSymbol) - , addChildValues_(false) - , indented_(false) - , useSpecialFloats_(useSpecialFloats) - , precision_(precision) -{ -} -int BuiltStyledStreamWriter::write(Value const& root, JSONCPP_OSTREAM* sout) -{ - sout_ = sout; - addChildValues_ = false; - indented_ = true; - indentString_.clear(); - writeCommentBeforeValue(root); - if (!indented_) writeIndent(); - indented_ = true; - writeValue(root); - writeCommentAfterValueOnSameLine(root); - *sout_ << endingLineFeedSymbol_; - sout_ = NULL; - return 0; -} -void BuiltStyledStreamWriter::writeValue(Value const& value) { - switch (value.type()) { - case nullValue: - pushValue(nullSymbol_); - break; - case intValue: - pushValue(valueToString(value.asLargestInt())); - break; - case uintValue: - pushValue(valueToString(value.asLargestUInt())); - break; - case realValue: - pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); - break; - case stringValue: - { - // Is NULL is possible for value.string_? No. - char const* str; - char const* end; - bool ok = value.getString(&str, &end); - if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); - else pushValue(""); - break; - } - case booleanValue: - pushValue(valueToString(value.asBool())); - break; - case arrayValue: - writeArrayValue(value); - break; - case objectValue: { - Value::Members members(value.getMemberNames()); - if (members.empty()) - pushValue("{}"); - else { - writeWithIndent("{"); - indent(); - Value::Members::iterator it = members.begin(); - for (;;) { - JSONCPP_STRING const& name = *it; - Value const& childValue = value[name]; - writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedStringN(name.data(), static_cast(name.length()))); - *sout_ << colonSymbol_; - writeValue(childValue); - if (++it == members.end()) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *sout_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("}"); - } - } break; - } -} - -void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { - unsigned size = value.size(); - if (size == 0) - pushValue("[]"); - else { - bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); - if (isMultiLine) { - writeWithIndent("["); - indent(); - bool hasChildValue = !childValues_.empty(); - unsigned index = 0; - for (;;) { - Value const& childValue = value[index]; - writeCommentBeforeValue(childValue); - if (hasChildValue) - writeWithIndent(childValues_[index]); - else { - if (!indented_) writeIndent(); - indented_ = true; - writeValue(childValue); - indented_ = false; - } - if (++index == size) { - writeCommentAfterValueOnSameLine(childValue); - break; - } - *sout_ << ","; - writeCommentAfterValueOnSameLine(childValue); - } - unindent(); - writeWithIndent("]"); - } else // output on a single line - { - assert(childValues_.size() == size); - *sout_ << "["; - if (!indentation_.empty()) *sout_ << " "; - for (unsigned index = 0; index < size; ++index) { - if (index > 0) - *sout_ << ((!indentation_.empty()) ? ", " : ","); - *sout_ << childValues_[index]; - } - if (!indentation_.empty()) *sout_ << " "; - *sout_ << "]"; - } - } -} - -bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { - ArrayIndex const size = value.size(); - bool isMultiLine = size * 3 >= rightMargin_; - childValues_.clear(); - for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { - Value const& childValue = value[index]; - isMultiLine = ((childValue.isArray() || childValue.isObject()) && - childValue.size() > 0); - } - if (!isMultiLine) // check if line length > max line length - { - childValues_.reserve(size); - addChildValues_ = true; - ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' - for (ArrayIndex index = 0; index < size; ++index) { - if (hasCommentForValue(value[index])) { - isMultiLine = true; - } - writeValue(value[index]); - lineLength += static_cast(childValues_[index].length()); - } - addChildValues_ = false; - isMultiLine = isMultiLine || lineLength >= rightMargin_; - } - return isMultiLine; -} - -void BuiltStyledStreamWriter::pushValue(JSONCPP_STRING const& value) { - if (addChildValues_) - childValues_.push_back(value); - else - *sout_ << value; -} - -void BuiltStyledStreamWriter::writeIndent() { - // blep intended this to look at the so-far-written string - // to determine whether we are already indented, but - // with a stream we cannot do that. So we rely on some saved state. - // The caller checks indented_. - - if (!indentation_.empty()) { - // In this case, drop newlines too. - *sout_ << '\n' << indentString_; - } -} - -void BuiltStyledStreamWriter::writeWithIndent(JSONCPP_STRING const& value) { - if (!indented_) writeIndent(); - *sout_ << value; - indented_ = false; -} - -void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } - -void BuiltStyledStreamWriter::unindent() { - assert(indentString_.size() >= indentation_.size()); - indentString_.resize(indentString_.size() - indentation_.size()); -} - -void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { - if (cs_ == CommentStyle::None) return; - if (!root.hasComment(commentBefore)) - return; - - if (!indented_) writeIndent(); - const JSONCPP_STRING& comment = root.getComment(commentBefore); - JSONCPP_STRING::const_iterator iter = comment.begin(); - while (iter != comment.end()) { - *sout_ << *iter; - if (*iter == '\n' && - ((iter+1) != comment.end() && *(iter + 1) == '/')) - // writeIndent(); // would write extra newline - *sout_ << indentString_; - ++iter; - } - indented_ = false; -} - -void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { - if (cs_ == CommentStyle::None) return; - if (root.hasComment(commentAfterOnSameLine)) - *sout_ << " " + root.getComment(commentAfterOnSameLine); - - if (root.hasComment(commentAfter)) { - writeIndent(); - *sout_ << root.getComment(commentAfter); - } -} - -// static -bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { - return value.hasComment(commentBefore) || - value.hasComment(commentAfterOnSameLine) || - value.hasComment(commentAfter); -} - -/////////////// -// StreamWriter - -StreamWriter::StreamWriter() - : sout_(NULL) -{ -} -StreamWriter::~StreamWriter() -{ -} -StreamWriter::Factory::~Factory() -{} -StreamWriterBuilder::StreamWriterBuilder() -{ - setDefaults(&settings_); -} -StreamWriterBuilder::~StreamWriterBuilder() -{} -StreamWriter* StreamWriterBuilder::newStreamWriter() const -{ - JSONCPP_STRING indentation = settings_["indentation"].asString(); - JSONCPP_STRING cs_str = settings_["commentStyle"].asString(); - bool eyc = settings_["enableYAMLCompatibility"].asBool(); - bool dnp = settings_["dropNullPlaceholders"].asBool(); - bool usf = settings_["useSpecialFloats"].asBool(); - unsigned int pre = settings_["precision"].asUInt(); - CommentStyle::Enum cs = CommentStyle::All; - if (cs_str == "All") { - cs = CommentStyle::All; - } else if (cs_str == "None") { - cs = CommentStyle::None; - } else { - throwRuntimeError("commentStyle must be 'All' or 'None'"); - } - JSONCPP_STRING colonSymbol = " : "; - if (eyc) { - colonSymbol = ": "; - } else if (indentation.empty()) { - colonSymbol = ":"; - } - JSONCPP_STRING nullSymbol = "null"; - if (dnp) { - nullSymbol.clear(); - } - if (pre > 17) pre = 17; - JSONCPP_STRING endingLineFeedSymbol; - return new BuiltStyledStreamWriter( - indentation, cs, - colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); -} -static void getValidWriterKeys(std::set* valid_keys) -{ - valid_keys->clear(); - valid_keys->insert("indentation"); - valid_keys->insert("commentStyle"); - valid_keys->insert("enableYAMLCompatibility"); - valid_keys->insert("dropNullPlaceholders"); - valid_keys->insert("useSpecialFloats"); - valid_keys->insert("precision"); -} -bool StreamWriterBuilder::validate(Json::Value* invalid) const -{ - Json::Value my_invalid; - if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL - Json::Value& inv = *invalid; - std::set valid_keys; - getValidWriterKeys(&valid_keys); - Value::Members keys = settings_.getMemberNames(); - size_t n = keys.size(); - for (size_t i = 0; i < n; ++i) { - JSONCPP_STRING const& key = keys[i]; - if (valid_keys.find(key) == valid_keys.end()) { - inv[key] = settings_[key]; - } - } - return 0u == inv.size(); -} -Value& StreamWriterBuilder::operator[](JSONCPP_STRING key) -{ - return settings_[key]; -} -// static -void StreamWriterBuilder::setDefaults(Json::Value* settings) -{ - //! [StreamWriterBuilderDefaults] - (*settings)["commentStyle"] = "All"; - (*settings)["indentation"] = "\t"; - (*settings)["enableYAMLCompatibility"] = false; - (*settings)["dropNullPlaceholders"] = false; - (*settings)["useSpecialFloats"] = false; - (*settings)["precision"] = 17; - //! [StreamWriterBuilderDefaults] -} - -JSONCPP_STRING writeString(StreamWriter::Factory const& builder, Value const& root) { - JSONCPP_OSTRINGSTREAM sout; - StreamWriterPtr const writer(builder.newStreamWriter()); - writer->write(root, &sout); - return sout.str(); -} - -JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM& sout, Value const& root) { - StreamWriterBuilder builder; - StreamWriterPtr const writer(builder.newStreamWriter()); - writer->write(root, &sout); - return sout; -} - -} // namespace Json - -// ////////////////////////////////////////////////////////////////////// -// End of content of file: src/lib_json/json_writer.cpp -// ////////////////////////////////////////////////////////////////////// - - - - - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5766e9a..52b6dd6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,11 +2,12 @@ set(BINACPP_INSTALL_DIR ${CMAKE_SOURCE_DIR}/lib/libbinacpp) set(CMAKE_INSTALL_DIR ${BINACPP_INSTALL_DIR}/lib) set(CMAKE_INSTALL_INCLUDEDIR ${BINACPP_INSTALL_DIR}/include) +include_directories(${jsoncpp_SOURCE_DIR}/include) + file(GLOB SRCS *.cpp) add_library(binacpp SHARED ${SRCS}) -target_link_libraries(binacpp curl crypto websockets) - -add_dependencies(binacpp jsoncpp) +add_dependencies(binacpp jsoncpp_lib_static) +target_link_libraries(binacpp jsoncpp_lib_static curl crypto websockets) file(GLOB HEADERS *.h) set_target_properties(binacpp PROPERTIES PUBLIC_HEADER "${HEADERS}") diff --git a/src/binacpp.h b/src/binacpp.h index ae649fa..10a108b 100644 --- a/src/binacpp.h +++ b/src/binacpp.h @@ -2,7 +2,6 @@ /* Author: tensaix2j Date : 2017/10/15 - C++ library for Binance API. */ @@ -10,7 +9,6 @@ #ifndef BINACPP_H #define BINACPP_H - #include #include #include @@ -26,75 +24,36 @@ #include #include - - #define BINANCE_HOST "https://api.binance.com" - using namespace std; class BinaCPP { - - static string api_key; - static string secret_key; - static CURL* curl; - - - public: - - - static void curl_api( string &url, string &result_json ); static void curl_api_with_header( string &url, string &result_json , vector &extra_http_header, string &post_data, string &action ); static size_t curl_cb( void *content, size_t size, size_t nmemb, string *buffer ) ; - static void init( string &api_key, string &secret_key); static void cleanup(); - // Public API static void get_exchangeInfo( Json::Value &json_result); - static void get_serverTime( Json::Value &json_result); - + static void get_serverTime( Json::Value &json_result); static void get_allPrices( Json::Value &json_result ); static double get_price( const char *symbol ); - static void get_allBookTickers( Json::Value &json_result ); static void get_bookTicker( const char *symbol, Json::Value &json_result ) ; - static void get_depth( const char *symbol, int limit, Json::Value &json_result ); - static void get_aggTrades( const char *symbol, int fromId, time_t startTime, time_t endTime, int limit, Json::Value &json_result ); - static void get_24hr( const char *symbol, Json::Value &json_result ); + static void get_aggTrades( const char *symbol, int fromId, time_t startTime, time_t endTime, int limit, Json::Value &json_result ); + static void get_24hr( const char *symbol, Json::Value &json_result ); static void get_klines( const char *symbol, const char *interval, int limit, time_t startTime, time_t endTime, Json::Value &json_result ); - // API + Secret keys required static void get_account( long recvWindow , Json::Value &json_result ); - - static void get_myTrades( - const char *symbol, - int limit, - long fromId, - long recvWindow, - Json::Value &json_result - ); - - static void get_openOrders( - const char *symbol, - long recvWindow, - Json::Value &json_result - ) ; - - - static void get_allOrders( - const char *symbol, - long orderId, - int limit, - long recvWindow, - Json::Value &json_result - ); + static void get_myTrades(const char *symbol, int limit, long fromId, long recvWindow, Json::Value &json_result); + static void get_openOrders(const char *symbol, long recvWindow, Json::Value &json_result); + static void get_allOrders(const char *symbol, long orderId, int limit, long recvWindow, Json::Value &json_result); static void send_order( const char *symbol, @@ -132,7 +91,6 @@ class BinaCPP { static void keep_userDataStream( const char *listenKey ); static void close_userDataStream( const char *listenKey ); - // WAPI static void withdraw( const char *asset, @@ -164,7 +122,10 @@ class BinaCPP { long recvWindow, Json::Value &json_result ); - + private: + static string api_key; + static string secret_key; + static CURL* curl; };