Refactor sparse
diff --git a/Eigen/src/SparseCore/SparseMatrix.h b/Eigen/src/SparseCore/SparseMatrix.h
index ba32e48..9ad8e4a 100644
--- a/Eigen/src/SparseCore/SparseMatrix.h
+++ b/Eigen/src/SparseCore/SparseMatrix.h
@@ -237,23 +237,23 @@
       eigen_assert(row>=0 && row<rows() && col>=0 && col<cols());
       const Index outer = IsRowMajor ? row : col;
       const Index inner = IsRowMajor ? col : row;
-      Index start = outerIndexPtr()[outer];
-      Index end = isCompressed() ? outerIndexPtr()[outer + 1] : outerIndexPtr()[outer] + innerNonZeroPtr()[outer];
+      Index start = m_outerIndex[outer];
+      Index end = isCompressed() ? m_outerIndex[outer + 1] : m_outerIndex[outer] + m_innerNonZeros[outer];
       eigen_assert(end >= start && "you probably called coeffRef on a non finalized matrix");
-      Index dst = start == end ? end : data().searchLowerIndex(start, end, inner);
+      Index dst = start == end ? end : m_data.searchLowerIndex(start, end, inner);
       if (dst == end) {
-        Index capacity = outerIndexPtr()[outer + 1] - end;
+        Index capacity = m_outerIndex[outer + 1] - end;
         if (capacity > 0) {
           // implies uncompressed: push to back of vector
-          innerNonZeroPtr()[outer]++;
-          data().index(end) = inner;
-          data().value(end) = Scalar(0);
-          return data().value(end);
+          m_innerNonZeros[outer]++;
+          m_data.index(end) = inner;
+          m_data.value(end) = Scalar(0);
+          return m_data.value(end);
         }
       }
-      if ((dst < end) && (data().index(dst) == inner))
+      if ((dst < end) && (m_data.index(dst) == inner))
         // this coefficient exists, return a refernece to it
-        return data().value(dst);
+        return m_data.value(dst);
       else
         // insertion will require reconfiguring the buffer
         return insertAtByOuterInner(outer, inner, dst);
@@ -383,7 +383,7 @@
           Index alreadyReserved = internal::convert_index<Index>(m_outerIndex[j+1] - m_outerIndex[j] - m_innerNonZeros[j]);
           Index reserveSize = internal::convert_index<Index>(reserveSizes[j]);
           Index toReserve = numext::maxi(reserveSize, alreadyReserved);
-          count += toReserve + m_innerNonZeros[j];
+          count += toReserve + internal::convert_index<Index>(m_innerNonZeros[j]);
         }
         newOuterIndex[m_outerSize] = internal::convert_index<StorageIndex>(count);
 
@@ -394,7 +394,7 @@
           StorageIndex begin = m_outerIndex[j];
           StorageIndex end = begin + innerNNZ;
           StorageIndex target = newOuterIndex[j];
-          data().moveChunk(begin, target, innerNNZ);
+          m_data.moveChunk(begin, target, innerNNZ);
         }
         
         std::swap(m_outerIndex, newOuterIndex);
