void * Drgbase::FVInsert(void * pv, long lindex)
BYTE * pbLindex;
pbLindex = m_rgb + (lindex * m_lcbSize);
if(pbLindex < m_pbMac)
II Indeks mieści się w granicach.
// Sprawdzenie, czy trzeba powiększyć tablicę. if(m_pbMac == m_pbMax && !FGrow()) goto LFail;
// Mamy wystarczająco dużo miejsca, żeby dokonać wstawienia II Przesunięcie tablicy o mJcbSize
// memmove zapewnia, że mogą być skopiowane nakładające sie obszary. // Nie trzeba się więc o to martwić.
memmove(( BYTE *)(pbLindex + m_lcbSize), pbLindex, m_pbMac -pbLindex);
memcpy(pbLindex, pv, mJcbSize); pv = pbLindex; m_pbMac += mJcbSize;
else
// Nie można oczywiście wstawić za ostatnim elementem. Zamiast tego II używamy dołączenia, return PvAppend(pv);
return pv;
LFail:
return NULL;
void * Drgbase::PvAt(long lindex) const
void * pv;
if(!m_rgb)
return NULL;
pv = (void *)(m_rgb + (lindex * mJcbSize)); if(pv < (void *)m_pbMac) return pv; return NULL;