Svarar inte här utan varit upptagen med att fixa till koden för att hantera ett repository.
Inte så märkvärdigt som det låter, det är en fil som kan lagra flera andra filer i sig. Precis så "klart" att det fungerat när jag testar men behöver slipa till den hårdtesta innan det är produktionsfärdigt.
Här är en länk till koden (både header fil och cpp fil i samma)
https://hastebin.com/share/orefaquyis.cpp
Gjorde den här bilden också men det verkar som den förminskas... Lägger in och får göra något annat
Det är i alla fall den röda mitten rutan som är den viktiga för att använda objektet "repository". Resten är inte intressant utåt
<Uppladdad bildlänk>
Det finns en del lösningar i den här koden som vad jag vet är mycket ovanligt att man ser idag. Bl.a. används tekniken "hungarian notation". På windows från början på 1990 till strax innan 2010 var den stilen extremt vanlig för C/C++ utvecklare.
Nästan alla jag känner från tiden som skrev C++ för windows använde det vid utveckling. De flesta där har "tvingats" bort då det sällan accepteras idag vilket är synd. Stilen är fantastiskt effektiv.
Tittar man på koden så är den skriven för att slippa "hoppa runt". En utvecklare måste alltid förstå koden utan att behöva hoppa runt i filer. Det är därför det finns prefix och postfix. Exempelvis har alla statiska metoder *_s, Globala har *_g och så vidare.
Tänkte få ihop någon liten exe som kan användas för att göra backuper men det får bli ett projekt till nästa helg.
Hittade inget för det här så det är orsaken och eftersom vi diskuterar kod blir det här lite mer realistisk kod istället för småsnuttar även om det är lite detta också.
När jag skriver kod försöker jag hålla koden så ren som möjligt från kommenterar och felhanteringskod. Kommentarer är det gott om men de är "runt" koden. Felhaneringskod kan bli långa rader. "assert" flyttas ut till höger i marginalen.
Vad är det i den kod du presenterar här som skulle vara unikt för C++?
Den ser mestadels korrekt ut, bortsett från att den inte hanterar big/little-endian.
Men varför hålla den in-memory-representationen så nära filstrukturen? Vore det inte betydligt enklare att använda en annan intern representation och sedan serialisera till ett mer kompakt format? Det skulle samtidigt eliminera den rätt godtyckliga begränsningen att filnamn inte får vara längre än 260 tecken.
Du verkar ha en stark förkärlek för att lägga data back-to-back. Är det verkligen optimalt år 2025, när vanliga CPU:er sedan länge har flera kärnor, och problem som false sharing i många fall helt dödar eventuella prestandavinster man möjligen uppnår med ett något mer kompakt format?
Och varför använda const std::string_view& som argument? Det spelar kanske mindre roll på Windows, på grund av ABI:n där, men på Linux och macOS är det faktiskt mer effektivt att skicka std::string_view by value, eftersom det då placeras direkt i två register, istället för att skicka en pekare till ett std::string_view, vilket kräver en extra avreferens. Om man ändå bryr sig om “minneshantering, varför annars använda C++?
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer