Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Atom.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include <type_traits>
5
7
9
10 /*
11 ********************************************************************************
12 ****************************** Atom<ATOM_MANAGER> ******************************
13 ********************************************************************************
14 */
15 template <typename ATOM_MANAGER>
16 inline constexpr Atom<ATOM_MANAGER>::Atom () noexcept
17 : fValue_{ATOM_MANAGER::kEmpty}
18 {
19 }
20 template <typename ATOM_MANAGER>
21 template <Characters::IConvertibleToString STRING_LIKE>
22 inline Atom<ATOM_MANAGER>::Atom (STRING_LIKE&& src)
23 : fValue_{ATOM_MANAGER::Intern (forward<STRING_LIKE> (src))}
24 {
25 }
26 template <typename ATOM_MANAGER>
27 inline constexpr Atom<ATOM_MANAGER>::Atom (AtomInternalType src) noexcept
28 : fValue_{src}
29 {
30 // IF NOT CONSTEXPR validate src is already in ATOM_MANAGER
31#if qStroika_Foundation_Debug_AssertionsChecked
32 if (not is_constant_evaluated ()) {
33 (void)ATOM_MANAGER::Extract (src); // for side-effect - assertion valid index
34 }
35#endif
36 }
37 template <typename ATOM_MANAGER>
38 inline String Atom<ATOM_MANAGER>::GetPrintName () const
39 {
40 return fValue_ == ATOM_MANAGER::kEmpty ? String{} : ATOM_MANAGER::Extract (fValue_);
41 }
42 template <typename ATOM_MANAGER>
43 inline constexpr bool Atom<ATOM_MANAGER>::empty () const
44 {
45 return fValue_ == ATOM_MANAGER::kEmpty;
46 }
47 template <typename ATOM_MANAGER>
49 {
50 fValue_ = ATOM_MANAGER::kEmpty;
51 }
52 template <typename ATOM_MANAGER>
53 template <Common::IAnyOf<String, wstring, typename ATOM_MANAGER::AtomInternalType> T>
54 inline T Atom<ATOM_MANAGER>::As () const
55 {
56 return As_ (type_<T> ());
57 }
58 template <typename ATOM_MANAGER>
59 inline String Atom<ATOM_MANAGER>::As_ (type_<String>) const
60 {
61 return GetPrintName ();
62 }
63 template <typename ATOM_MANAGER>
64 inline wstring Atom<ATOM_MANAGER>::As_ (type_<wstring>) const
65 {
66 return GetPrintName ().template As<wstring> ();
67 }
68 template <typename ATOM_MANAGER>
69 inline auto Atom<ATOM_MANAGER>::As_ (type_<AtomInternalType>) const -> AtomInternalType
70 {
71 return fValue_;
72 }
73 template <typename ATOM_MANAGER>
74 inline typename Atom<ATOM_MANAGER>::AtomInternalType Atom<ATOM_MANAGER>::_GetInternalRep () const
75 {
76 return fValue_;
77 }
78 template <typename ATOM_MANAGER>
80 {
81 return GetPrintName ();
82 }
83 template <typename ATOM_MANAGER>
84 inline strong_ordering Atom<ATOM_MANAGER>::operator<=> (const Atom& rhs) const
85 {
86 return fValue_ <=> rhs.fValue_;
87 }
88 template <typename ATOM_MANAGER>
89 inline bool Atom<ATOM_MANAGER>::operator== (const Atom& rhs) const
90 {
91 return fValue_ == rhs.fValue_;
92 }
93
94}
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Definition String.h:201
An Atom is like a String, except that its much cheaper to copy/store/compare, and the semantics of co...
Definition Atom.h:133
nonvirtual String ToString() const
Definition Atom.inl:79
nonvirtual constexpr bool empty() const
Definition Atom.inl:43