Forstår ikke dette eksempel

Tags:    c++

Hej

Jeg sidder og læser lidt om streambuffer og hvordan man laver dem. Jeg er stødt på et eksempel, http://www.josuttis.com/libbook/io/outbuf3.hpp.html og kan ikke rigtig forstå hvorfor han sætter den til bufferSize-1. Eller lad mig sige, jeg kan godt se hvad det er den gør, men jeg ikke forstå hvorfor han ikke bare sætter den til buffer+bufferSize. Har det nogen optimerende indvirkning på programmet ofr ifølge bogen "the C++ standard", så fortæller den ikke noget om at man skal pege på det sidste element i bufferen.



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Det første argument gemmer start pointeren og det andet argumenter gemmer next pointeren.

-- snip --
basic_streambuf::setp
void setp(E *pbeg, E *pend);
void setp(E *pbeg, E *pnext, E *pend);

The member function stores pbeg in the beginning pointer, pnext in the next pointer, and pend in the end pointer for the output buffer.
-- snip --

Adressen på den første pointer bliver altså gemt i det første argument. Adressen + længden på det allokeret + 1, giver adressen til din next pointer og gemmes i andet argument. Der bruges "+1" for at gøre plads til terminering af den første / foregående allokering. Så det der rent faktisk sker er at adressen til din next pointer bliver beregnet.

Hth




Indlæg senest redigeret d. 26.02.2007 18:47 af Bruger #10448
Ja, de bliver beregnet af setp, den er jeg med på, men hvorfor ikke bare buffer + bufferSize? Han trækker jo en fra, så den sidste karakter der bliver sendt til bufferen bliver sendt og skal opdateres med overflowet og ikke bare lader det op til xputn eller sputc funktionerne. Altså det jeg ikke forstår er hvorfor han skal flytte endpointeren hen så den peger på den sidste plads i bufferen.



Altså det jeg ikke forstår er hvorfor han skal flytte endpointeren hen så den peger på den sidste plads i bufferen.


Brug af funktionen setp() krræver både en startpointer og en endpointer, da det står i API dokumentationen (se min snippet tidligere). Han flytter ikke nogle pointere, men bruger adressen råt til startpointeren og beregner *selv* (ikke setp) adressen til endpointeren udfra startpointerens adresse og den allokerede hukommelses størrelse.

Hth



Indlæg senest redigeret d. 28.02.2007 20:08 af Bruger #10448
Ja :) Den er jeg fuldkommen med på, men HVORFOR? Hvorfor gør han sådan at man kalder overflow med den sidste karakter og lader overflow om arbejdet med at indsætte den sidste karakter i bufferen? Det er det jeg ikke forstår.



Kæft hvor er jeg da bare dum... Jeg må genopfriske mit C.



t