Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool NiObjectNET::InsertExtraData(NiExtraData* pkExtra)
- {
- if (!pkExtra)
- {
- return false;
- }
- pkExtra->IncRefCount();
- if (m_usMaxSize < 1)
- {
- m_usExtraDataSize = m_usMaxSize = 1;
- m_ppkExtra = NiAlloc(NiExtraData*, m_usMaxSize);
- m_ppkExtra[0] = pkExtra;
- return true;
- }
- else if (m_usExtraDataSize == m_usMaxSize)
- {
- // Array is full. Increase size.
- m_usMaxSize = (m_usMaxSize * 2) + 1; // Balance memory fragmentation
- // with storage efficiency.
- NiExtraData** ppkNewExtra = NiAlloc(NiExtraData*, m_usMaxSize);
- unsigned int uiDestSize = m_usMaxSize * sizeof(NiExtraData*);
- NiMemcpy(ppkNewExtra, uiDestSize, m_ppkExtra,
- m_usExtraDataSize * sizeof(NiExtraData*));
- NiFree(m_ppkExtra);
- m_ppkExtra = ppkNewExtra;
- }
- unsigned short i;
- m_ppkExtra[m_usExtraDataSize] = pkExtra; // Insert new entry.
- m_usExtraDataSize++;
- for (i = m_usExtraDataSize; i < m_usMaxSize; i++)
- {
- m_ppkExtra[i] = NULL;
- }
- for (i = (m_usExtraDataSize - 1); i > 0; i--) // Sort.
- {
- ptrdiff_t dtCompare = m_ppkExtra[i - 1]->GetName() -
- m_ppkExtra[i]->GetName();
- if (dtCompare == 0) // Equal keys are a problem. Reset.
- {
- #ifndef __SPU__
- NiOutputDebugString(
- "Error: unsuccessful attempt to insert ExtraData with ");
- NiOutputDebugString(
- "same key (name) for same object.\n");
- #endif
- DeleteExtraData(i);
- return false;
- }
- else if (dtCompare > 0) // Previous key is greater. Swap.
- {
- NiExtraData* pkTmpED = m_ppkExtra[i - 1];
- m_ppkExtra[i - 1] = m_ppkExtra[i];
- m_ppkExtra[i] = pkTmpED;
- }
- else // Array is sorted. Discontinue processing.
- {
- break;
- }
- }
- return true;
- }
- void NiObjectNET::DeleteExtraData(unsigned short usExtraDataIndex)
- {
- if (usExtraDataIndex >= m_usExtraDataSize) // Sanity check.
- {
- return;
- }
- if (m_ppkExtra[usExtraDataIndex])
- {
- m_ppkExtra[usExtraDataIndex]->DecRefCount();
- }
- // Shuffle downward.
- for (unsigned short i = usExtraDataIndex;
- i < (m_usExtraDataSize - 1); i++)
- {
- m_ppkExtra[i] = m_ppkExtra[i + 1];
- }
- m_usExtraDataSize--;
- m_ppkExtra[m_usExtraDataSize] = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement