mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Replace the llvm::map_range based anonymous ranges returned by values() and enumerate() with custom range and iterator types. This avoids exposing complex template return types and improves encapsulation. But most importantly, it is *much* cheaper to compile. This change: - Defines ValueStoreIterator, ValueStoreEnumerateIterator, and ValueStoreRange templates in the Internal namespace. - Exposes them via aliases in ValueStore: Iterator, ConstIterator, Range, MutableRange, and EnumerateRange. - Supports safe implicit conversion from Iterator to ConstIterator. - Supports operator-> even when the value type is returned by value (e.g., llvm::StringRef) by conditionally const-qualifying the pointer type. - Ensures C++20 comparison consistency with custom operator<=> and operator== definitions. - Restricts construction of these iterators and ranges to ValueStore methods by using private constructors and friend declarations. Assisted-by: Antigravity with Gemini