// endian/example/conversion_use_case.cpp // Copyright Beman Dawes 2014 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // This program reads a binary file of fixed length records, with a format defined // in a header file supplied by a third-party. The records inserted into a vector, // and the vector is sorted. The sorted records are then written to an output file. // Full I/O error testing omitted for brevity, So don't try this at home. #include "third_party_format.hpp" #include #include #include #include #include using third_party::record; int main() { std::ifstream in("data.bin", std::ios::binary); if (!in) { std::cout << "Could not open data.bin\n"; return 1; } std::ofstream out("sorted-data.bin", std::ios::binary); if (!out) { std::cout << "Could not open sorted-data.bin\n"; return 1; } record rec; std::vector recs; while (!in.eof()) // read each record { in.read((char*)&rec, sizeof(rec)); rec.balance = boost::endian::big_to_native(rec.balance); // reverse if needed recs.push_back(rec); } std::sort(recs.begin(), recs.end(), // decending sort by balance [](const record& lhs, const record& rhs) -> bool { return lhs.balance > rhs.balance; }); for (auto &out_rec : recs) // write each record { out_rec.balance = boost::endian::native_to_big(out_rec.balance); // reverse if needed out.write((const char*)&out_rec, sizeof(out_rec)); } }