26#include "DoKLocalMatrixIndexer.h"
32#include "DoKReverseIndexer.h"
36using namespace Arccore;
40 m_data[Key(i, j)] = offset;
43std::optional<ILocalMatrixIndexer::Offset>
47 return m_data.at(DoKLocalMatrixIndexer::Key(i, j));
49 catch (std::out_of_range&) {
54DoKLocalMatrixIndexer::Offset
56Integer i, Integer j, DoKLocalMatrixIndexer::Offset& tentative_offset)
58 auto to_insert = std::make_pair<Key, Offset>(Key(i, j), tentative_offset++);
59 auto [index, is_inserted] = m_data.insert(to_insert);
67DoKLocalMatrixIndexer::clone()
const
78 typedef typename Map::iterator Iterator;
79 typedef typename Map::key_type Key;
82 bool operator()(
const Iterator& a,
const Iterator& b)
86 return ((vala.first < valb.first) || ((vala.first == valb.first) && (vala.second < valb.second)));
94 std::vector<HashTable::iterator> src(m_data.size());
96 auto curr = src.begin();
97 for (
auto iter = m_data.begin(); iter != m_data.end(); ++iter, ++curr) {
101 KeyCompare<HashTable> compare;
102 std::sort(src.begin(), src.end(), compare);
105 auto size =
static_cast<Arccore::Integer
>(m_data.size());
107 for (
auto curs = 0; curs < size; ++curs) {
108 perm[curs] = Renumbering(src[curs]->second, curs);
109 indexer->record(curs, src[curs]->first);
110 m_data[Key(src[curs]->first.first, src[curs]->first.second)] = curs;
Local matrix indexer using HashMap.
void associate(Integer i, Integer j, Offset offset) override
IReverseIndexer * sort(Arccore::Array< Renumbering > &perm) override
std::optional< Offset > find(Integer i, Integer j) override
Offset create(Integer i, Integer j, Offset &tentative_offset) override
ReverseIndexer based on a HashTable.
Reverse indexer: associates an Index (i,j) to an offset.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --