14#include "arcane/std/SimpleTableInternalMng.h"
30 m_simple_table_internal->clear();
39 if(row_name.
empty())
return -1;
41 Integer position = m_simple_table_internal->m_values.dim1Size();
42 m_simple_table_internal->m_values.resize(position + 1);
44 m_simple_table_internal->m_row_names.add(row_name);
45 m_simple_table_internal->m_row_sizes.add(0);
47 m_simple_table_internal->m_last_row = position;
55 if(row_name.
empty())
return -1;
57 Integer position = m_simple_table_internal->m_values.dim1Size();
58 m_simple_table_internal->m_values.resize(position + 1);
60 m_simple_table_internal->m_row_names.add(row_name);
61 m_simple_table_internal->m_row_sizes.add(0);
71 if(rows_names.
contains(
""))
return false;
77 Integer position = m_simple_table_internal->m_values.dim1Size();
78 m_simple_table_internal->m_values.resize(position + size);
80 m_simple_table_internal->m_row_names.addRange(rows_names);
83 m_simple_table_internal->m_last_row = position;
94 if(column_name.
empty())
return -1;
96 Integer position = m_simple_table_internal->m_values.dim2Size();
97 m_simple_table_internal->m_values.resize(m_simple_table_internal->m_values.dim1Size(), position + 1);
99 m_simple_table_internal->m_column_names.add(column_name);
100 m_simple_table_internal->m_column_sizes.add(0);
102 m_simple_table_internal->m_last_column = position;
110 if(column_name.
empty())
return -1;
112 Integer position = m_simple_table_internal->m_values.dim2Size();
113 m_simple_table_internal->m_values.resize(m_simple_table_internal->m_values.dim1Size(), position + 1);
115 m_simple_table_internal->m_column_names.add(column_name);
116 m_simple_table_internal->m_column_sizes.add(0);
126 if(columns_names.
contains(
""))
return false;
132 Integer position = m_simple_table_internal->m_values.dim2Size();
133 m_simple_table_internal->m_values.resize(m_simple_table_internal->m_values.dim1Size(), position + size);
135 m_simple_table_internal->m_column_names.addRange(columns_names);
138 m_simple_table_internal->m_last_column = position;
149 if (position < 0 || position >= m_simple_table_internal->m_values.dim1Size())
153 Integer size_row = m_simple_table_internal->m_row_sizes[position];
155 if (m_simple_table_internal->m_values.dim2Size() < size_row + 1)
160 m_simple_table_internal->m_last_row = position;
161 m_simple_table_internal->m_last_column = size_row;
163 m_simple_table_internal->m_row_sizes[position]++;
171 m_simple_table_internal->m_column_sizes[size_row] = std::max(position + 1, m_simple_table_internal->m_column_sizes[size_row]);
179 std::optional<Integer> position = m_simple_table_internal->m_row_names.span().findFirst(row_name);
183 else if (create_if_not_exist)
192 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1)
203 if (position < 0 || position >= m_simple_table_internal->m_values.dim1Size())
207 Integer size_row = m_simple_table_internal->m_row_sizes[position];
208 Integer min_size = (elements.
size() <= m_simple_table_internal->m_values.dim2Size() - size_row
210 : m_simple_table_internal->m_values.dim2Size() - size_row);
212 for (
Integer i = 0; i < min_size; i++) {
213 view[i + size_row] = elements[i];
214 m_simple_table_internal->m_column_sizes[i + size_row] = std::max(position + 1, m_simple_table_internal->m_column_sizes[i + size_row]);
216 m_simple_table_internal->m_row_sizes[position] += min_size;
218 m_simple_table_internal->m_last_row = position;
219 m_simple_table_internal->m_last_column = m_simple_table_internal->m_row_sizes[position] - 1;
221 return elements.
size() <= m_simple_table_internal->m_values.dim2Size() - size_row;
227 std::optional<Integer> position = m_simple_table_internal->m_row_names.span().findFirst(row_name);
232 else if (create_if_not_exist)
241 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1)
252 if (position < 0 || position >= m_simple_table_internal->m_values.dim2Size())
255 Integer size_column = m_simple_table_internal->m_column_sizes[position];
257 if (m_simple_table_internal->m_values.dim1Size() < size_column + 1)
260 m_simple_table_internal->m_values[size_column][position] =
element;
262 m_simple_table_internal->m_last_column = position;
263 m_simple_table_internal->m_last_row = size_column;
265 m_simple_table_internal->m_column_sizes[position]++;
266 m_simple_table_internal->m_row_sizes[size_column] = std::max(position + 1, m_simple_table_internal->m_row_sizes[size_column]);
274 std::optional<Integer> position = m_simple_table_internal->m_column_names.span().findFirst(column_name);
278 else if (create_if_not_exist)
287 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1)
298 if (position < 0 || position >= m_simple_table_internal->m_values.dim2Size())
301 Integer size_column = m_simple_table_internal->m_column_sizes[position];
302 Integer min_size = (elements.
size() <= m_simple_table_internal->m_values.dim1Size() - size_column
304 : m_simple_table_internal->m_values.dim1Size() - size_column);
306 for (
Integer i = 0; i < min_size; i++) {
307 m_simple_table_internal->m_values[i + size_column][position] = elements[i];
308 m_simple_table_internal->m_row_sizes[i + size_column] = std::max(position + 1, m_simple_table_internal->m_row_sizes[i + size_column]);
310 m_simple_table_internal->m_column_sizes[position] += min_size;
312 m_simple_table_internal->m_last_column = position;
313 m_simple_table_internal->m_last_row = m_simple_table_internal->m_column_sizes[position] - 1;
315 return elements.
size() <= m_simple_table_internal->m_values.dim1Size() - size_column;
321 std::optional<Integer> position = m_simple_table_internal->m_column_names.span().findFirst(column_name);
326 else if (create_if_not_exist)
335 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1)
346 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_row - 1 < 0)
348 m_simple_table_internal->m_last_row--;
351 if (m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] <= m_simple_table_internal->m_last_column)
352 m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] = m_simple_table_internal->m_last_column + 1;
354 m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column] =
element;
355 if (!update_last_position)
356 m_simple_table_internal->m_last_row++;
363 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_row + 1 >= m_simple_table_internal->m_values.dim1Size())
365 m_simple_table_internal->m_last_row++;
367 if (m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] <= m_simple_table_internal->m_last_column)
368 m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] = m_simple_table_internal->m_last_column + 1;
369 if (m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] <= m_simple_table_internal->m_last_row)
370 m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] = m_simple_table_internal->m_last_row + 1;
372 m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column] =
element;
373 if (!update_last_position)
374 m_simple_table_internal->m_last_row--;
381 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_column - 1 < 0)
383 m_simple_table_internal->m_last_column--;
386 if (m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] <= m_simple_table_internal->m_last_row)
387 m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] = m_simple_table_internal->m_last_row + 1;
389 m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column] =
element;
390 if (!update_last_position)
391 m_simple_table_internal->m_last_column++;
398 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_column + 1 >= m_simple_table_internal->m_values.dim2Size())
400 m_simple_table_internal->m_last_column++;
402 if (m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] <= m_simple_table_internal->m_last_column)
403 m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] = m_simple_table_internal->m_last_column + 1;
404 if (m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] <= m_simple_table_internal->m_last_row)
405 m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] = m_simple_table_internal->m_last_row + 1;
407 m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column] =
element;
408 if (!update_last_position)
409 m_simple_table_internal->m_last_column--;
419 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_row - 1 < 0)
424 if (update_last_position) {
425 m_simple_table_internal->m_last_row--;
427 if (m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] <= m_simple_table_internal->m_last_column)
428 m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] = m_simple_table_internal->m_last_column + 1;
429 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column];
432 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row - 1][m_simple_table_internal->m_last_column];
438 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_row + 1 >= m_simple_table_internal->m_values.dim1Size())
443 if (update_last_position) {
444 m_simple_table_internal->m_last_row++;
446 if (m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] <= m_simple_table_internal->m_last_column)
447 m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] = m_simple_table_internal->m_last_column + 1;
448 if (m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] <= m_simple_table_internal->m_last_row)
449 m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] = m_simple_table_internal->m_last_row + 1;
450 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column];
452 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row + 1][m_simple_table_internal->m_last_column];
458 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_column - 1 < 0)
463 if (update_last_position) {
464 m_simple_table_internal->m_last_column--;
467 if (m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] <= m_simple_table_internal->m_last_row)
468 m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] = m_simple_table_internal->m_last_row + 1;
469 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column];
471 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column - 1];
477 if (m_simple_table_internal->m_last_row == -1 || m_simple_table_internal->m_last_column == -1 || m_simple_table_internal->m_last_column + 1 >= m_simple_table_internal->m_values.dim2Size())
482 if (update_last_position) {
483 m_simple_table_internal->m_last_column++;
485 if (m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] <= m_simple_table_internal->m_last_column)
486 m_simple_table_internal->m_row_sizes[m_simple_table_internal->m_last_row] = m_simple_table_internal->m_last_column + 1;
487 if (m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] <= m_simple_table_internal->m_last_row)
488 m_simple_table_internal->m_column_sizes[m_simple_table_internal->m_last_column] = m_simple_table_internal->m_last_row + 1;
489 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column];
491 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column + 1];
500 m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column] =
element;
507 if (position_x < 0 || position_x >= m_simple_table_internal->m_values.dim2Size() || position_y < 0 || position_y >= m_simple_table_internal->m_values.dim1Size())
510 if (m_simple_table_internal->m_column_sizes[position_x] <= position_y)
511 m_simple_table_internal->m_column_sizes[position_x] = position_y + 1;
512 if (m_simple_table_internal->m_row_sizes[position_y] <= position_x)
513 m_simple_table_internal->m_row_sizes[position_y] = position_x + 1;
515 m_simple_table_internal->m_values[position_y][position_x] =
element;
517 m_simple_table_internal->m_last_row = position_y;
518 m_simple_table_internal->m_last_column = position_x;
526 std::optional<Integer> position_x = m_simple_table_internal->m_column_names.span().findFirst(column_name);
527 std::optional<Integer> position_y = m_simple_table_internal->m_row_names.span().findFirst(row_name);
529 if (position_x && position_y)
540 return m_simple_table_internal->m_values[m_simple_table_internal->m_last_row][m_simple_table_internal->m_last_column];
546 if (position_x < 0 || position_x >= m_simple_table_internal->m_values.dim2Size() || position_y < 0 || position_y >= m_simple_table_internal->m_values.dim1Size())
549 if (update_last_position) {
550 m_simple_table_internal->m_last_column = position_x;
551 m_simple_table_internal->m_last_row = position_y;
554 return m_simple_table_internal->m_values[position_y][position_x];
560 std::optional<Integer> position_x = m_simple_table_internal->m_column_names.span().findFirst(column_name);
561 std::optional<Integer> position_y = m_simple_table_internal->m_row_names.span().findFirst(row_name);
563 if (position_x && position_y)
564 return element(position_x.value(), position_y.value(), update_last_position);
576 for (
Integer i = 0; i < size; i++) {
577 copie[i] = m_simple_table_internal->
m_values[position][i];
585 std::optional<Integer> position_y = m_simple_table_internal->m_row_names.
span().findFirst(row_name);
587 return row(position_y.value());
600 for (
Integer i = 0; i < size; i++) {
601 copie[i] = m_simple_table_internal->
m_values[i][position];
609 std::optional<Integer> position_x = m_simple_table_internal->m_column_names.
span().findFirst(column_name);
611 return column(position_x.value());
621 if (position < 0 || position >= m_simple_table_internal->m_values.dim1Size())
623 return m_simple_table_internal->m_row_sizes[position];
629 std::optional<Integer> position_y = m_simple_table_internal->m_row_names.span().findFirst(row_name);
631 return rowSize(position_y.value());
641 if (position < 0 || position >= m_simple_table_internal->m_values.dim2Size())
643 return m_simple_table_internal->m_column_sizes[position];
649 std::optional<Integer> position_x = m_simple_table_internal->m_column_names.span().findFirst(column_name);
661 std::optional<Integer> position_y = m_simple_table_internal->m_row_names.span().findFirst(row_name);
663 return position_y.value();
670 std::optional<Integer> position_x = m_simple_table_internal->m_column_names.span().findFirst(column_name);
672 return position_x.value();
682 return m_simple_table_internal->m_values.dim1Size();
688 return m_simple_table_internal->m_values.dim2Size();
697 if (position < 0 || position >= m_simple_table_internal->m_values.dim1Size())
700 return m_simple_table_internal->m_row_names[position];
706 if (position < 0 || position >= m_simple_table_internal->m_values.dim2Size())
709 return m_simple_table_internal->m_column_names[position];
718 if (new_name.
empty() || position < 0 || position >= m_simple_table_internal->m_values.dim1Size())
720 m_simple_table_internal->m_row_names[position] = new_name;
727 std::optional<Integer> position_y = m_simple_table_internal->m_row_names.span().findFirst(row_name);
736 if (new_name.
empty() || position < 0 || position >= m_simple_table_internal->m_values.dim2Size())
738 m_simple_table_internal->m_column_names[position] = new_name;
745 std::optional<Integer> position_x = m_simple_table_internal->m_column_names.span().findFirst(column_name);
757 if(column_name.
empty())
return -1;
760 for (
Integer i = 0; i < m_simple_table_internal->m_values.dim1Size(); i++) {
766 avg /= view.
size() - 1;
778 return m_simple_table_internal;
784 if (simple_table_internal.
isNull())
785 ARCANE_FATAL(
"La réference passée en paramètre est Null.");
786 m_simple_table_internal = simple_table_internal;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Vue modifiable d'un tableau d'un type T.
Arcane::UniqueArray< Arcane::UniqueArray< DataType > > m_values
Conteneur des variables génériques.
Span< const T > span() const
Vue immutable sur ce tableau.
Vue constante d'un tableau de type T.
bool contains(const_reference v) const
true si le tableau contient l'élément de valeur v
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Référence à une instance.
bool isNull() const
Indique si le compteur référence une instance non nulle.
bool editElementLeft(Real element, bool update_last_position) override
Méthode permettant d'éditer un élément à gauche du dernier élement dernièrement manipulé (même ligne/...
bool addElementInRow(Integer position, Real element) override
Méthode permettant d'ajouter un élément à une ligne.
Ref< SimpleTableInternal > internal() override
Méthode permettant de récupérer une référence vers l'objet SimpleTableInternal utilisé.
Integer rowPosition(const String &row_name) override
Méthode permettant de récupérer la position d'une ligne.
bool addElementInColumn(Integer position, Real element) override
Méthode permettant d'ajouter un élément à une colonne.
String columnName(Integer position) override
Méthode permettant de récupérer le nom d'une colonne à partir de sa position.
bool addElementsInColumn(Integer position, ConstArrayView< Real > elements) override
Méthode permettant d'ajouter plusieurs éléments sur une colonne.
Integer numberOfRows() override
Méthode permettant de récupérer le nombre de lignes dans le tableau. C'est, en quelque sorte,...
RealUniqueArray column(Integer position) override
Méthode permettant d'obtenir une copie d'une colonne.
bool addElementsInSameColumn(ConstArrayView< Real > elements) override
Méthode permettant d'ajouter plusieurs éléments sur la colonne dernièrement manipulée.
bool addRows(StringConstArrayView rows_names) override
Méthode permettant d'ajouter plusieurs lignes.
bool addElementsInSameRow(ConstArrayView< Real > elements) override
Méthode permettant d'ajouter plusieurs éléments sur la ligne dernièrement manipulée.
Real elementDown(bool update_last_position) override
Méthode permettant de récupérer un élément en-dessous du dernier élement dernièrement manipulé (ligne...
void clearInternal() override
Méthode permettant d'effacer le contenu du SimpleTableInternal.
void setInternal(const Ref< SimpleTableInternal > &simple_table_internal) override
Méthode permettant de définir une référence vers un SimpleTableInternal.
Real element() override
Méthode permettant d'obtenir une copie d'un élement.
bool editElementDown(Real element, bool update_last_position) override
Méthode permettant d'éditer un élément en-dessous du dernier élement dernièrement manipulé (ligne du ...
Integer addAverageColumn(const String &column_name) override
Méthode permettant de créer une colonne contenant la moyenne des éléments de chaque ligne.
bool editColumnName(Integer position, const String &new_name) override
Méthode permettant de changer le nom d'une colonne.
bool editRowName(Integer position, const String &new_name) override
Méthode permettant de changer le nom d'une ligne.
bool addElementInSameColumn(Real element) override
Méthode permettant d'ajouter un élément sur la colonne dernièrement manipulée.
String rowName(Integer position) override
Méthode permettant de récupérer le nom d'une ligne à partir de sa position.
Integer addColumn(const String &column_name) override
Méthode permettant d'ajouter une colonne.
RealUniqueArray row(Integer position) override
Méthode permettant d'obtenir une copie d'une ligne.
Real elementUp(bool update_last_position) override
Méthode permettant de récupérer un élément au-dessus du dernier élement dernièrement manipulé (ligne ...
bool editElementRight(Real element, bool update_last_position) override
Méthode permettant d'éditer un élément à droite du dernier élement dernièrement manipulé (même ligne/...
bool addElementInSameRow(Real element) override
Méthode permettant d'ajouter un élément sur la ligne dernièrement manipulée.
bool addElementsInRow(Integer position, ConstArrayView< Real > elements) override
Méthode permettant d'ajouter plusieurs éléments sur une ligne.
Integer rowSize(Integer position) override
Méthode permettant d'obtenir la taille d'une ligne. Incluant les hypothétiques 'trous' dans la ligne.
Integer columnSize(Integer position) override
Méthode permettant d'obtenir la taille d'une colonne. Incluant les hypotétiques 'trous' dans la colon...
bool editElement(Real element) override
Méthode permettant de modifier un élement dans le tableau.
bool editElementUp(Real element, bool update_last_position) override
Méthode permettant d'éditer un élément au-dessus du dernier élement dernièrement manipulé (ligne du d...
Integer numberOfColumns() override
Méthode permettant de récupérer le nombre de colonnes dans le tableau. C'est, en quelque sorte,...
Integer columnPosition(const String &column_name) override
Méthode permettant de récupérer la position d'une colonne.
Real elementRight(bool update_last_position) override
Méthode permettant de récupérer un élément à droite du dernier élement dernièrement manipulé (même li...
Integer addRow(const String &row_name) override
Méthode permettant d'ajouter une ligne.
Real elementLeft(bool update_last_position) override
Méthode permettant de récupérer un élément à gauche du dernier élement dernièrement manipulé (même li...
bool addColumns(StringConstArrayView columns_names) override
Méthode permettant d'ajouter plusieurs colonnes.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< String > StringConstArrayView
Equivalent C d'un tableau à une dimension de chaînes de caractères.
Int32 Integer
Type représentant un entier.
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
double Real
Type représentant un réel.
UniqueArray< Integer > IntegerUniqueArray
Tableau dynamique à une dimension d'entiers.