T
Hallo!
ich habe habe ein Problem mit einem zyklischen Buffer. Die folgende Funktion ist dafür verantwortlich, den Buffer zu füllen:
void CMyClass::process ( const CSequence<signed short>* const s ) {
BYTE* buf = static_cast<BYTE*>( m_pUserData->buf );
if ( ! m_pUserData->bInit ) {
m_pUserData->last = m_pUserData->size - 1;
}
m_pUserData->last = ( m_pUserData->last + 1 ) % m_pUserData->size;
const unsigned int iFirstNew = m_pUserData->last;
const unsigned int iNewBytes = ( s->getLastIndex () + 1 ) * 2;
const unsigned int iUntilEnd = ( iFirstNew + iNewBytes > m_pUserData->size ) ? m_pUserData->size - iFirstNew : iNewBytes;
const unsigned int iFromBegin = iNewBytes - iUntilEnd;
memcpy ( buf + iFirstNew, s->getPtr (), iUntilEnd );
memcpy ( buf, s->getPtr (), iFromBegin );
if ( m_pUserData->bInit && ( m_pUserData->first < iFromBegin || ( iFirstNew <= m_pUserData->first && iFirstNew + iUntilEnd > m_pUserData->first ) ) ) {
std::cerr << "Buffer Overrun" << std::endl;
exit(1); // TODO: Lost sync, try to restore?
}
m_pUserData->last = ( iFirstNew + iNewBytes - 1 ) % m_pUserData->size;
if ( ! m_pUserData->bInit ) {
m_pUserData->bInit = true;
}
unsigned int sum1=0; for (unsigned int b=0; b < (s->getLastIndex()+1)*2; b++) { sum1 += static_cast<unsigned int>(static_cast<const BYTE*>(s->getPtr())[b]); }
unsigned int sum2=0; for (unsigned int b=0; b < (s->getLastIndex()+1)*2; b++) { sum2 += static_cast<unsigned int>((iFirstNew+b)%m_pUserData->size); }
std::cout << sum1 << " - " << sum2 << std::endl;
std::cout << (sum1 == sum2 ? "[ok]" : "[EE]") << std::endl;
}
Zur Kontrolle der Daten berechne ich zwei einfache Prüfsummen. Dummerweise sind diese immer unterschiedlich, was bedeutet, dass die Werte nicht korrekt im Buffer eingetragen werden. Allerdings finde ich partout keinen Fehler. Weiß jemand Rat?
PS. Die Klasse CSequence enthält die Daten, die in den Buffer eingetragen werden sollen. Dabei gibt "getLastIndex ()" den Index des letzten Elements an, das bereitgestellt wird.
Danke im Voraus!
EDIT: hat sich inzwischen erledigt :p