4#ifndef _Stroika_Foundation_DataExchange_Atom_h_
5#define _Stroika_Foundation_DataExchange_Atom_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
13#include "Stroika/Foundation/Common/Concepts.h"
32 using Characters::String;
46 using AtomInternalType = ptrdiff_t;
47 static constexpr AtomInternalType kEmpty = -1;
49 static AtomInternalType Intern (
const String& s);
51 static String Extract (AtomInternalType atomI);
58 struct AtomManager_CaseInsensitive {
59 using AtomInternalType = ptrdiff_t;
60 static constexpr AtomInternalType kEmpty = -1;
61 static AtomInternalType Intern (
const String& s);
62 static String Extract (AtomInternalType atomI);
132 template <
typename ATOM_MANAGER = AtomManager_Default>
135 using AtomInternalType =
typename ATOM_MANAGER::AtomInternalType;
141 constexpr Atom ()
noexcept;
142 template <Characters::IConvertibleToString STRING_LIKE>
143 Atom (STRING_LIKE&& src);
144 constexpr Atom (
const Atom& src)
noexcept =
default;
145 constexpr Atom (AtomInternalType src)
noexcept;
150 nonvirtual
Atom& operator= (
Atom&& rhs) =
default;
151 nonvirtual
Atom& operator= (
const Atom& rhs) =
default;
156 nonvirtual
String GetPrintName ()
const;
161 nonvirtual strong_ordering operator<=> (
const Atom& rhs)
const;
166 nonvirtual
bool operator== (
const Atom& rhs)
const;
176 nonvirtual
constexpr bool empty ()
const;
182 nonvirtual
void clear ();
191 template <Common::IAnyOf<String, w
string,
typename ATOM_MANAGER::AtomInternalType> T>
192 nonvirtual T
As ()
const;
201 template <
typename T>
204 template <
typename T>
205 nonvirtual T As_ (type_<T>)
const;
206 nonvirtual
String As_ (type_<String>)
const;
207 nonvirtual wstring As_ (type_<wstring>)
const;
208 nonvirtual AtomInternalType As_ (type_<AtomInternalType>)
const;
213 nonvirtual AtomInternalType _GetInternalRep ()
const;
216 AtomInternalType fValue_;
String is like std::u32string, except it is much easier to use, often much more space efficient,...
An Atom is like a String, except that its much cheaper to copy/store/compare, and the semantics of co...
nonvirtual String ToString() const
nonvirtual constexpr bool empty() const
constexpr Atom() noexcept