2626#include < cstdio>
2727#include < algorithm>
2828#include < tuple>
29+ #include < cctype>
2930
3031namespace io {
3132
@@ -55,6 +56,13 @@ static void doDiv9(uint32_t E, std::vector<uint32_t>& W) {
5556 doDiv3 (E, W);
5657}
5758
59+ static std::string toLower (const std::string& s){
60+ std::string t = s;
61+ std::transform (t.begin (), t.end (), t.begin (),
62+ [](unsigned char c){ return char (std::tolower (c)); });
63+ return t;
64+ }
65+
5866std::tuple<bool , std::string, std::string> JsonBuilder::computeResult (
5967 const std::vector<uint64_t >& hostResult,
6068 const CliOptions& opts,
@@ -244,6 +252,7 @@ static std::string generatePrimeNetJson(
244252 const std::string &computer,
245253 const std::vector<std::string>& knownFactors)
246254{
255+ (void ) uid;
247256 std::ostringstream oss;
248257 bool isPRP = (worktype.rfind (" PRP" , 0 ) == 0 );
249258 oss << " {" ;
@@ -260,10 +269,10 @@ static std::string generatePrimeNetJson(
260269 }
261270 oss << " ,\" res64\" :" << jsonEscape (res64);
262271 if (isPRP) {
263- oss << " \" res2048\" :" << jsonEscape (res2048);
272+ oss << " , \" res2048\" :" << jsonEscape (res2048);
264273 }
265274 oss << " ,\" residue-type\" :" << residueType;
266- oss << " ,\" errors\" :{\" gerbicz\" :" << gerbiczError;
275+ oss << " ,\" errors\" :{\" gerbicz\" :" << gerbiczError << " } " ;
267276 oss << " ,\" fft-length\" :" << fftLength;
268277 oss << " ,\" shift-count\" :0" ;
269278 if (isPRP && !proofMd5.empty ()) {
@@ -272,24 +281,25 @@ static std::string generatePrimeNetJson(
272281 << " ,\" power\" :" << proofPower
273282 << " ,\" hashsize\" :" << proofHashSize
274283 << " ,\" md5\" :" << jsonEscape (proofMd5)
275- << " }" ; // close "proof"
284+ << " }" ;
276285 }
277286 oss << " ,\" program\" :{"
278287 << " \" name\" :" << jsonEscape (programName)
279288 << " ,\" version\" :" << jsonEscape (programVersion)
280289 << " ,\" port\" :" << programPort
281290 << " ,\" os\" :{"
282- << " , \" os\" :" << jsonEscape (osName);
291+ << " \" os\" :" << jsonEscape (osName);
283292 if (!osArchitecture.empty ()) {
284293 oss << " ,\" architecture\" :" << jsonEscape (osArchitecture);
285294 }
286- oss << " }" ; // close "program.os"
287- oss << " }" ; // close "program"
295+ oss << " }" // close "program.os"
296+ << " }" ; // close "program"
288297 if (!user.empty ()) oss << " ,\" user\" :" << jsonEscape (user);
289298 if (!computer.empty ()) oss << " ,\" computer\" :" << jsonEscape (computer);
290299 if (!aid.empty ()) oss << " ,\" aid\" :" << jsonEscape (aid);
291300 oss << " ,\" timestamp\" :" << jsonEscape (timestamp);
292301 std::string prefix = oss.str ();
302+
293303 std::ostringstream canon;
294304 std::string canonWT = worktype;
295305 if (canonWT.rfind (" PRP" , 0 ) == 0 ) canonWT = " PRP" ;
@@ -298,55 +308,24 @@ static std::string generatePrimeNetJson(
298308 canon << exponent << " ;" ; // exponent
299309 canon << canonWT << " ;" ; // worktype
300310 canon << " " << " ;" ; // factors
301- std::string knownFactorStr;
302311 if (!knownFactors.empty ()) {
303- knownFactorStr = knownFactors[0 ];
312+ std::string knownFactorStr = knownFactors[0 ];
304313 for (size_t i = 1 ; i < knownFactors.size (); ++i)
305314 knownFactorStr += " ," + knownFactors[i];
306315 canon << knownFactorStr; // known-factors
307316 }
317+ canon << " ;" ;
308318
309- if (canonWT == " TF" ) {
310- // not yet implemented
311- canon << " <BITLO>" << " ;" ; // bitlo (e.g. 68)
312- canon << " <BITHI>" << " ;" ; // bithi (e.g. 75)
313- canon << " <RANGECOMPLETE>" << " ;" ; // rangecomplete (0 or 1)
314- } else if (canonWT == " PRP" ) {
315- canon << toLower (res64) << " ;" ; // res64
316- canon << toLower (res2048) << " ;" ; // res2048
317- canon << " 0" << " _" // shift-count
319+ if (canonWT == " PRP" ) {
320+ canon << toLower (res64) << " ;" ; // res64
321+ canon << toLower (res2048) << " ;" ; // res2048
322+ canon << " 0" << " _" // shift-count
318323 << " 3" << " _" // prp-base
319324 << residueType << " ;" ; // residue-type
320325 } else if (canonWT == " LL" ) {
321- canon << toLower (res64) << " ;" ; // res64
322- canon << " " << " ;" ; // unused
323- canon << " 0" << " ;" ; // shift-count
324- } else if (canonWT == " ECM" ) {
325- canon << opts.B1 << " ;" ; // b1
326- if (opts.B2 > 0 ) canon << opts.B2 ; // b2
327- canon << " ;" ;
328-
329- if (isEdw) canon << " E" ; // sigma
330- if (opts.sigma192 ) {
331- canon << opts.sigma192 ; // *** TODO: not sure where this value comes from ***
332- } else if (opts.sigma )
333- canon << opts.sigma ;
334- }
335- if (torsion > 0 ) {
336- canon << " _TSG" << torsion; // torsion-subgroup
337- }
338- canon << " ;" ;
339- } else if (canonWT == " PM1" ) {
340- canon << opts.B1 << " ;" ; // b1
341- if (opts.B2 > 0 ) canon << opts.B2 ; // b2
342- canon << " ;" ;
343- canon << " " << " ;" ; // brent-suyama
344- } else if (canonWT == " PP1" ) {
345- // not yet implemented
346- canon << opts.B1 << " ;" ; // b1
347- if (opts.B2 > 0 ) canon << opts.B2 ; // b2
348- canon << " ;" ;
349- canon << " <START>" << " ;" ; // start
326+ canon << toLower (res64) << " ;" ; // res64
327+ canon << " " << " ;" ; // unused
328+ canon << " 0" << " ;" ; // shift-count
350329 }
351330
352331 canon << fftLength << " ;" ; // fft-length
@@ -359,11 +338,11 @@ static std::string generatePrimeNetJson(
359338 canon << osArchitecture << " ;" ; // os.architecture
360339 canon << timestamp; // timestamp
361340 unsigned int crc = computeCRC32 (canon.str ());
362- std::ostringstream hex ;
363- hex << std::uppercase << std::hex << std::setw(8 ) << std::setfill(' 0' ) << crc;
341+ std::ostringstream hexss ;
342+ hexss << std::uppercase << std::hex << std::setw (8 ) << std::setfill (' 0' ) << crc;
364343 oss.str (" " ); oss.clear ();
365344 oss << prefix
366- << " ,\" checksum\" :{\" version\" :1,\" checksum\" :\" " << hex .str() << " \" }"
345+ << " ,\" checksum\" :{\" version\" :1,\" checksum\" :\" " << hexss .str () << " \" }"
367346 << " }" ;
368347 return oss.str ();
369348}
@@ -409,10 +388,10 @@ std::string JsonBuilder::generate(const CliOptions& opts,
409388 << " ,\" port\" :" << opts.portCode
410389 << " ,\" os\" :{"
411390 << " \" os\" :" << jsonEscape (opts.osName );
412- if (!osArchitecture .empty ()){
391+ if (!opts. osArch .empty ()){
413392 oss << " ,\" architecture\" :" << jsonEscape (opts.osArch );
414393 }
415- oss << " }" ;
394+ oss << " }} " ; // close program.os and program
416395 if (!opts.user .empty ()) oss << " ,\" user\" :" << jsonEscape (opts.user );
417396 if (!opts.computer_name .empty ()) oss << " ,\" computer\" :" << jsonEscape (opts.computer_name );
418397 if (!opts.aid .empty ()) oss << " ,\" aid\" :" << jsonEscape (opts.aid );
@@ -439,11 +418,11 @@ std::string JsonBuilder::generate(const CliOptions& opts,
439418 canon << opts.osArch << " ;" ; // os.architecture
440419 canon << timestampBuf; // timestamp
441420 unsigned int crc = computeCRC32 (canon.str ());
442- std::ostringstream hex ;
443- hex << std::uppercase << std::hex << std::setw (8 ) << std::setfill (' 0' ) << crc;
421+ std::ostringstream hexss ;
422+ hexss << std::uppercase << std::hex << std::setw (8 ) << std::setfill (' 0' ) << crc;
444423 oss.str (" " ); oss.clear ();
445424 oss << prefix
446- << " ,\" checksum\" :{\" version\" :1,\" checksum\" :\" " << hex .str () << " \" }"
425+ << " ,\" checksum\" :{\" version\" :1,\" checksum\" :\" " << hexss .str () << " \" }"
447426 << " }" ;
448427 return oss.str ();
449428 }
@@ -488,10 +467,10 @@ std::string JsonBuilder::generate(const CliOptions& opts,
488467 << " ,\" port\" :" << opts.portCode
489468 << " ,\" os\" :{"
490469 << " \" os\" :" << jsonEscape (opts.osName );
491- if (!osArchitecture .empty ()){
470+ if (!opts. osArch .empty ()){
492471 oss << " ,\" architecture\" :" << jsonEscape (opts.osArch );
493472 }
494- oss << " }" ;
473+ oss << " }} " ; // close program.os and program
495474 if (!opts.user .empty ()) oss << " ,\" user\" :" << jsonEscape (opts.user );
496475 if (!opts.computer_name .empty ()) oss << " ,\" computer\" :" << jsonEscape (opts.computer_name );
497476 if (!opts.aid .empty ()) oss << " ,\" aid\" :" << jsonEscape (opts.aid );
@@ -511,7 +490,7 @@ std::string JsonBuilder::generate(const CliOptions& opts,
511490 if (isEdw) canon << " E" ; // sigma
512491 if (opts.sigma192 ) {
513492 canon << opts.sigma192 ; // *** TODO: not sure where this value comes from ***
514- } else if (opts.sigma )
493+ } else if (opts.sigma ) {
515494 canon << opts.sigma ;
516495 }
517496 if (torsion > 0 ) {
@@ -528,22 +507,12 @@ std::string JsonBuilder::generate(const CliOptions& opts,
528507 canon << opts.osName << " ;" ; // os.os
529508 canon << opts.osArch << " ;" ; // os.architecture
530509 canon << timestampBuf; // timestamp
531-
532- canon << transform_size << " ;" ; // fft-length
533- canon << " " << " ;" ;
534- canon << " prmers" << " ;" ;
535- canon << core::PRMERS_VERSION << " ;" ;
536- canon << " " << " ;" ;
537- canon << " " << " ;" ;
538- canon << opts.osName << " ;" ;
539- canon << opts.osArch << " ;" ;
540- canon << timestampBuf;
541510 unsigned int crc = computeCRC32 (canon.str ());
542- std::ostringstream hex ;
543- hex << std::uppercase << std::hex << std::setw (8 ) << std::setfill (' 0' ) << crc;
511+ std::ostringstream hexss ;
512+ hexss << std::uppercase << std::hex << std::setw (8 ) << std::setfill (' 0' ) << crc;
544513 oss.str (" " ); oss.clear ();
545514 oss << prefix
546- << " ,\" checksum\" :{\" version\" :1,\" checksum\" :\" " << hex .str () << " \" }"
515+ << " ,\" checksum\" :{\" version\" :1,\" checksum\" :\" " << hexss .str () << " \" }"
547516 << " }" ;
548517 return oss.str ();
549518 }
0 commit comments