15 template <
typename ATOM_MANAGER>
17 : fValue_{ATOM_MANAGER::kEmpty}
20 template <
typename ATOM_MANAGER>
21 template <Characters::IConvertibleToString STRING_LIKE>
23 : fValue_{ATOM_MANAGER::Intern (forward<STRING_LIKE> (src))}
26 template <
typename ATOM_MANAGER>
31#if qStroika_Foundation_Debug_AssertionsChecked
32 if (not is_constant_evaluated ()) {
33 (void)ATOM_MANAGER::Extract (src);
37 template <
typename ATOM_MANAGER>
38 inline String Atom<ATOM_MANAGER>::GetPrintName ()
const
40 return fValue_ == ATOM_MANAGER::kEmpty ? String{} : ATOM_MANAGER::Extract (fValue_);
42 template <
typename ATOM_MANAGER>
45 return fValue_ == ATOM_MANAGER::kEmpty;
47 template <
typename ATOM_MANAGER>
50 fValue_ = ATOM_MANAGER::kEmpty;
52 template <
typename ATOM_MANAGER>
53 template <Common::IAnyOf<String, w
string,
typename ATOM_MANAGER::AtomInternalType> T>
56 return As_ (type_<T> ());
58 template <
typename ATOM_MANAGER>
59 inline String Atom<ATOM_MANAGER>::As_ (type_<String>)
const
61 return GetPrintName ();
63 template <
typename ATOM_MANAGER>
64 inline wstring Atom<ATOM_MANAGER>::As_ (type_<wstring>)
const
66 return GetPrintName ().template As<wstring> ();
68 template <
typename ATOM_MANAGER>
69 inline auto Atom<ATOM_MANAGER>::As_ (type_<AtomInternalType>)
const -> AtomInternalType
73 template <
typename ATOM_MANAGER>
74 inline typename Atom<ATOM_MANAGER>::AtomInternalType Atom<ATOM_MANAGER>::_GetInternalRep ()
const
78 template <
typename ATOM_MANAGER>
81 return GetPrintName ();
83 template <
typename ATOM_MANAGER>
86 return fValue_ <=> rhs.fValue_;
88 template <
typename ATOM_MANAGER>
89 inline bool Atom<ATOM_MANAGER>::operator== (
const Atom& rhs)
const
91 return fValue_ == rhs.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