[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