mirror of
https://github.com/boostorg/endian.git
synced 2025-07-29 12:07:31 +02:00
Add conversion_use_case
This commit is contained in:
51
example/conversion_use_case.cpp
Normal file
51
example/conversion_use_case.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
// 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 <boost/endian/conversion.hpp>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
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<record> 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(rec.balance); // reverse if needed
|
||||
out.write((const char*)&out_rec, sizeof(out_rec));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user