NumeRe v1.1.4
NumeRe: Framework für Numerische Rechnungen
compareFiles.cpp
Go to the documentation of this file.
1/*****************************************************************************
2 NumeRe: Framework fuer Numerische Rechnungen
3 Copyright (C) 2022 Erik Haenel et al.
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17******************************************************************************/
18
19#include "compareFiles.hpp"
20#include "dtl/dtl.hpp"
21#include <fstream>
22#include <sstream>
23
32static std::vector<std::string> getFileContent(const std::string& file)
33{
34 std::vector<std::string> content;
35 std::ifstream fileStream(file, std::ios_base::in | std::ios_base::binary);
36
37 while (fileStream.good() && !fileStream.eof())
38 {
39 std::string sLine;
40 std::getline(fileStream, sLine);
41 content.push_back(sLine);
42 }
43
44 return content;
45}
46
47
58std::string compareFiles(const std::string& file1, const std::string& file2)
59{
60 std::vector<std::string> content1 = getFileContent(file1);
61 std::vector<std::string> content2 = getFileContent(file2);
62
63 // Calculate the differences between both files
64 dtl::Diff<std::string> diffFile(content1, content2);
65 diffFile.compose();
66
67 // Convert the differences into unified form
68 diffFile.composeUnifiedHunks();
69
70 // Print the differences to a string stream
71 std::ostringstream uniDiff;
72
73 // Get revision identifier
74 uniDiff << "--- " << file1 << "\n+++ " << file2 << "\n";
75
76 diffFile.printUnifiedFormat(uniDiff);
77
78 // Return the contents of the stream
79 return uniDiff.str();
80}
81
82
void printUnifiedFormat(stream &out) const
Definition: Diff.hpp:348
void composeUnifiedHunks()
Definition: Diff.hpp:371
void compose()
Definition: Diff.hpp:258
static std::vector< std::string > getFileContent(const std::string &file)
Read the content of a file in binary mode and try to detect lines within the file.
std::string compareFiles(const std::string &file1, const std::string &file2)
Compares two files linewise and in binary mode. The differences are returned as a unified diff.