[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Kruhovy buffer
> Potreboval bych zdrojak k tzv "kruhovemu bufferu" v C nejlepe s popisem.
> Neco uz jsem sam napsal, ale moc mi to nefunguje :(
>
> Hlavne se mi moc nesmejte. Mne to proste tak dobre nepali.
> :)
Vzhledem k tomu, ze to je muj oblibeny algoritmus pro cachovanitextur v mem
projektu, mohu ti to vysvetlit velmi presne:
Priklad:
Pocet polozek v kruhovem bufferu stanovime na 1024 (2^n je obecne dost
vyhodne uvidis pozdeji)
#define BUFFER_SIZE 1024
char *Polozky[MAX_BUFFER];
int Tail=0;
int Head=0;
Indexy do bufferu polozek (v tomto pripade pointery na char) Head,tail
slouzi jako ukazatel na konec u pocatek vyuziteho bufferu.
I------------T=========H----------I
^^^ volne ^^^^^ vyuzite
(na pocatku to vypada samozrejme takhle:
ITH--------------------------------------I
No a pak potrebujes treba ulozit novou polozku ,
takze udelas
Head=(Head+1)&MAX_BUFFER-1;
To AND zaruci, ze kdyz dorazis na konec bufferu, automaticky te
hodi na zacatek. Kdybys nemel velikost mocninu dvou, tak to musis
testovat a odecitat rucne.
Takze timto ziskas index na novou polozku a ulozis si ji. Predtim ale
musis zkontrolovat, jestli jsi indexem Head nedohonil index Tail, pokud
ano, musis posledni polozku , na kterou ukazuje Tail vyhodit a obsadit
ji tou novou.
>
>
> Diky
>
> VaCLaV
neni zac,
cau, FiDo of INSANITY