Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool NiObjectNET::InsertExtraData(NiExtraData* extraData)
- {
- if (!extraData)
- return false;
- extraData->IncRef();
- if (m_extraDataCapacity < 1)
- {
- m_extraDataLen = m_extraDataCapacity = 1;
- m_extraData = (NiExtraData**)FormHeap_Allocate(sizeof(NiExtraData*) * m_extraDataCapacity);
- m_extraData[0] = extraData;
- return true;
- }
- else if (m_extraDataLen == m_extraDataCapacity) // Increase size
- {
- m_extraDataCapacity = (m_extraDataCapacity * 2) + 1;
- NiExtraData** pNewExtraData = (NiExtraData**)FormHeap_Allocate(sizeof(NiExtraData*) * m_extraDataCapacity);
- UInt16 uiDestSize = m_extraDataCapacity * sizeof(NiExtraData*);
- memcpy_s(pNewExtraData, uiDestSize, m_extraData, m_extraDataLen * sizeof(NiExtraData*));
- FormHeap_Free(m_extraData);
- m_extraData = pNewExtraData;
- }
- UInt16 i = 0;
- m_extraData[m_extraDataLen] = extraData; // Insert
- m_extraDataLen++;
- for (i = m_extraDataLen; i < m_extraDataCapacity; i++)
- m_extraData[i] = NULL;
- for (i = (m_extraDataLen - 1); i > 0; i--) // Sort
- {
- ptrdiff_t dtCompare = m_extraData[i - 1]->m_pcName - m_extraData[i]->m_pcName;
- if (dtCompare == 0) // Delete equal key
- {
- DeleteExtraData(i);
- return false;
- }
- else if (dtCompare > 0) // Swap
- {
- NiExtraData* pkTmpED = m_extraData[i - 1];
- m_extraData[i - 1] = m_extraData[i];
- m_extraData[i] = pkTmpED;
- }
- else
- break; // Sorted
- }
- return true;
- }
- void NiObjectNET::DeleteExtraData(UInt16 index)
- {
- if (index >= m_extraDataLen)
- return;
- if (m_extraData[index])
- m_extraData[index]->DecRef();
- // Shuffle downward.
- for (UInt16 i = index; i < (m_extraDataLen - 1); i++)
- {
- m_extraData[i] = m_extraData[i + 1];
- }
- m_extraDataLen--;
- m_extraData[m_extraDataLen] = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement