#include <iostream>
#include <fstream>
#include <exception>
#include <limits>
#include <vector>
#include <gta/gta.hpp>
int main(void)
{
try {
std::ifstream instream("input.gta", std::ios::in | std::ios::binary);
gta::header inheader;
gta::io_state instate;
std::ofstream outstream("output.gta", std::ios::out | std::ios::binary);
gta::header outheader;
gta::io_state outstate;
inheader.read_from(instream);
outheader = inheader;
outheader.set_compression(gta::none);
outheader.write_to(outstream);
if (inheader.element_size() > std::numeric_limits<size_t>::max()) {
throw std::exception();
}
std::vector<char> element(inheader.element_size());
for (uintmax_t i = 0; i < inheader.elements(); i++) {
inheader.read_elements(instate, instream, 1, &(element[0]));
outheader.write_elements(outstate, outstream, 1, &(element[0]));
}
}
catch (std::exception &e) {
std::cerr << e.what() << std::endl;
return 1;
}
return 0;
}