@@ -496,20 +496,20 @@
       * same as insert(Index,Index) except that the indices are given relative to the storage order */
     Scalar& insertByOuterInner(Index j, Index i)
     {
-      Index start = outerIndexPtr()[j];
-      Index end = isCompressed() ? outerIndexPtr()[j + 1] : start + innerNonZeroPtr()[j];
-      Index dst = start == end ? end : data().searchLowerIndex(start, end, i);
+      Index start = m_outerIndex[j];
+      Index end = isCompressed() ? m_outerIndex[j + 1] : start + m_innerNonZeros[j];
+      Index dst = start == end ? end : m_data.searchLowerIndex(start, end, i);
       if (dst == end) {
-        Index capacity = outerIndexPtr()[j + 1] - end;
+        Index capacity = m_outerIndex[j + 1] - end;
         if (capacity > 0) {
           // implies uncompressed: push to back of vector
-          innerNonZeroPtr()[j]++;
-          data().index(end) = i;
-          data().value(end) = Scalar(0);
-          return data().value(end);
+          m_innerNonZeros[j]++;
+          m_data.index(end) = i;
+          m_data.value(end) = Scalar(0);
+          return m_data.value(end);
         }
       }
-      eigen_assert((dst == end || data().index(dst) != i) &&
+      eigen_assert((dst == end || m_data.index(dst) != i) &&
           "you cannot insert an element that already exists, you must call coeffRef to this end");
       return insertAtByOuterInner(j, i, dst);
     }
@@ -520,46 +520,46 @@
     {
       if (isCompressed()) return;
       
-      eigen_internal_assert(outerIndexPtr()!=0 && outerSize()>0);
+      eigen_internal_assert(m_outerIndex!=0 && m_outerSize>0);
 
-      StorageIndex start = outerIndexPtr()[1];
-      outerIndexPtr()[1] = innerNonZeroPtr()[0];
+      StorageIndex start = m_outerIndex[1];
+      m_outerIndex[1] = m_innerNonZeros[0];
       // try to move fewer, larger contiguous chunks
       Index copyStart = start;
-      Index copyTarget = innerNonZeroPtr()[0];
-      for (Index j = 1; j < outerSize(); j++)
+      Index copyTarget = m_innerNonZeros[0];
+      for (Index j = 1; j < m_outerSize; j++)
       {
-        Index end = start + innerNonZeroPtr()[j];
-        Index nextStart = outerIndexPtr()[j + 1];
+        Index end = start + m_innerNonZeros[j];
+        Index nextStart = m_outerIndex[j + 1];
         // dont forget to move the last chunk!
-        bool breakUpCopy = (end != nextStart) || (j == outerSize() - 1);
+        bool breakUpCopy = (end != nextStart) || (j == m_outerSize - 1);
         if (breakUpCopy)
         {
           Index chunkSize = end - copyStart;
-          data().moveChunk(copyStart, copyTarget, chunkSize);
+          if(chunkSize > 0) m_data.moveChunk(copyStart, copyTarget, chunkSize);
           copyStart = nextStart;
           copyTarget += chunkSize;
         }
         start = nextStart;
-        outerIndexPtr()[j + 1] = outerIndexPtr()[j] + innerNonZeroPtr()[j];
+        m_outerIndex[j + 1] = m_outerIndex[j] + m_innerNonZeros[j];
       }
-      data().resize(outerIndexPtr()[outerSize()]);
+      m_data.resize(m_outerIndex[m_outerSize]);
 
       // release as much memory as possible
-      internal::conditional_aligned_delete_auto<StorageIndex, true>(innerNonZeroPtr(), outerSize());
+      internal::conditional_aligned_delete_auto<StorageIndex, true>(m_innerNonZeros, m_outerSize);
       m_innerNonZeros = 0;
-      data().squeeze();
+      m_data.squeeze();
     }
 
     /** Turns the matrix into the uncompressed mode */
     void uncompress()
     {
       if (!isCompressed()) return;
-      m_innerNonZeros = internal::conditional_aligned_new_auto<StorageIndex, true>(outerSize());
-      if (outerIndexPtr()[outerSize()] == 0)
-        std::fill_n(innerNonZeroPtr(), outerSize(), StorageIndex(0));
+      m_innerNonZeros = internal::conditional_aligned_new_auto<StorageIndex, true>(m_outerSize);
+      if (m_outerIndex[m_outerSize] == 0)
+        std::fill_n(m_innerNonZeros, m_outerSize, StorageIndex(0));
       else
-        for (Index j = 0; j < outerSize(); j++) innerNonZeroPtr()[j] = outerIndexPtr()[j + 1] - outerIndexPtr()[j];
+        for (Index j = 0; j < m_outerSize; j++) m_innerNonZeros[j] = m_outerIndex[j + 1] - m_outerIndex[j];
     }
 
     /** Suppresses all nonzeros which are \b much \b smaller \b than \a reference under the tolerance \a epsilon */
@@ -622,40 +622,40 @@
       Index newOuterSize = IsRowMajor ? rows : cols;
       Index newInnerSize = IsRowMajor ? cols : rows;
 
-      Index innerChange = newInnerSize - innerSize();
-      Index outerChange = newOuterSize - outerSize();
+      Index innerChange = newInnerSize - m_innerSize;
+      Index outerChange = newOuterSize - m_outerSize;
 
       if (outerChange != 0) {
         m_outerIndex = internal::conditional_aligned_realloc_new_auto<StorageIndex, true>(
-            outerIndexPtr(), newOuterSize + 1, outerSize() + 1);
+            m_outerIndex, newOuterSize + 1, m_outerSize + 1);
 
         if (!isCompressed())
           m_innerNonZeros = internal::conditional_aligned_realloc_new_auto<StorageIndex, true>(
-              innerNonZeroPtr(), newOuterSize, outerSize());
+              m_innerNonZeros, newOuterSize, m_outerSize);
 
         if (outerChange > 0) {
-          StorageIndex lastIdx = outerSize() == 0 ? StorageIndex(0) : outerIndexPtr()[outerSize()];
-          std::fill_n(outerIndexPtr() + outerSize(), outerChange + 1, lastIdx);
+          StorageIndex lastIdx = m_outerSize == 0 ? StorageIndex(0) : m_outerIndex[m_outerSize];
+          std::fill_n(m_outerIndex + m_outerSize, outerChange + 1, lastIdx);
 
-          if (!isCompressed()) std::fill_n(innerNonZeroPtr() + outerSize(), outerChange, StorageIndex(0));
+          if (!isCompressed()) std::fill_n(m_innerNonZeros + m_outerSize, outerChange, StorageIndex(0));
         }
       }
       m_outerSize = newOuterSize;
 
       if (innerChange < 0) {
-        for (Index j = 0; j < outerSize(); j++) {
-          Index start = outerIndexPtr()[j];
-          Index end = isCompressed() ? outerIndexPtr()[j + 1] : start + innerNonZeroPtr()[j];
-          Index lb = data().searchLowerIndex(start, end, newInnerSize);
+        for (Index j = 0; j < m_outerSize; j++) {
+          Index start = m_outerIndex[j];
+          Index end = isCompressed() ? m_outerIndex[j + 1] : start + m_innerNonZeros[j];
+          Index lb = m_data.searchLowerIndex(start, end, newInnerSize);
           if (lb != end) {
             uncompress();
-            innerNonZeroPtr()[j] = StorageIndex(lb - start);
+            m_innerNonZeros[j] = StorageIndex(lb - start);
           }
         }
       }
       m_innerSize = newInnerSize;
 
-      Index newSize = outerIndexPtr()[outerSize()];
+      Index newSize = m_outerIndex[m_outerSize];
       eigen_assert(newSize <= m_data.size());
       m_data.resize(newSize);
     }
