Цитата(rezident @ Dec 22 2007, 00:37)

А зачем вообще нужно сдвигать буфер? Почему нельзя его оставить как есть и для извлечения значений буфера ограничится всего лишь вызовом подобной функции?
Код
short GetBufVal(short *pBuffer, unsigned idx, unsigned nSize)
{ if (idx<nSize) return(*(short *)(pBuffer+idx));
else return(*(short *)(pBuffer+(nSize-idx)));
}
Абсолютно согласен. Использовать "навороченные" программы для данной задачи явно лишнее. Лучше работать с указателями. Пусть N - длина массива, begin - его начало, тогда элемент будем брать по адресу (i+begin) mod N, т.е. то же что предложил rezident. Просто если длина массива является степенью двойки, то алгоритм rezident'а можно оптимизировать - использовать операцию логического &. Все работает шустро и очень даже красиво. Думаю понятно, что в этом случае сдвиг масиива на k элементов выглядит как begin += k.