Replace deprecated endl with Qt::endl

This commit is contained in:
Roland Rossgotterer
2020-04-02 10:54:07 +02:00
committed by Mat Sutcliffe
parent 1e633a5704
commit 9fa3221abc
27 changed files with 346 additions and 346 deletions

View File

@@ -66,88 +66,88 @@ namespace BlackSample
timer.start();
CAtcStationList atcs1 = CTesting::createAtcStations(10000);
ms = timer.elapsed();
out << "created (copy) " << atcs1.size() << " ATC stations in " << ms << "ms" << endl;
out << "created (copy) " << atcs1.size() << " ATC stations in " << ms << "ms" << Qt::endl;
timer.start();
CAtcStationList atcs2 = CTesting::createAtcStations(100000);
ms = timer.elapsed();
out << "created (copy) " << atcs2.size() << " ATC stations in " << ms << "ms" << endl;
out << "created (copy) " << atcs2.size() << " ATC stations in " << ms << "ms" << Qt::endl;
// ATC stations, property index created
timer.start();
CAtcStationList atcs3 = CTesting::createAtcStations(10000, true);
ms = timer.elapsed();
out << "created (propertyIndex) " << atcs3.size() << " ATC stations in " << ms << "ms" << endl;
out << "created (propertyIndex) " << atcs3.size() << " ATC stations in " << ms << "ms" << Qt::endl;
timer.start();
CAtcStationList atcs4 = CTesting::createAtcStations(100000, true);
ms = timer.elapsed();
out << "created (propertyIndex) " << atcs4.size() << " ATC stations in " << ms << "ms" << endl;
out << "created (propertyIndex) " << atcs4.size() << " ATC stations in " << ms << "ms" << Qt::endl;
// Sort by
timer.start();
atcs1.sortBy(&CAtcStation::getCallsign);
ms = timer.elapsed();
out << "Sorted by callsign " << atcs1.size() << " ATC stations in " << ms << "ms" << endl;
out << "Sorted by callsign " << atcs1.size() << " ATC stations in " << ms << "ms" << Qt::endl;
timer.start();
atcs2.sortBy(&CAtcStation::getCallsign);
ms = timer.elapsed();
out << "Sorted by callsign " << atcs2.size() << " ATC stations in " << ms << "ms" << endl;
out << "Sorted by callsign " << atcs2.size() << " ATC stations in " << ms << "ms" << Qt::endl;
// Read data, this is what all our models do when displaying in a table view
timer.start();
CSamplesPerformance::accessStationsData(atcs1, false);
ms = timer.elapsed();
out << "Read (getters) " << atcs1.size() << " ATC stations in " << ms << "ms" << endl;
out << "Read (getters) " << atcs1.size() << " ATC stations in " << ms << "ms" << Qt::endl;
timer.start();
CSamplesPerformance::accessStationsData(atcs2, false);
ms = timer.elapsed();
out << "Read (getters) " << atcs2.size() << " ATC stations in " << ms << "ms" << endl;
out << "Read (getters) " << atcs2.size() << " ATC stations in " << ms << "ms" << Qt::endl;
timer.start();
CSamplesPerformance::accessStationsData(atcs1, true);
ms = timer.elapsed();
out << "Read (propertyIndex) " << atcs1.size() << " ATC stations in " << ms << "ms" << endl;
out << "Read (propertyIndex) " << atcs1.size() << " ATC stations in " << ms << "ms" << Qt::endl;
timer.start();
CSamplesPerformance::accessStationsData(atcs2, true);
ms = timer.elapsed();
out << "Read (propertyIndex) " << atcs2.size() << " ATC stations in " << ms << "ms" << endl;
out << "Read (propertyIndex) " << atcs2.size() << " ATC stations in " << ms << "ms" << Qt::endl;
// calculate
number = 10000;
timer.start();
CSamplesPerformance::calculateDistance(number);
ms = timer.elapsed();
out << "Calculated distances " << number << " in " << ms << "ms" << endl;
out << "Calculated distances " << number << " in " << ms << "ms" << Qt::endl;
number = 100000;
timer.start();
CSamplesPerformance::calculateDistance(number);
ms = timer.elapsed();
out << "Calculated distances " << number << "in " << ms << "ms" << endl;
out << "Calculated distances " << number << "in " << ms << "ms" << Qt::endl;
// parse
number = 100000;
timer.start();
CSamplesPerformance::parseWgs(number);
ms = timer.elapsed();
out << "Parse WGS coordinates " << number << " in " << ms << "ms" << endl;
out << "Parse WGS coordinates " << number << " in " << ms << "ms" << Qt::endl;
// copy
timer.start();
number = 20;
CSamplesPerformance::copy10kStations(number);
ms = timer.elapsed();
out << "Copied 10k stations " << number << " times in " << ms << "ms" << endl;
out << "Copied 10k stations " << number << " times in " << ms << "ms" << Qt::endl;
timer.start();
number = 100;
CSamplesPerformance::copy10kStations(number);
ms = timer.elapsed();
out << "Copied 10k stations " << number << " times in " << ms << "ms" << endl;
out << "Copied 10k stations " << number << " times in " << ms << "ms" << Qt::endl;
// Regex pattern matching with lists of 10000 strings containing random hex numbers
auto generator = []() { return QString::number(CMathUtils::randomGenerator().generate(), 16); };
@@ -164,24 +164,24 @@ namespace BlackSample
timer.start();
for (const auto &str : as_const(strList1)) { if (newRegex.match(str).hasMatch()) number++; }
ms = timer.elapsed();
out << "new regex matched " << number << " of" << strList1.size() << " strings in " << ms << "ms" << endl;
out << "new regex matched " << number << " of" << strList1.size() << " strings in " << ms << "ms" << Qt::endl;
number = 0;
timer.start();
for (const auto &str : as_const(strList2)) { if (fullRegex.exactMatch(str)) number++; }
ms = timer.elapsed();
out << "full regex matched " << number << " of" << strList2.size() << " strings in " << ms << "ms" << endl;
out << "full regex matched " << number << " of" << strList2.size() << " strings in " << ms << "ms" << Qt::endl;
number = 0;
timer.start();
for (const auto &str : as_const(strList3)) { if (wildcardRegex.exactMatch(str)) number++; }
ms = timer.elapsed();
out << "wildcard matched " << number << " of " << strList3.size() << " strings in " << ms << "ms" << endl;
out << "wildcard matched " << number << " of " << strList3.size() << " strings in " << ms << "ms" << Qt::endl;
number = 0;
timer.start();
for (const auto &str : as_const(strList4)) { if (str.contains(containsStr)) number++; }
ms = timer.elapsed();
out << "contains matched " << number << " of " << strList4.size() << " strings in " << ms << "ms" << endl;
out << "contains matched " << number << " of " << strList4.size() << " strings in " << ms << "ms" << Qt::endl;
out << "-----------------------------------------------" << endl;
out << "-----------------------------------------------" << Qt::endl;
return EXIT_SUCCESS;
}
@@ -202,7 +202,7 @@ namespace BlackSample
situationsBefore = situations.findBefore(halfTime).findByCallsign(callsign);
situationsAfter = situations.findAfter(halfTime - 1).findByCallsign(callsign);
}
out << "Reads by time, callsigns: " << timer.elapsed() << "ms" << endl;
out << "Reads by time, callsigns: " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
situationsBefore = situations.findBefore(halfTime);
@@ -215,7 +215,7 @@ namespace BlackSample
Q_UNUSED(csSituationsBefore);
Q_UNUSED(csSituationsAfter);
}
out << "Split by time upfront, then callsigns: " << timer.elapsed() << "ms" << endl;
out << "Split by time upfront, then callsigns: " << timer.elapsed() << "ms" << Qt::endl;
int b = situationsBefore.size();
int a = situationsAfter.size();
Q_ASSERT(a + b == numberOfTimes * numberOfCallsigns);
@@ -224,7 +224,7 @@ namespace BlackSample
timer.start();
const QHash<CCallsign, CAircraftSituationList> csSituations = situations.splitPerCallsign();
out << "Split by " << csSituations.size() << " callsigns, " << timer.elapsed() << "ms" << endl;
out << "Split by " << csSituations.size() << " callsigns, " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
for (const CAircraftSituationList &csl : csSituations)
@@ -237,9 +237,9 @@ namespace BlackSample
Q_UNUSED(csSituationsBefore);
Q_UNUSED(csSituationsAfter);
}
out << "Split by callsign, by time: " << timer.elapsed() << "ms" << endl;
out << "Split by callsign, by time: " << timer.elapsed() << "ms" << Qt::endl;
out << endl;
out << Qt::endl;
return EXIT_SUCCESS;
}
@@ -251,27 +251,27 @@ namespace BlackSample
timer.start();
QJsonObject json = situations.toJson();
out << "Convert 100,000 aircraft situations to JSON: " << timer.elapsed() << "ms" << endl;
out << "Convert 100,000 aircraft situations to JSON: " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
situations.convertFromJson(json);
out << "Convert 100,000 aircraft situations from JSON: " << timer.elapsed() << "ms" << endl << endl;
out << "Convert 100,000 aircraft situations from JSON: " << timer.elapsed() << "ms" << endl << Qt::endl;
timer.start();
json = models.toJson();
out << "Convert 10,000 aircraft models to JSON (naive): " << timer.elapsed() << "ms" << endl;
out << "Convert 10,000 aircraft models to JSON (naive): " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
models.convertFromJson(json);
out << "Convert 10,000 aircraft models from JSON (naive): " << timer.elapsed() << "ms" << endl << endl;
out << "Convert 10,000 aircraft models from JSON (naive): " << timer.elapsed() << "ms" << endl << Qt::endl;
timer.start();
json = models.toMemoizedJson();
out << "Convert 10,000 aircraft models to JSON (memoize): " << timer.elapsed() << "ms" << endl;
out << "Convert 10,000 aircraft models to JSON (memoize): " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
models.convertFromMemoizedJson(json);
out << "Convert 10,000 aircraft models from JSON (memoize): " << timer.elapsed() << "ms" << endl << endl;
out << "Convert 10,000 aircraft models from JSON (memoize): " << timer.elapsed() << "ms" << endl << Qt::endl;
return EXIT_SUCCESS;
}
@@ -287,11 +287,11 @@ namespace BlackSample
QFile liveryFile(liveriesFileName);
Q_ASSERT_X(liveryFile.exists(), Q_FUNC_INFO, "Liveries file does not exist");
out << "Loaded DB JSON model file " << modelFile.fileName() << endl;
out << "Loaded DB JSON model file " << modelFile.fileName() << Qt::endl;
const QString modelData = CFileUtils::readFileToString(modelFile.fileName());
Q_ASSERT_X(!modelData.isEmpty(), Q_FUNC_INFO, "Model file empty");
out << "Loaded DB JSON livery file " << liveryFile.fileName() << endl;
out << "Loaded DB JSON livery file " << liveryFile.fileName() << Qt::endl;
const QString liveryData = CFileUtils::readFileToString(liveryFile.fileName());
Q_ASSERT_X(!liveryData.isEmpty(), Q_FUNC_INFO, "Livery file empty");
@@ -303,41 +303,41 @@ namespace BlackSample
timer.start();
const CLiveryList dbLiveries = CLiveryList::fromDatabaseJson(response);
int ms = timer.elapsed();
out << "Read via DB JSON format: " << dbLiveries.size() << " liveries in " << ms << "ms" << endl;
out << "Read via DB JSON format: " << dbLiveries.size() << " liveries in " << ms << "ms" << Qt::endl;
// does not result in better performance, liveries/airlines have almost a 1:1 ratio
// unlike models' fromDatabaseJsonCaching not many airlines will be recycled
timer.start();
const CLiveryList dbLiveries2 = CLiveryList::fromDatabaseJsonCaching(response);
ms = timer.elapsed();
out << "Read via DB JSON format (new): " << dbLiveries2.size() << " liveries in " << ms << "ms" << endl;
out << "Read via DB JSON format (new): " << dbLiveries2.size() << " liveries in " << ms << "ms" << Qt::endl;
const CAirlineIcaoCodeList liveryAirlines = dbLiveries2.getAirlines();
timer.start();
const CLiveryList dbLiveries3 = CLiveryList::fromDatabaseJsonCaching(response, liveryAirlines);
ms = timer.elapsed();
out << "Read via DB JSON format (new, passing airlines): " << dbLiveries3.size() << " liveries in " << ms << "ms" << endl;
out << "Read via DB JSON format (new, passing airlines): " << dbLiveries3.size() << " liveries in " << ms << "ms" << Qt::endl;
CDatabaseReader::stringToDatastoreResponse(modelData, response);
timer.start();
const CAircraftModelList dbModels = CAircraftModelList::fromDatabaseJson(response);
ms = timer.elapsed();
out << "Read via DB JSON format: " << dbModels.size() << " models in " << ms << "ms" << endl;
out << "Read via DB JSON format: " << dbModels.size() << " models in " << ms << "ms" << Qt::endl;
timer.start();
const CAircraftModelList dbModels2 = CAircraftModelList::fromDatabaseJsonCaching(response);
ms = timer.elapsed();
out << "Read via DB JSON format (new): " << dbModels2.size() << " models in " << ms << "ms" << endl;
out << "Read via DB JSON format (new): " << dbModels2.size() << " models in " << ms << "ms" << Qt::endl;
// swift JSON format
const QJsonObject swiftJsonObject = dbModels.toJson();
out << "Converted to swift JSON" << endl;
out << "Converted to swift JSON" << Qt::endl;
CAircraftModelList swiftModels;
timer.start();
swiftModels.convertFromJson(swiftJsonObject);
ms = timer.elapsed();
out << "Read via swift JSON format: " << swiftModels.size() << " models in " << ms << "ms" << endl;
out << "Read via swift JSON format: " << swiftModels.size() << " models in " << ms << "ms" << Qt::endl;
Q_ASSERT_X(swiftModels.size() == dbModels.size(), Q_FUNC_INFO, "Mismatching container size");
return EXIT_SUCCESS;
@@ -365,7 +365,7 @@ namespace BlackSample
auto c = containsChar(s, [](QChar c) { return c.isUpper(); });
Q_UNUSED(c);
}
out << "Check 100,000 strings for containing uppercase letter: (utility) " << timer.elapsed() << "ms" << endl;
out << "Check 100,000 strings for containing uppercase letter: (utility) " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
for (const QString &s : as_const(strings))
@@ -373,7 +373,7 @@ namespace BlackSample
auto c = s.contains(upperRegex);
Q_UNUSED(c);
}
out << "Check 100,000 strings for containing uppercase letter: (regex) " << timer.elapsed() << "ms" << endl << endl;
out << "Check 100,000 strings for containing uppercase letter: (regex) " << timer.elapsed() << "ms" << endl << Qt::endl;
timer.start();
for (const QString &s : as_const(strings))
@@ -381,7 +381,7 @@ namespace BlackSample
auto i = indexOfChar(s, [](QChar c) { return c.isUpper(); });
Q_UNUSED(i);
}
out << "Check 100,000 strings for index of first uppercase letter: (utility) " << timer.elapsed() << "ms" << endl;
out << "Check 100,000 strings for index of first uppercase letter: (utility) " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
for (const QString &s : as_const(strings))
@@ -389,7 +389,7 @@ namespace BlackSample
auto i = s.indexOf(upperRegex);
Q_UNUSED(i);
}
out << "Check 100,000 strings for index of first uppercase letter: (regex) " << timer.elapsed() << "ms" << endl << endl;
out << "Check 100,000 strings for index of first uppercase letter: (regex) " << timer.elapsed() << "ms" << endl << Qt::endl;
auto temp = strings;
timer.start();
@@ -397,7 +397,7 @@ namespace BlackSample
{
removeChars(s, [](QChar c) { return c.isUpper(); });
}
out << "Remove from 100,000 strings all uppercase letters: (utility) " << timer.elapsed() << "ms" << endl;
out << "Remove from 100,000 strings all uppercase letters: (utility) " << timer.elapsed() << "ms" << Qt::endl;
strings = temp;
timer.start();
@@ -405,21 +405,21 @@ namespace BlackSample
{
s.remove(upperRegex);
}
out << "Remove from 100,000 strings all uppercase letters: (regex) " << timer.elapsed() << "ms" << endl << endl;
out << "Remove from 100,000 strings all uppercase letters: (regex) " << timer.elapsed() << "ms" << endl << Qt::endl;
timer.start();
{
auto lines = splitLines(bigString);
Q_UNUSED(lines);
}
out << "Split 100,000 line string into list of lines: (QStringList) " << timer.elapsed() << "ms" << endl;
out << "Split 100,000 line string into list of lines: (QStringList) " << timer.elapsed() << "ms" << Qt::endl;
timer.start();
{
auto lines = splitLinesRefs(bigString);
Q_UNUSED(lines);
}
out << "Split 100,000 line string into list of lines: (QList<QStringRef>) " << timer.elapsed() << "ms" << endl;
out << "Split 100,000 line string into list of lines: (QList<QStringRef>) " << timer.elapsed() << "ms" << Qt::endl;
return EXIT_SUCCESS;
}
@@ -444,7 +444,7 @@ namespace BlackSample
{
x += "12-1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
out << "+= String " << time.elapsed() << "ms" << endl;
out << "+= String " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -452,7 +452,7 @@ namespace BlackSample
{
x += QLatin1String("12-1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
out << "+= QLatin1String " << time.elapsed() << "ms" << endl;
out << "+= QLatin1String " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -460,7 +460,7 @@ namespace BlackSample
{
x += QStringLiteral("12-1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
out << "+= QStringLiteral " << time.elapsed() << "ms" << endl;
out << "+= QStringLiteral " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -468,7 +468,7 @@ namespace BlackSample
{
x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9;
}
out << "+ String multiple " << time.elapsed() << "ms" << endl;
out << "+ String multiple " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -476,7 +476,7 @@ namespace BlackSample
{
x = x1 % x2 % x3 % x4 % x5 % x6 % x7 % x8 % x9;
}
out << "% String multiple " << time.elapsed() << "ms" << endl;
out << "% String multiple " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -484,7 +484,7 @@ namespace BlackSample
{
x = x.append(x1).append(x2).append(x3).append(x4).append(x5).append(x6).append(x7).append(x8).append(x9);
}
out << "append String multiple " << time.elapsed() << "ms" << endl;
out << "append String multiple " << time.elapsed() << "ms" << Qt::endl;
x.clear();
static const QString xArgString("%1 %2 %3 %4 %5 %6 %7 %8 %9");
@@ -493,7 +493,7 @@ namespace BlackSample
{
x = xArgString.arg(x1, x2, x3, x4, x5, x6, x7, x8, x9);
}
out << "arg String multiple " << time.elapsed() << "ms" << endl;
out << "arg String multiple " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -501,7 +501,7 @@ namespace BlackSample
{
x = QStringLiteral("%1 %2 %3 %4 %5 %6 %7 %8 %9").arg(x1, x2, x3, x4, x5, x6, x7, x8, x9);
}
out << "arg QStringLiteral multiple " << time.elapsed() << "ms" << endl;
out << "arg QStringLiteral multiple " << time.elapsed() << "ms" << Qt::endl;
x.clear();
return EXIT_SUCCESS;
@@ -517,7 +517,7 @@ namespace BlackSample
{
x = fooString();
}
out << "by constQString " << time.elapsed() << "ms" << endl;
out << "by constQString " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -525,7 +525,7 @@ namespace BlackSample
{
x = fooStringLiteral();
}
out << "by QStringLiteral " << time.elapsed() << "ms" << endl;
out << "by QStringLiteral " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -533,7 +533,7 @@ namespace BlackSample
{
x = QString("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi.");
}
out << "by QString(\"...\") " << time.elapsed() << "ms" << endl;
out << "by QString(\"...\") " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -541,7 +541,7 @@ namespace BlackSample
{
x = QStringLiteral("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi.");
}
out << "by QStringLiteral(\"...\") " << time.elapsed() << "ms" << endl;
out << "by QStringLiteral(\"...\") " << time.elapsed() << "ms" << Qt::endl;
x.clear();
time.start();
@@ -550,7 +550,7 @@ namespace BlackSample
QStringList foo = generateList();
Q_UNUSED(foo.size());
}
out << "generated list " << time.elapsed() << "ms" << endl;
out << "generated list " << time.elapsed() << "ms" << Qt::endl;
time.start();
for (int i = 0; i < loop; i++)
@@ -558,7 +558,7 @@ namespace BlackSample
QStringList foo = replacedList();
Q_UNUSED(foo.size());
}
out << "replaced list " << time.elapsed() << "ms" << endl;
out << "replaced list " << time.elapsed() << "ms" << Qt::endl;
return EXIT_SUCCESS;
}
@@ -607,7 +607,7 @@ namespace BlackSample
Q_ASSERT_X(s.getCallsign() == cs, Q_FUNC_INFO, "Wromg callsign");
}
}
out << "map 100 out of 10: " << time.elapsed() << "ms" << endl;
out << "map 100 out of 10: " << time.elapsed() << "ms" << Qt::endl;
time.start();
for (int i = 1; i < 10000; ++i)
@@ -618,7 +618,7 @@ namespace BlackSample
Q_ASSERT_X(s.getCallsign() == cs, Q_FUNC_INFO, "Wromg callsign");
}
}
out << "hash 100 out of 10: " << time.elapsed() << "ms" << endl;
out << "hash 100 out of 10: " << time.elapsed() << "ms" << Qt::endl;
time.start();
for (int i = 1; i < 10000; ++i)
@@ -629,7 +629,7 @@ namespace BlackSample
Q_ASSERT_X(s.getCallsign() == cs, Q_FUNC_INFO, "Wromg callsign");
}
}
out << "map 100 out of 25: " << time.elapsed() << "ms" << endl;
out << "map 100 out of 25: " << time.elapsed() << "ms" << Qt::endl;
time.start();
for (int i = 1; i < 10000; ++i)
@@ -640,7 +640,7 @@ namespace BlackSample
Q_ASSERT_X(s.getCallsign() == cs, Q_FUNC_INFO, "Wromg callsign");
}
}
out << "hash 100 out of 25: " << time.elapsed() << "ms" << endl;
out << "hash 100 out of 25: " << time.elapsed() << "ms" << Qt::endl;
time.start();
for (int i = 1; i < 10000; ++i)
@@ -651,7 +651,7 @@ namespace BlackSample
Q_ASSERT_X(s.getCallsign() == cs, Q_FUNC_INFO, "Wromg callsign");
}
}
out << "map 100 out of 50: " << time.elapsed() << "ms" << endl;
out << "map 100 out of 50: " << time.elapsed() << "ms" << Qt::endl;
time.start();
for (int i = 1; i < 10000; ++i)
@@ -662,7 +662,7 @@ namespace BlackSample
Q_ASSERT_X(s.getCallsign() == cs, Q_FUNC_INFO, "Wromg callsign");
}
}
out << "hash 100 out of 50: " << time.elapsed() << "ms" << endl;
out << "hash 100 out of 50: " << time.elapsed() << "ms" << Qt::endl;
return EXIT_SUCCESS;
}