Improved the resizing of tensors

This commit is contained in:
Benoit Steiner 2015-01-14 15:33:11 -08:00
parent 703c526355
commit 8a382aa119

View File

@ -114,16 +114,12 @@ class TensorStorage<T, NumIndices_, Dynamic, Options_, typename internal::gen_nu
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const DSizes<DenseIndex, NumIndices_>& dimensions() const {return m_dimensions;} EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const DSizes<DenseIndex, NumIndices_>& dimensions() const {return m_dimensions;}
void conservativeResize(DenseIndex size, const array<DenseIndex, NumIndices_>& nbDimensions)
{
m_data = internal::conditional_aligned_realloc_new_auto<T,(Options_&DontAlign)==0>(m_data, size, internal::array_prod(m_dimensions));
m_dimensions = nbDimensions;
}
void resize(DenseIndex size, const array<DenseIndex, NumIndices_>& nbDimensions) void resize(DenseIndex size, const array<DenseIndex, NumIndices_>& nbDimensions)
{ {
if(size != internal::array_prod(m_dimensions)) const DenseIndex currentSz = internal::array_prod(m_dimensions);
if(size != currentSz)
{ {
internal::conditional_aligned_delete_auto<T,(Options_&DontAlign)==0>(m_data, internal::array_prod(m_dimensions)); internal::conditional_aligned_delete_auto<T,(Options_&DontAlign)==0>(m_data, currentSz);
if (size) if (size)
m_data = internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(size); m_data = internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(size);
else else
@ -139,8 +135,6 @@ class TensorStorage<T, NumIndices_, Dynamic, Options_, typename internal::gen_nu
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex size() const { return m_dimensions.TotalSize(); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex size() const { return m_dimensions.TotalSize(); }
}; };
} // end namespace Eigen } // end namespace Eigen
#endif // EIGEN_CXX11_TENSOR_TENSORSTORAGE_H #endif // EIGEN_CXX11_TENSOR_TENSORSTORAGE_H