Fick lite feeling och skrev ihop en typ av logik som är ganska enkel men som också behöver tänja lite på språket för att det också skall bli lätt att skriva kod. Lätt att förstå utan att nörda ner sig
Följande länk går till en "archive" class. det handlar om att serializera data och den vill man gärna få smidig för att kunna skriva och läsa information så enkelt som möjligt.
Länken till hela headern (nästan all kod är i headern så det lilla som ligger i en cpp behövs inte).
https://pastebin.com/4te3rTZD
Exempel kod i kommentarer men klistrar in det här också
* Usage example:
* \code
* // Writing to a file
archive ar("output.bin", std::ios::out | std::ios::binary);
uint32_t value = 42;
ar << value;
// Reading from a file
archive archiveRead("output.bin", std::ios::in | std::ios::binary);
uint32_t read_value;
archiveRead >> read_value;
* \endcode
*
* Write samples - shows how to write values to file in different ways
* \code
// pathFile = some file path
archive ar_(pathFile, gd::io::tag_io_write{});
int iValue = 10, iValue2 = 20, iValue3 = 30;
ar_.write(iValue).write(iValue2).write(iValue3);
ar_.write_all(iValue, iValue2, iValue3);
ar_ << iValue << iValue2 << iValue3;
std::string s1 = "1111111", s2 = "2222222", s3 = "3333333";
ar_.write_all(s1, s2, s3);
archive ar2_(pathFile2, gd::io::tag_io_write{});
gd::argument::shared::arguments arguments( {{"one", "one"}, {"one", "one"}, {"one", "one"}, {"one", "one"}, {"one", "one"}});
ar2_.write_block( (uint64_t)arguments.buffer_size(), arguments.data() );
\endcode
Read samples - shows how to read values from file in different ways
* \code
// pathFile = some file path
archive ar_(pathFile, gd::io::tag_io_read{});
int iValueRead = 0, iValue2Read = 0, iValue3Read = 0;
ar_.read(iValueRead).read(iValue2Read).read(iValue3Read);
ar_.read_all(iValueRead, iValue2Read, iValue3Read );
ar_ >> iValueRead >> iValueRead >> iValueRead;
archive ar2_(pathFile2, gd::io::tag_io_read{});
std::string s1, s2, s3;
ar2_.read_all(s1, s2, s3);
archive ar2_(pathFile2, gd::io::tag_io_write{});
gd::argument::shared::arguments arguments( {{"one", "one"}, {"one", "one"}, {"one", "one"}, {"one", "one"}, {"one", "one"}});
ar2_.write_block( (uint64_t)arguments.buffer_size(), arguments.data() );
ar2_.close();
ar2_.open(pathFile, gd::io::tag_io_read{});
gd::argument::shared::arguments argumentsRead;
ar2_.read_block64( [&argumentsRead](uint64_t uSize) -> void* { argumentsRead.reserve( uSize ); argumentsRead.buffer_set_size( uSize ); return (void*)argumentsRead.data(); });
* \endcode
Är självklart hemmablind då jag är van vid C++ men min reaktion när jag ser andra språk och de skall göra likartade saker, det är att koden ser krångligare ut. Men jag tror att många som jämför kod mellan C++ och andra språk jämför saker som är färdigjorda. Och så tänker inte alltid C++ utvecklare. I C++ skrivs så mycket själv, medan annat språk, där väljs eventuellt att leta upp någon serialize klass även om det bara tar några timmar att skriva ihop en.
Hur skulle delar av ovanstående kod se ut i andra språk?