@@ -803,17 +803,17 @@
       * This function also turns the matrix into compressed mode, and drop any reserved memory. */
     inline void setIdentity()
     {
-      eigen_assert(rows() == cols() && "ONLY FOR SQUARED MATRICES");
+      eigen_assert(m_outerSize == m_innerSize && "ONLY FOR SQUARED MATRICES");
       if (m_innerNonZeros) {
         internal::conditional_aligned_delete_auto<StorageIndex, true>(m_innerNonZeros, m_outerSize);
         m_innerNonZeros = 0;
       }
-      m_data.resize(rows());
+      m_data.resize(m_outerSize);
       // is it necessary to squeeze?
       m_data.squeeze();
-      std::iota(outerIndexPtr(), outerIndexPtr() + rows() + 1, StorageIndex(0));
-      std::iota(innerIndexPtr(), innerIndexPtr() + rows(), StorageIndex(0));
-      std::fill_n(valuePtr(), rows(), Scalar(1));
+      std::iota(m_outerIndex, m_outerIndex + m_outerSize + 1, StorageIndex(0));
+      std::iota(innerIndexPtr(), innerIndexPtr() + m_outerSize, StorageIndex(0));
+      std::fill_n(valuePtr(), m_outerSize, Scalar(1));
     }
 
     inline SparseMatrix& operator=(const SparseMatrix& other)
