Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
LinearOffsetMap.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* LinearOffsetMap.h (C) 2000-2024 */
9/* */
10/* Liste d'offset linéaires. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_LINEAROFFSETMAP_H
13#define ARCANE_UTILS_LINEAROFFSETMAP_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include <map>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29/*!
30 * \internal
31 * \brief Liste d'offset linéaires.
32 *
33 * `DataType` doit être `Int32` ou `Int64`.
34 *
35 * \warning Classe expérimentale. A ne pas utiliser en dehors de Arcane.
36 */
37template <typename DataType>
39{
40 public:
41
42 static_assert(std::is_same_v<DataType, Int32> || std::is_same_v<DataType, Int64>);
43
44 public:
45
46 //! Ajoute un offset \a offset de taille \a size
47 ARCANE_UTILS_EXPORT void add(DataType size, DataType offset);
48
49 /*!
50 * \brief Récupère un offset suffisant pour un élément de taille \a size.
51 *
52 * Retourne une valeur négative si aucun offset n'est disponible. Si un offset
53 * est disponible retourne sa valeur. L'offset trouvé est supprimé de la liste
54 * et on ajoute un offset pour la taille restante si elle n'est pas nulle:
55 * si l'offset trouvé est `offset` et que la taille associée est `offset_size`,
56 * apelle `add(offset_size - size, offset + size)`.
57 */
58 ARCANE_UTILS_EXPORT DataType getAndRemoveOffset(DataType size);
59
60 //! Nombre d'éléments dans la table.
61 ARCANE_UTILS_EXPORT Int32 size() const;
62
63 private:
64
65 std::multimap<DataType, DataType> m_offset_map;
66};
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
70
71} // namespace Arcane
72
73/*---------------------------------------------------------------------------*/
74/*---------------------------------------------------------------------------*/
75
76#endif
Fichier de configuration d'Arcane.
void add(DataType size, DataType offset)
Ajoute un offset offset de taille size.
Int32 size() const
Nombre d'éléments dans la table.
DataType getAndRemoveOffset(DataType size)
Récupère un offset suffisant pour un élément de taille size.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-