1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008-2009 Guillaume Saupin <guillaume.saupin@cea.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_SKYLINE_STORAGE_H 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_SKYLINE_STORAGE_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen { 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Stores a skyline set of values in three structures : 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The diagonal elements 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The upper elements 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The lower elements 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass SkylineStorage { 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename NumTraits<Scalar>::Real RealScalar; 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef SparseIndex Index; 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic: 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SkylineStorage() 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : m_diag(0), 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lower(0), 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upper(0), 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerProfile(0), 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperProfile(0), 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_diagSize(0), 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperSize(0), 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerSize(0), 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperProfileSize(0), 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerProfileSize(0), 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_allocatedSize(0) { 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SkylineStorage(const SkylineStorage& other) 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : m_diag(0), 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lower(0), 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upper(0), 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerProfile(0), 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperProfile(0), 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_diagSize(0), 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperSize(0), 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerSize(0), 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperProfileSize(0), 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerProfileSize(0), 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_allocatedSize(0) { 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *this = other; 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SkylineStorage & operator=(const SkylineStorage& other) { 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath resize(other.diagSize(), other.m_upperProfileSize, other.m_lowerProfileSize, other.upperSize(), other.lowerSize()); 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(m_diag, other.m_diag, m_diagSize * sizeof (Scalar)); 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(m_upper, other.m_upper, other.upperSize() * sizeof (Scalar)); 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(m_lower, other.m_lower, other.lowerSize() * sizeof (Scalar)); 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(m_upperProfile, other.m_upperProfile, m_upperProfileSize * sizeof (Index)); 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(m_lowerProfile, other.m_lowerProfile, m_lowerProfileSize * sizeof (Index)); 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return *this; 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void swap(SkylineStorage& other) { 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_diag, other.m_diag); 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_upper, other.m_upper); 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_lower, other.m_lower); 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_upperProfile, other.m_upperProfile); 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_lowerProfile, other.m_lowerProfile); 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_diagSize, other.m_diagSize); 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_upperSize, other.m_upperSize); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_lowerSize, other.m_lowerSize); 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::swap(m_allocatedSize, other.m_allocatedSize); 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ~SkylineStorage() { 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_diag; 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_upper; 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (m_upper != m_lower) 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_lower; 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_upperProfile; 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_lowerProfile; 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void reserve(Index size, Index upperProfileSize, Index lowerProfileSize, Index upperSize, Index lowerSize) { 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index newAllocatedSize = size + upperSize + lowerSize; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (newAllocatedSize > m_allocatedSize) 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath reallocate(size, upperProfileSize, lowerProfileSize, upperSize, lowerSize); 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void squeeze() { 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (m_allocatedSize > m_diagSize + m_upperSize + m_lowerSize) 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath reallocate(m_diagSize, m_upperProfileSize, m_lowerProfileSize, m_upperSize, m_lowerSize); 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void resize(Index diagSize, Index upperProfileSize, Index lowerProfileSize, Index upperSize, Index lowerSize, float reserveSizeFactor = 0) { 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (m_allocatedSize < diagSize + upperSize + lowerSize) 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath reallocate(diagSize, upperProfileSize, lowerProfileSize, upperSize + Index(reserveSizeFactor * upperSize), lowerSize + Index(reserveSizeFactor * lowerSize)); 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_diagSize = diagSize; 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperSize = upperSize; 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerSize = lowerSize; 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperProfileSize = upperProfileSize; 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerProfileSize = lowerProfileSize; 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index diagSize() const { 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_diagSize; 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index upperSize() const { 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_upperSize; 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index lowerSize() const { 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_lowerSize; 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index upperProfileSize() const { 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_upperProfileSize; 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index lowerProfileSize() const { 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_lowerProfileSize; 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index allocatedSize() const { 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_allocatedSize; 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void clear() { 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_diagSize = 0; 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Scalar& diag(Index i) { 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_diag[i]; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar& diag(Index i) const { 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_diag[i]; 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Scalar& upper(Index i) { 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_upper[i]; 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar& upper(Index i) const { 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_upper[i]; 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Scalar& lower(Index i) { 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_lower[i]; 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar& lower(Index i) const { 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_lower[i]; 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index& upperProfile(Index i) { 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_upperProfile[i]; 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Index& upperProfile(Index i) const { 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_upperProfile[i]; 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index& lowerProfile(Index i) { 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_lowerProfile[i]; 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Index& lowerProfile(Index i) const { 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_lowerProfile[i]; 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static SkylineStorage Map(Index* upperProfile, Index* lowerProfile, Scalar* diag, Scalar* upper, Scalar* lower, Index size, Index upperSize, Index lowerSize) { 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SkylineStorage res; 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_upperProfile = upperProfile; 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_lowerProfile = lowerProfile; 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_diag = diag; 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_upper = upper; 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_lower = lower; 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_allocatedSize = res.m_diagSize = size; 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_upperSize = upperSize; 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.m_lowerSize = lowerSize; 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return res; 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void reset() { 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memset(m_diag, 0, m_diagSize * sizeof (Scalar)); 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memset(m_upper, 0, m_upperSize * sizeof (Scalar)); 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memset(m_lower, 0, m_lowerSize * sizeof (Scalar)); 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memset(m_upperProfile, 0, m_diagSize * sizeof (Index)); 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memset(m_lowerProfile, 0, m_diagSize * sizeof (Index)); 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void prune(Scalar reference, RealScalar epsilon = dummy_precision<RealScalar>()) { 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //TODO 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprotected: 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void reallocate(Index diagSize, Index upperProfileSize, Index lowerProfileSize, Index upperSize, Index lowerSize) { 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* diag = new Scalar[diagSize]; 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* upper = new Scalar[upperSize]; 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* lower = new Scalar[lowerSize]; 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index* upperProfile = new Index[upperProfileSize]; 209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index* lowerProfile = new Index[lowerProfileSize]; 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index copyDiagSize = (std::min)(diagSize, m_diagSize); 212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index copyUpperSize = (std::min)(upperSize, m_upperSize); 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index copyLowerSize = (std::min)(lowerSize, m_lowerSize); 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index copyUpperProfileSize = (std::min)(upperProfileSize, m_upperProfileSize); 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index copyLowerProfileSize = (std::min)(lowerProfileSize, m_lowerProfileSize); 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // copy 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(diag, m_diag, copyDiagSize * sizeof (Scalar)); 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(upper, m_upper, copyUpperSize * sizeof (Scalar)); 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(lower, m_lower, copyLowerSize * sizeof (Scalar)); 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(upperProfile, m_upperProfile, copyUpperProfileSize * sizeof (Index)); 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath memcpy(lowerProfile, m_lowerProfile, copyLowerProfileSize * sizeof (Index)); 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // delete old stuff 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_diag; 228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_upper; 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_lower; 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_upperProfile; 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath delete[] m_lowerProfile; 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_diag = diag; 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upper = upper; 234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lower = lower; 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperProfile = upperProfile; 236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerProfile = lowerProfile; 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_allocatedSize = diagSize + upperSize + lowerSize; 238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_upperSize = upperSize; 239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m_lowerSize = lowerSize; 240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic: 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* m_diag; 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* m_upper; 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* m_lower; 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index* m_upperProfile; 247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index* m_lowerProfile; 248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index m_diagSize; 249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index m_upperSize; 250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index m_lowerSize; 251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index m_upperProfileSize; 252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index m_lowerProfileSize; 253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index m_allocatedSize; 254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen 258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_COMPRESSED_STORAGE_H 260