unshift function im codecvt-facet
-
hola
was soll unshift in dem fall auf deutsch heissen ? was macht die funktion ?
danke
Meep Meep
-
Hallo Meep Meep,
'unshift' heißt hier soviel wie 'mach es fest(unverrückbar)' oder lakser gesagt: 'mach es klar'.
Mal angenommen, das Zielformat in das die codecvt-Facette den Output umwandeln soll ist blockweise organisiert. Jeder Block enthalte am Ende noch 2 Byte. Das erste Byte sei die Anzahl der (gültigen) Bytes in dem Block und das zweite Byte ist eine Checksumme der (gültigen) Bytes. Jeder Block sei 10 Byte lang - also 8 Byte Nutzdaten und die eben beschriebenen zwei Bytes.
Weiter mal angenommen, der ursprünglich Output seinen 77 Byte. Dann sind am Ende 9 vollständige Blöcke geschrieben worden und 5 Byte (77 mod 8 = 5) stehen auch schon im Zieldevice, aber der letzte Block ist noch unfertig.
Dann wird der codecvt-Facette mit 'unshift' mitgeteilt, dass jetzt Schluss ist. Diese ist jetzt in der Lage die restlichen drei Bytes (z.B. 3x 0x00) in den Output zu schreiben um die Blockgröße herzustellen und anschließend eine 5 (für die Anzahl) und die Checksumme zu schreiben.
Somit ist das Format jetzt abgeschlossen.Daher ruft auch die Funktion
std::basic_filebuf::closeunshift auf, bevor ein File entgültig geschlossen wird.Gruß
Werner