static void DebugMsg(const char* fmt, ...) { if (!g_DebugLog) return; va_list args; va_start(args, fmt); vfprintf_s(g_DebugLog, fmt, args); fputs("\r\n", g_DebugLog); _fflush_nolock(g_DebugLog); }
void Storage::Save() { FILE* f = 0; fopen_s( &f, FileName.c_str(), "wb" ); if ( f == 0 ) return; // Number of probes what we have int num_probes = probes.size(); fwrite( &num_probes, 4, 1, f ); std::set<UserInput>::iterator It = probes.begin(); for( ; It != probes.end(); ++It ) { // Saving probe UserInput& ui = *It; // probe hints int record_guess = ui.guess; fwrite( &record_guess, 4, 1, f ); int record_inplace = ui.inplace; fwrite( &record_inplace, 4, 1, f ); // number of history records int num_records = ui.history.size(); fwrite( &num_records, 4, 1, f ); HistoryT::iterator It2 = ui.history.begin(); for( ; It2 != ui.history.end(); ++It2 ) { UserInput& record = *It2; // history record value int record_value = record; fwrite( &record_value, 4, 1, f ); // history record hints record_guess = record.guess; fwrite( &record_guess, 4, 1, f ); record_inplace = record.inplace; fwrite( &record_inplace, 4, 1, f ); } // number of digits with minimal invariance int min_size = ui.min_variants.size(); fwrite( &min_size, 4, 1, f ); // invariance value int min_value = 0; if ( min_size ) min_value = ui.min_variants.begin()->second; fwrite( &min_value, 4, 1, f ); // save digits MinimalsT::iterator It3 = ui.min_variants.begin(); int* buf = new int[min_size]; int* ptr = buf; for( ; It3 != ui.min_variants.end(); ++It3 ) *(ptr++) = It3->first; _fwrite_nolock( buf, 4, min_size, f ); _fflush_nolock(f); delete[] buf; } fclose(f); }