Attention une mise à jour du service Gitlab va être effectuée le mardi 30 novembre entre 17h30 et 18h00. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes. Cette mise à jour intermédiaire en version 14.0.12 nous permettra de rapidement pouvoir mettre à votre disposition une version plus récente.

GlobalMatrix.cpp 2.59 KB
Newer Older
1 2 3 4 5 6 7 8
//
//  GlobalMatrix.cpp
//  HappyHeart
//
//  Created by Sebastien Gilles on 27/04/15.
//  Copyright (c) 2015 Inria. All rights reserved.
//

9

10
#include "Core/LinearAlgebra/GlobalMatrix.hpp"
11
#include "Core/NumberingSubset.hpp"
12 13 14 15 16 17


namespace HappyHeart
{
    
    
18 19 20 21 22 23 24
    GlobalMatrix::GlobalMatrix(const NumberingSubset& row_numbering_subset,
                               const NumberingSubset& col_numbering_subset)
    : row_numbering_subset_(row_numbering_subset),
    col_numbering_subset_(col_numbering_subset)
    { }
    
    
25
    GlobalMatrix::GlobalMatrix(const GlobalMatrix& rhs)
26 27 28
    : Parent(rhs),
    row_numbering_subset_(rhs.row_numbering_subset_),
    col_numbering_subset_(rhs.col_numbering_subset_)
29 30 31 32 33 34
    { }
    
    
    
    void Swap(GlobalMatrix& A, GlobalMatrix& B)
    {
35 36
        assert(A.GetColNumberingSubset() == B.GetColNumberingSubset());
        assert(A.GetRowNumberingSubset() == B.GetRowNumberingSubset());
37 38 39 40 41 42
        
        using Parent = GlobalMatrix::Parent;
        
        Swap(static_cast<Parent&>(A), static_cast<Parent&>(B));
        
    }
43 44
    
    
45
    namespace GlobalMatrixNS
46 47 48
    {
        
        
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
        bool EqualByNumberingSubset::operator()(const GlobalMatrix& lhs, const GlobalMatrix& rhs) const noexcept
        {
            return lhs.GetRowNumberingSubset() == rhs.GetRowNumberingSubset()
            && lhs.GetColNumberingSubset() == rhs.GetColNumberingSubset();
        }
        
        
        bool LessByNumberingSubset::operator()(const GlobalMatrix& lhs, const GlobalMatrix& rhs) const noexcept
        {
            const auto& lhs_row_subset = lhs.GetRowNumberingSubset();
            const auto& rhs_row_subset = rhs.GetRowNumberingSubset();
            
            if (lhs_row_subset == rhs_row_subset)
            {
                return lhs.GetColNumberingSubset() < rhs.GetColNumberingSubset();
            }
            
            
            return lhs_row_subset < rhs_row_subset;
        }
            
            
        FindIfCondition::FindIfCondition(const NumberingSubset& row_numbering_subset,
                                         const NumberingSubset& col_numbering_subset)
        : row_numbering_subset_(row_numbering_subset),
        col_numbering_subset_(col_numbering_subset)
        { }

    
        bool FindIfCondition::operator()(const GlobalMatrix::unique_ptr& rhs) const noexcept
        {
            assert(!(!rhs));
            return rhs->GetRowNumberingSubset() == row_numbering_subset_
            && rhs->GetColNumberingSubset() == col_numbering_subset_;
        }
        
            
    } // namespace GlobalMatrixNS

88 89

} // namespace HappyHeart