/** * @brief deepCopy * @param forceNoAllocate * @return */ virtual IDataArray::Pointer deepCopy(bool forceNoAllocate = false) { IDataArray::Pointer daCopy = createNewArray(getNumberOfTuples(), getComponentDimensions(), getName(), m_IsAllocated); if(m_IsAllocated == true && forceNoAllocate == false) { T* src = getPointer(0); void* dest = daCopy->getVoidPointer(0); size_t totalBytes = (getNumberOfTuples() * getNumberOfComponents() * sizeof(T)); ::memcpy(dest, src, totalBytes); } return daCopy; }
virtual IDataArray::Pointer reorderCopy(QVector<size_t> newOrderMap) { if(newOrderMap.size() != static_cast<QVector<size_t>::size_type>(getNumberOfTuples())) { return IDataArray::NullPointer(); } IDataArray::Pointer daCopy = createNewArray(getNumberOfTuples(), getComponentDimensions(), getName(), m_IsAllocated); if(m_IsAllocated == true) { daCopy->initializeWithZeros(); size_t chunkSize = getNumberOfComponents() * sizeof(T); for(size_t i = 0; i < getNumberOfTuples(); i++) { T* src = getPointer(i * getNumberOfComponents()); void* dest = daCopy->getVoidPointer(newOrderMap[i] * getNumberOfComponents()); ::memcpy(dest, src, chunkSize); } } return daCopy; }
int main() { double arrayOnStack[10]; stackArray = arrayOnStack; createNewArray(); createMallocArray(); setArray(stackArray); setArray(newArray - 1); setArray(mallocArray - 1); printArray(newArray); printArray(mallocArray); axpy(newArray, stackArray); axpy(newArray, mallocArray); // delete stackArray; stackArray = 0; newArray = 0; mallocArray = 0; return 0; }