LifeReader::LifeReader(wxInputStream& is) { wxBufferedInputStream buff_is(is); wxTextInputStream text_is(buff_is); wxString line, rest; // check stream m_ok = is.IsOk(); LIFE_CHECKVAL(_("Couldn't read any data")); // read signature m_ok = text_is.ReadLine().Contains(wxT("#Life 1.05")); LIFE_CHECKVAL(_("Error reading signature. Not a Life pattern?")); // read description m_description = wxEmptyString; line = text_is.ReadLine(); while (buff_is.IsOk() && line.StartsWith(wxT("#D"), &rest)) { m_description += rest.Trim(false); m_description += wxT("\n"); line = text_is.ReadLine(); } m_ok = buff_is.IsOk(); LIFE_CHECKVAL(_("Unexpected EOF while reading description")); // read rules m_ok = line.StartsWith(wxT("#N")); LIFE_CHECKVAL(_("Sorry, non-conway rules not supported yet")); // read shape while (buff_is.IsOk()) { line = ( text_is.ReadLine() ).Trim(); if (!line.empty()) { if (line.StartsWith(wxT("#P "), &rest)) m_shape.Add(rest); else m_shape.Add(line); } } }
static abi_diff::CompatibilityStatus MergeDiffReports( const std::vector<std::string> &diff_reports, const std::string &merged_diff_report) { abi_diff::MergedTranslationUnitDiff merged_tu_diff; std::ofstream text_output(merged_diff_report); google::protobuf::io::OstreamOutputStream text_os(&text_output); abi_diff::CompatibilityStatus status = abi_diff::CompatibilityStatus::COMPATIBLE; for (auto &&i : diff_reports) { abi_diff::TranslationUnitDiff diff_tu; std::ifstream input(i); google::protobuf::io::IstreamInputStream text_is(&input); if (!google::protobuf::TextFormat::Parse(&text_is, &diff_tu)) { llvm::errs() << "Failed to parse diff report\n"; ::exit(1); } abi_diff::ConciseDiffReportInformation *added_tu_diff = merged_tu_diff.add_diff_reports(); if (!added_tu_diff) { llvm::errs() << "Failed to add diff report to merged report\n"; ::exit(1); } abi_diff::CompatibilityStatus new_status = diff_tu.compatibility_status(); added_tu_diff->set_lib_name(diff_tu.lib_name()); added_tu_diff->set_arch(diff_tu.arch()); added_tu_diff->set_diff_report_path(i); added_tu_diff->set_compatibility_status(new_status); // Only, if the status is downgraded, change it. if (IsStatusDowngraded(status, new_status)) { status = new_status; } } if (!google::protobuf::TextFormat::Print(merged_tu_diff, &text_os)) { llvm::errs() << "Serialization to ostream failed\n"; ::exit(1); } return status; }