@@ -998,11 +998,11 @@
       const bool overwrite = internal::is_same<Func, internal::assign_op<Scalar,Scalar> >::value;
       if(overwrite)
       {
-        if((this->rows()!=n) || (this->cols()!=n))
-          this->resize(n, n);
+        if((m_outerSize != n) || (m_innerSize != n))
+          resize(n, n);
       }
 
-      if(data().size()==0 || overwrite)
+      if(m_data.size()==0 || overwrite)
       {
         if (!isCompressed()) {
           internal::conditional_aligned_delete_auto<StorageIndex, true>(m_innerNonZeros, m_outerSize);
@@ -1010,7 +1010,7 @@
         }
         resizeNonZeros(n);
         ValueMap valueMap(valuePtr(), n);
-        std::iota(outerIndexPtr(), outerIndexPtr() + n + 1, StorageIndex(0));
+        std::iota(m_outerIndex, m_outerIndex + n + 1, StorageIndex(0));
         std::iota(innerIndexPtr(), innerIndexPtr() + n, StorageIndex(0));
         valueMap.setZero();
         internal::call_assignment_no_alias(valueMap, diagXpr, assignFunc);
@@ -1027,12 +1027,12 @@
           Index shift = 0;
 
           for (Index j = 0; j < n; j++) {
-            Index begin = outerIndexPtr()[j];
-            Index end = isCompressed() ? outerIndexPtr()[j + 1] : begin + innerNonZeroPtr()[j];
-            Index capacity = outerIndexPtr()[j + 1] - end;
-            Index dst = data().searchLowerIndex(begin, end, j);
+            Index begin = m_outerIndex[j];
+            Index end = isCompressed() ? m_outerIndex[j + 1] : begin + m_innerNonZeros[j];
+            Index capacity = m_outerIndex[j + 1] - end;
+            Index dst = m_data.searchLowerIndex(begin, end, j);
             // the entry exists: update it now
-            if (dst != end && data().index(dst) == j) assignFunc.assignCoeff(data().value(dst), diaEval.coeff(j));
+            if (dst != end && m_data.index(dst) == j) assignFunc.assignCoeff(m_data.value(dst), diaEval.coeff(j));
             // the entry belongs at the back of the vector: push to back
             else if (dst == end && capacity > 0)
               assignFunc.assignCoeff(insertBackUncompressed(j, j), diaEval.coeff(j));
@@ -1047,13 +1047,13 @@
           
           if (deferredInsertions > 0) {
 
-            data().resize(data().size() + shift);
-            Index copyEnd = isCompressed() ? outerIndexPtr()[outerSize()]
-                                           : outerIndexPtr()[outerSize() - 1] + innerNonZeroPtr()[outerSize() - 1];
-            for (Index j = outerSize() - 1; deferredInsertions > 0; j--) {
-              Index begin = outerIndexPtr()[j];
-              Index end = isCompressed() ? outerIndexPtr()[j + 1] : begin + innerNonZeroPtr()[j];
-              Index capacity = outerIndexPtr()[j + 1] - end;
+            m_data.resize(m_data.size() + shift);
+            Index copyEnd = isCompressed() ? m_outerIndex[m_outerSize]
+                                           : m_outerIndex[m_outerSize - 1] + m_innerNonZeros[m_outerSize - 1];
+            for (Index j = m_outerSize - 1; deferredInsertions > 0; j--) {
+              Index begin = m_outerIndex[j];
+              Index end = isCompressed() ? m_outerIndex[j + 1] : begin + m_innerNonZeros[j];
+              Index capacity = m_outerIndex[j + 1] - end;
 
               bool doInsertion = insertionLocations(j) >= 0;
               bool breakUpCopy = doInsertion && (capacity > 0);
@@ -1062,14 +1062,14 @@
               // where `threshold >= 0` to skip inactive nonzeros in each vector
               // this reduces the total number of copied elements, but requires more moveChunk calls
               if (breakUpCopy) {
-                Index copyBegin = outerIndexPtr()[j + 1];
+                Index copyBegin = m_outerIndex[j + 1];
                 Index to = copyBegin + shift;
                 Index chunkSize = copyEnd - copyBegin;
-                data().moveChunk(copyBegin, to, chunkSize);
+                m_data.moveChunk(copyBegin, to, chunkSize);
                 copyEnd = end;
               }
 
-              outerIndexPtr()[j + 1] += shift;
+              m_outerIndex[j + 1] += shift;
               
               if (doInsertion) {
                 // if there is capacity, shift into the inactive nonzeros
@@ -1077,12 +1077,12 @@
                 Index copyBegin = insertionLocations(j);
                 Index to = copyBegin + shift;
                 Index chunkSize = copyEnd - copyBegin;
-                data().moveChunk(copyBegin, to, chunkSize);
+                m_data.moveChunk(copyBegin, to, chunkSize);
                 Index dst = to - 1;
-                data().index(dst) = StorageIndex(j);
-                data().value(dst) = Scalar(0);
-                assignFunc.assignCoeff(data().value(dst), diaEval.coeff(j));
-                if (!isCompressed()) innerNonZeroPtr()[j]++;
+                m_data.index(dst) = StorageIndex(j);
+                m_data.value(dst) = Scalar(0);
+                assignFunc.assignCoeff(m_data.value(dst), diaEval.coeff(j));
+                if (!isCompressed()) m_innerNonZeros[j]++;
                 shift--;
                 deferredInsertions--;
                 copyEnd = copyBegin;
@@ -1442,20 +1442,20 @@
   eigen_assert(!isCompressed());
   Index outer = IsRowMajor ? row : col;
   Index inner = IsRowMajor ? col : row;
-  Index start = outerIndexPtr()[outer];
-  Index end = start + innerNonZeroPtr()[outer];
-  Index dst = start == end ? end : data().searchLowerIndex(start, end, inner);
+  Index start = m_outerIndex[outer];
+  Index end = start + m_innerNonZeros[outer];
+  Index dst = start == end ? end : m_data.searchLowerIndex(start, end, inner);
   if (dst == end) {
-    Index capacity = outerIndexPtr()[outer + 1] - end;
+    Index capacity = m_outerIndex[outer + 1] - end;
     if (capacity > 0) {
       // implies uncompressed: push to back of vector
-      innerNonZeroPtr()[outer]++;
-      data().index(end) = inner;
-      data().value(end) = Scalar(0);
-      return data().value(end);
+      m_innerNonZeros[outer]++;
+      m_data.index(end) = inner;
+      m_data.value(end) = Scalar(0);
+      return m_data.value(end);
     }
   }
-  eigen_assert((dst == end || data().index(dst) != inner) &&
+  eigen_assert((dst == end || m_data.index(dst) != inner) &&
                "you cannot insert an element that already exists, you must call coeffRef to this end");
   return insertUncompressedAtByOuterInner(outer, inner, dst);
 }
@@ -1466,10 +1466,10 @@
   eigen_assert(isCompressed());
   Index outer = IsRowMajor ? row : col;
   Index inner = IsRowMajor ? col : row;
-  Index start = outerIndexPtr()[outer];
-  Index end = outerIndexPtr()[outer + 1];
-  Index dst = start == end ? end : data().searchLowerIndex(start, end, inner);
-  eigen_assert((dst == end || data().index(dst) != inner) &&
+  Index start = m_outerIndex[outer];
+  Index end = m_outerIndex[outer + 1];
+  Index dst = start == end ? end : m_data.searchLowerIndex(start, end, inner);
+  eigen_assert((dst == end || m_data.index(dst) != inner) &&
                "you cannot insert an element that already exists, you must call coeffRef to this end");
   return insertCompressedAtByOuterInner(outer, inner, dst);
 }
@@ -1480,25 +1480,25 @@
   eigen_assert(isCompressed());
   // compressed insertion always requires expanding the buffer
   // first, check if there is adequate allocated memory
-  if (data().allocatedSize() <= data().size()) {
+  if (m_data.allocatedSize() <= m_data.size()) {
     // if there is no capacity for a single insertion, double the capacity
     // increase capacity by a mininum of 32
     Index minReserve = 32;
-    Index reserveSize = numext::maxi(minReserve, data().allocatedSize());
-    data().reserve(reserveSize);
+    Index reserveSize = numext::maxi(minReserve, m_data.allocatedSize());
+    m_data.reserve(reserveSize);
   }
-  data().resize(data().size() + 1);
-  Index chunkSize = outerIndexPtr()[outerSize()] - dst;
+  m_data.resize(m_data.size() + 1);
+  Index chunkSize = m_outerIndex[m_outerSize] - dst;
   // shift the existing data to the right if necessary
-  data().moveChunk(dst, dst + 1, chunkSize);
+  m_data.moveChunk(dst, dst + 1, chunkSize);
   // update nonzero counts
   // potentially O(outerSize) bottleneck!
-  for (Index j = outer; j < outerSize(); j++) outerIndexPtr()[j + 1]++;
+  for (Index j = outer; j < m_outerSize; j++) m_outerIndex[j + 1]++;
   // initialize the coefficient
-  data().index(dst) = StorageIndex(inner);
-  data().value(dst) = Scalar(0);
+  m_data.index(dst) = StorageIndex(inner);
+  m_data.value(dst) = Scalar(0);
   // return a reference to the coefficient
-  return data().value(dst);
+  return m_data.value(dst);
 }
 
 template <typename Scalar_, int Options_, typename StorageIndex_>
@@ -1506,79 +1506,79 @@
 SparseMatrix<Scalar_, Options_, StorageIndex_>::insertUncompressedAtByOuterInner(Index outer, Index inner, Index dst) {
   eigen_assert(!isCompressed());
   // find a vector with capacity, starting at `outer` and searching to the left and right
-  for (Index leftTarget = outer - 1, rightTarget = outer; (leftTarget >= 0) || (rightTarget < outerSize());) {
-    if (rightTarget < outerSize()) {
-      Index start = outerIndexPtr()[rightTarget];
-      Index end = start + innerNonZeroPtr()[rightTarget];
-      Index nextStart = outerIndexPtr()[rightTarget + 1];
+  for (Index leftTarget = outer - 1, rightTarget = outer; (leftTarget >= 0) || (rightTarget < m_outerSize);) {
+    if (rightTarget < m_outerSize) {
+      Index start = m_outerIndex[rightTarget];
+      Index end = start + m_innerNonZeros[rightTarget];
+      Index nextStart = m_outerIndex[rightTarget + 1];
       Index capacity = nextStart - end;
       if (capacity > 0) {
         // move [dst, end) to dst+1 and insert at dst
         Index chunkSize = end - dst;
-        if (chunkSize > 0) data().moveChunk(dst, dst + 1, chunkSize);
-        innerNonZeroPtr()[outer]++;
-        for (Index j = outer; j < rightTarget; j++) outerIndexPtr()[j + 1]++;
-        data().index(dst) = StorageIndex(inner);
-        data().value(dst) = Scalar(0);
-        return data().value(dst);
+        if (chunkSize > 0) m_data.moveChunk(dst, dst + 1, chunkSize);
+        m_innerNonZeros[outer]++;
+        for (Index j = outer; j < rightTarget; j++) m_outerIndex[j + 1]++;
+        m_data.index(dst) = StorageIndex(inner);
+        m_data.value(dst) = Scalar(0);
+        return m_data.value(dst);
       }
       rightTarget++;
     }
     if (leftTarget >= 0) {
-      Index start = outerIndexPtr()[leftTarget];
-      Index end = start + innerNonZeroPtr()[leftTarget];
-      Index nextStart = outerIndexPtr()[leftTarget + 1];
+      Index start = m_outerIndex[leftTarget];
+      Index end = start + m_innerNonZeros[leftTarget];
+      Index nextStart = m_outerIndex[leftTarget + 1];
       Index capacity = nextStart - end;
       if (capacity > 0) {
         // tricky: dst is a lower bound, so we must insert at dst-1 when shifting left
         // move [nextStart, dst) to nextStart-1 and insert at dst-1
         Index chunkSize = dst - nextStart;
-        if (chunkSize > 0) data().moveChunk(nextStart, nextStart - 1, chunkSize);
-        innerNonZeroPtr()[outer]++;
-        for (Index j = leftTarget; j < outer; j++) outerIndexPtr()[j + 1]--;
-        data().index(dst - 1) = StorageIndex(inner);
-        data().value(dst - 1) = Scalar(0);
-        return data().value(dst - 1);
+        if (chunkSize > 0) m_data.moveChunk(nextStart, nextStart - 1, chunkSize);
+        m_innerNonZeros[outer]++;
+        for (Index j = leftTarget; j < outer; j++) m_outerIndex[j + 1]--;
+        m_data.index(dst - 1) = StorageIndex(inner);
+        m_data.value(dst - 1) = Scalar(0);
+        return m_data.value(dst - 1);
       }
       leftTarget--;
     }
   }
 
   // no room for interior insertion
-  // nonZeros() == data().size()
+  // nonZeros() == m_data.size()
   // record offset as outerIndxPtr will change
-  Index dst_offset = dst - outerIndexPtr()[outer];
+  Index dst_offset = dst - m_outerIndex[outer];
   // allocate space for random insertion
-  if (data().allocatedSize() == 0) {
+  if (m_data.allocatedSize() == 0) {
     // fast method to allocate space for one element per vector in empty matrix
-    data().resize(outerSize());
-    std::iota(outerIndexPtr(), outerIndexPtr() + outerSize() + 1, StorageIndex(0));
+    m_data.resize(m_outerSize);
+    std::iota(m_outerIndex, m_outerIndex + m_outerSize + 1, StorageIndex(0));
   } else {
     // check for integer overflow: if maxReserveSize == 0, insertion is not possible
-    Index maxReserveSize = static_cast<Index>(NumTraits<StorageIndex>::highest()) - data().allocatedSize();
+    Index maxReserveSize = static_cast<Index>(NumTraits<StorageIndex>::highest()) - m_data.allocatedSize();
     eigen_assert(maxReserveSize > 0);
-    if (outerSize() <= maxReserveSize) {
+    if (m_outerSize <= maxReserveSize) {
       // allocate space for one additional element per vector
-      reserveInnerVectors(IndexVector::Constant(outerSize(), 1));
+      reserveInnerVectors(IndexVector::Constant(m_outerSize, 1));
     } else {
       // handle the edge case where StorageIndex is insufficient to reserve outerSize additional elements
       // allocate space for one additional element in the interval [outer,maxReserveSize)
       typedef internal::sparse_reserve_op<StorageIndex> ReserveSizesOp;
       typedef CwiseNullaryOp<ReserveSizesOp, IndexVector> ReserveSizesXpr;
-      ReserveSizesXpr reserveSizesXpr(outerSize(), 1, ReserveSizesOp(outer, outerSize(), maxReserveSize));
+      ReserveSizesXpr reserveSizesXpr(m_outerSize, 1, ReserveSizesOp(outer, m_outerSize, maxReserveSize));
       reserveInnerVectors(reserveSizesXpr);
     }
   }
   // insert element at `dst` with new outer indices
-  Index start = outerIndexPtr()[outer];
-  Index end = start + innerNonZeroPtr()[outer];
+  Index start = m_outerIndex[outer];
+  Index end = start + m_innerNonZeros[outer];
   Index new_dst = start + dst_offset;
   Index chunkSize = end - new_dst;
-  if (chunkSize > 0) data().moveChunk(new_dst, new_dst + 1, chunkSize);
-  innerNonZeroPtr()[outer]++;
-  data().index(new_dst) = StorageIndex(inner);
-  data().value(new_dst) = Scalar(0);
-  return data().value(new_dst);
+  if (chunkSize > 0) m_data.moveChunk(new_dst, new_dst + 1, chunkSize);
+  m_innerNonZeros[outer]++;
+  m_data.index(new_dst) = StorageIndex(inner);
+  m_data.value(new_dst) = Scalar(0);
+  return m_data.value(new_dst);
 }
 
 namespace internal {