Bidirectional unordered map for trivial types, including string literals; could be efficiently used as a unordered non-bidirectional map. More...
#include <userver/utils/trivial_map.hpp>
Public Types | |
| using | First = typename TypesPair::first_type | 
| using | Second = typename TypesPair::second_type | 
| template<class T > | |
| using | MappedTypeFor = std::conditional_t< std::is_convertible_v< T, First >, Second, First > | 
Public Member Functions | |
| constexpr | TrivialBiMap (BuilderFunc &&func) noexcept | 
| constexpr std::optional< Second > | TryFindByFirst (First value) const noexcept | 
| constexpr std::optional< First > | TryFindBySecond (Second value) const noexcept | 
| template<class T > | |
| constexpr std::optional< MappedTypeFor< T > > | TryFind (T value) const noexcept | 
| constexpr std::optional< Second > | TryFindICaseByFirst (std::string_view value) const noexcept | 
| Case insensitive search for value.   | |
| constexpr std::optional< First > | TryFindICaseBySecond (std::string_view value) const noexcept | 
| Case insensitive search for value.   | |
| constexpr std::optional< MappedTypeFor< std::string_view > > | TryFindICase (std::string_view value) const noexcept | 
| Case insensitive search for value that calls either TryFindICaseBySecond or TryFindICaseByFirst.   | |
| constexpr std::size_t | size () const noexcept | 
| Returns count of Case's in mapping.   | |
| std::string | Describe () const | 
| std::string | DescribeFirst () const | 
| std::string | DescribeSecond () const | 
| template<typename T > | |
| std::string | DescribeByType () const | 
Bidirectional unordered map for trivial types, including string literals; could be efficiently used as a unordered non-bidirectional map.
utils::TrivialBiMap and utils::TrivialSet are known to outperform std::unordered_map if:
Implementation of string search is very efficient due to modern compilers optimize it to a switch by input string length and an integral comparison (rather than a std::memcmp call). In other words, it usually takes O(1) to find the match in the map.
The same story with integral or enum mappings - compiler optimizes them into a switch and it usually takes O(1) to find the match.
For a single value Case statements see utils::TrivialSet.
Definition at line 487 of file trivial_map.hpp.
| using utils::TrivialBiMap< BuilderFunc >::First = typename TypesPair::first_type | 
Definition at line 492 of file trivial_map.hpp.
| using utils::TrivialBiMap< BuilderFunc >::MappedTypeFor = std::conditional_t<std::is_convertible_v<T, First>, Second, First> | 
Returns Second if T is convertible to First, otherwise returns Second type.
Definition at line 498 of file trivial_map.hpp.
| using utils::TrivialBiMap< BuilderFunc >::Second = typename TypesPair::second_type | 
Definition at line 493 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Definition at line 501 of file trivial_map.hpp.
      
  | 
  inline | 
Returns a string of comma separated quoted values of Case parameters.
Example: "('a', '1'), ('b', '2'), ('c', '3')"
Parameters of Case should be formattable.
Definition at line 584 of file trivial_map.hpp.
      
  | 
  inline | 
Returns a string of comma separated quoted values of Case parameters that matches by type.
Example: "'1', '2', '3'"
Corresponding Case must be formattable
Definition at line 615 of file trivial_map.hpp.
      
  | 
  inline | 
Returns a string of comma separated quoted values of first Case parameters.
Example: "'a', 'b', 'c'"
First parameters of Case should be formattable.
Definition at line 594 of file trivial_map.hpp.
      
  | 
  inline | 
Returns a string of comma separated quoted values of second Case parameters.
Example: "'1', '2', '3'"
Second parameters of Case should be formattable.
Definition at line 604 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Returns count of Case's in mapping.
Definition at line 575 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Definition at line 526 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Definition at line 513 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Definition at line 519 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Case insensitive search for value that calls either TryFindICaseBySecond or TryFindICaseByFirst.
Definition at line 560 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Case insensitive search for value.
For efficiency reasons, first parameter in Case() should be lower case string literal.
Definition at line 542 of file trivial_map.hpp.
      
  | 
  inlineconstexprnoexcept | 
Case insensitive search for value.
For efficiency reasons, second parameter in Case() should be lower case string literal.
Definition at line 552 of file trivial_map.hpp.