Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
StringView.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/* StringView.h (C) 2000-2023 */
9/* */
10/* Vue sur une chaîne de caractères UTF-8. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_BASE_STRINGVIEW_H
13#define ARCCORE_BASE_STRINGVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arccore/base/Span.h"
19
20#include <string_view>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arccore
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33/*!
34 * \brief Vue sur une chaîne de caractères UTF-8.
35 *
36 * Cette classe est similaire à std::string_view du C++17 dans le sens où elle ne
37 * conserve qu'un pointeur sur une donnée mémoire gérée par une autre classe.
38 * Les instances de cette classe ne doivent donc pas être conservées. La
39 * différence principale se situe au niveau de l'encodage qui est obligatoirement
40 * UTF-8 avec cette classe.
41 *
42 * \note Comme la classe std::string_view, le tableau \a bytes() ne contient
43 * pas nécessairement de zéro terminal. Cela signifie entre autre qu'il ne faut
44 * donc pas utiliser cette classe pour passer des paramètres à des fonctions C.
45 */
46class ARCCORE_BASE_EXPORT StringView
47{
48 public:
49
50 //! Crée une vue sur une chaîne vide
51 StringView() = default;
52 //! Créé une vue à partir de \a str codé en UTF-8. \a str peut être nul.
53 StringView(const char* str) ARCCORE_NOEXCEPT
54 : StringView(str ? std::string_view(str) : std::string_view()){}
55 //! Créé une chaîne à partir de \a str dans l'encodage UTF-8
56 StringView(std::string_view str) ARCCORE_NOEXCEPT
57 : m_v(reinterpret_cast<const Byte*>(str.data()),str.size()){}
58 //! Créé une chaîne à partir de \a str dans l'encodage UTF-8
59 constexpr StringView(Span<const Byte> str) ARCCORE_NOEXCEPT
60 : m_v(str){}
61 //! Opérateur de recopie
62 constexpr StringView(const StringView& str) = default;
63 //! Copie la vue \a str dans cette instance.
64 constexpr StringView& operator=(const StringView& str) = default;
65 //! Créé une vue à partir de \a str codé en UTF-8
66 StringView& operator=(const char* str) ARCCORE_NOEXCEPT
67 {
68 operator=(str ? std::string_view(str) : std::string_view());
69 return (*this);
70 }
71 //! Créé une vue à partir de \a str codé en UTF-8
72 StringView& operator=(std::string_view str) ARCCORE_NOEXCEPT
73 {
74 m_v = Span<const Byte>(reinterpret_cast<const Byte*>(str.data()),str.size());
75 return (*this);
76 }
77 //! Créé une vue à partir de \a str codé en UTF-8
78 constexpr StringView& operator=(Span<const Byte> str) ARCCORE_NOEXCEPT
79 {
80 m_v = str;
81 return (*this);
82 }
83
84 ~StringView() = default; //!< Libère les ressources.
85
86 public:
87
88 /*!
89 * \brief Retourne la conversion de l'instance dans l'encodage UTF-8.
90 *
91 * \warning L'instance retournée ne contient pas de zéro terminal.
92 *
93 * \warning L'instance reste propriétaire de la valeur retournée et cette valeur
94 * est invalidée par toute modification de cette instance.
95 */
96 constexpr Span<const Byte> bytes() const ARCCORE_NOEXCEPT { return m_v; }
97
98 //! Longueur en octet de la chaîne de caractères.
99 constexpr Int64 length() const ARCCORE_NOEXCEPT { return m_v.size(); }
100
101 //! Longueur en octet de la chaîne de caractères.
102 constexpr Int64 size() const ARCCORE_NOEXCEPT { return m_v.size(); }
103
104 //! Vrai si la chaîne est nulle ou vide.
105 constexpr bool empty() const ARCCORE_NOEXCEPT { return size()==0; }
106
107 public:
108
109 /*!
110 * \brief Retourne une vue de la STL de la vue actuelle.
111 */
112 std::string_view toStdStringView() const ARCCORE_NOEXCEPT
113 {
114 return std::string_view(reinterpret_cast<const char*>(m_v.data()),m_v.size());
115 }
116
117 //! Opérateur d'écriture d'une StringView
118 friend ARCCORE_BASE_EXPORT std::ostream& operator<<(std::ostream& o,const StringView&);
119
120 /*!
121 * \brief Compare deux vues.
122 * \retval true si elles sont égales,
123 * \retval false sinon.
124 */
125 friend ARCCORE_BASE_EXPORT bool operator==(const StringView& a,const StringView& b);
126
127 /*!
128 * \brief Compare deux chaînes unicode.
129 * \retval true si elles sont différentes,
130 * \retval false si elles sont égales.
131 * \relate String
132 */
133 friend inline bool operator!=(const StringView& a,const StringView& b)
134 {
135 return !operator==(a,b);
136 }
137
138 /*!
139 * \brief Compare deux chaînes unicode.
140 * \retval true si elles sont égales,
141 * \retval false sinon.
142 * \relate String
143 */
144 friend ARCCORE_BASE_EXPORT bool operator==(const char* a,const StringView& b);
145
146 /*!
147 * \brief Compare deux chaînes unicode.
148 * \retval true si elles sont différentes,
149 * \retval false si elles sont égales.
150 * \relate String
151 */
152 friend bool operator!=(const char* a,const StringView& b){ return !operator==(a,b); }
153
154 /*!
155 * \brief Compare deux chaînes unicode.
156 * \retval true si elles sont égales,
157 * \retval false sinon.
158 * \relate String
159 */
160 friend ARCCORE_BASE_EXPORT bool operator==(const StringView& a,const char* b);
161
162 /*!
163 * \brief Compare deux chaînes unicode.
164 * \retval true si elles sont différentes,
165 * \retval false si elles sont égales.
166 * \relate String
167 */
168 friend inline bool operator!=(const StringView& a,const char* b)
169 {
170 return !operator==(a,b);
171 }
172
173 /*!
174 * \brief Compare deux chaînes unicode.
175 * \retval true si a<b
176 * \retval false sinon.
177 * \relate String
178 */
179 friend ARCCORE_BASE_EXPORT bool operator<(const StringView& a,const StringView& b);
180
181 public:
182
183 //! Écrit la chaîne au format UTF-8 sur le flot \a o
184 void writeBytes(std::ostream& o) const;
185
186 private:
187
189};
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
194} // End namespace Arccore
195
196/*---------------------------------------------------------------------------*/
197/*---------------------------------------------------------------------------*/
198
199#endif
Déclarations des types de la composante 'base' de Arccore.
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
Vue sur une chaîne de caractères UTF-8.
Definition StringView.h:47
constexpr Int64 length() const ARCCORE_NOEXCEPT
Longueur en octet de la chaîne de caractères.
Definition StringView.h:99
constexpr StringView(const StringView &str)=default
Opérateur de recopie.
constexpr bool empty() const ARCCORE_NOEXCEPT
Vrai si la chaîne est nulle ou vide.
Definition StringView.h:105
constexpr StringView & operator=(Span< const Byte > str) ARCCORE_NOEXCEPT
Créé une vue à partir de str codé en UTF-8.
Definition StringView.h:78
friend bool operator!=(const char *a, const StringView &b)
Compare deux chaînes unicode.
Definition StringView.h:152
StringView(const char *str) ARCCORE_NOEXCEPT
Créé une vue à partir de str codé en UTF-8. str peut être nul.
Definition StringView.h:53
StringView & operator=(const char *str) ARCCORE_NOEXCEPT
Créé une vue à partir de str codé en UTF-8.
Definition StringView.h:66
StringView()=default
Crée une vue sur une chaîne vide.
friend bool operator!=(const StringView &a, const StringView &b)
Compare deux chaînes unicode.
Definition StringView.h:133
constexpr Span< const Byte > bytes() const ARCCORE_NOEXCEPT
Retourne la conversion de l'instance dans l'encodage UTF-8.
Definition StringView.h:96
~StringView()=default
Libère les ressources.
std::string_view toStdStringView() const ARCCORE_NOEXCEPT
Retourne une vue de la STL de la vue actuelle.
Definition StringView.h:112
constexpr StringView & operator=(const StringView &str)=default
Copie la vue str dans cette instance.
friend bool operator!=(const StringView &a, const char *b)
Compare deux chaînes unicode.
Definition StringView.h:168
StringView & operator=(std::string_view str) ARCCORE_NOEXCEPT
Créé une vue à partir de str codé en UTF-8.
Definition StringView.h:72
constexpr StringView(Span< const Byte > str) ARCCORE_NOEXCEPT
Créé une chaîne à partir de str dans l'encodage UTF-8.
Definition StringView.h:59
constexpr Int64 size() const ARCCORE_NOEXCEPT
Longueur en octet de la chaîne de caractères.
Definition StringView.h:102
StringView(std::string_view str) ARCCORE_NOEXCEPT
Créé une chaîne à partir de str dans l'encodage UTF-8.
Definition StringView.h:56
Espace de nom de Arccore.
Definition ArcaneTypes.h:24
std::int64_t Int64
Type entier signé sur 64 bits.
unsigned char Byte
Type d'un octet.
Definition BaseTypes.h:43