4#include "Stroika/Foundation/StroikaPreComp.h"
8#include "Stroika/Foundation/Containers/Mapping.h"
9#include "Stroika/Foundation/Containers/Sequence.h"
10#include "Stroika/Foundation/Execution/Common.h"
22 struct AtomManager_Default_Rep_ {
31 inline AtomManager_Default_Rep_& GetAtomManager_Default_Rep_ ()
33 static AtomManager_Default_Rep_ sRep_{};
38 struct AtomManager_CaseInsensitive_Rep_ {
48 inline AtomManager_CaseInsensitive_Rep_& GetAtomManager_CaseInsensitive_Rep_ ()
50 static AtomManager_CaseInsensitive_Rep_ sRep_{};
60auto AtomManager_Default::Intern (
const String& s) -> AtomInternalType
67 auto& mgr = GetAtomManager_Default_Rep_ ();
68 [[maybe_unused]] lock_guard critSec{mgr.fCritSec};
69 auto i = mgr.fMap.Lookup (s);
77 Ensure (Extract (v) == s);
81String AtomManager_Default::Extract (AtomInternalType atomI)
83 if (atomI == kEmpty) {
86 auto& mgr = GetAtomManager_Default_Rep_ ();
87 [[maybe_unused]] lock_guard critSec{mgr.fCritSec};
88 return (mgr.fSeq)[atomI];
96auto AtomManager_CaseInsensitive::Intern (
const String& s) -> AtomInternalType
103 auto& mgr = GetAtomManager_CaseInsensitive_Rep_ ();
104 [[maybe_unused]] lock_guard critSec{mgr.fCritSec};
105 auto i = mgr.fMap.Lookup (s);
106 if (i.has_value ()) {
109 v = mgr.fSeq.size ();
113 Ensure (Extract (v) == s);
117String AtomManager_CaseInsensitive::Extract (AtomInternalType atomI)
119 if (atomI == kEmpty) {
122 auto& mgr = GetAtomManager_CaseInsensitive_Rep_ ();
123 [[maybe_unused]] lock_guard critSec{mgr.fCritSec};
124 return (mgr.fSeq)[atomI];
String is like std::u32string, except it is much easier to use, often much more space efficient,...
SortedMapping_stdmap<KEY_TYPE,MAPPED_VALUE_TYPE> is an std::map-based concrete implementation of the ...
A generalization of a vector: a container whose elements are keyed by the natural numbers.
very similar to ThreeWayComparer but returns true if less