MCPcopy Create free account
hub / github.com/boostorg/parser / get_trie

Function get_trie

include/boost/parser/parser.hpp:1820–1858  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1818
1819 template<typename Context, typename T>
1820 auto get_trie(
1821 Context const & context, symbol_parser<T> const & sym_parser)
1822 {
1823 using trie_t = text::trie_map<std::vector<char32_t>, T>;
1824 using result_type = std::pair<trie_t &, bool>;
1825 symbol_table_tries_t & symbol_table_tries =
1826 context.get_symbol_table_tries();
1827
1828 auto & [any, has_case_folded] =
1829 symbol_table_tries[(void *)&sym_parser.ref()];
1830
1831 bool const needs_case_folded = context.no_case_depth_;
1832
1833 if (!any.has_value()) {
1834 any = trie_t{};
1835 has_case_folded = false;
1836 trie_t & trie = *std::any_cast<trie_t>(&any);
1837 for (auto const & e : sym_parser.initial_elements()) {
1838 trie.insert(e.first | text::as_utf32, e.second);
1839 if (needs_case_folded) {
1840 trie.insert(
1841 case_fold_view(e.first | text::as_utf32), e.second);
1842 has_case_folded = true;
1843 }
1844 }
1845 return result_type(trie, has_case_folded);
1846 } else {
1847 trie_t & trie = *std::any_cast<trie_t>(&any);
1848 if (needs_case_folded && !has_case_folded) {
1849 trie_t new_trie = trie;
1850 for (auto && [key, value] : trie) {
1851 new_trie.insert(
1852 case_fold_view(key | text::as_utf32), value);
1853 }
1854 std::swap(new_trie, trie);
1855 }
1856 return result_type(trie, has_case_folded);
1857 }
1858 }
1859
1860 template<typename Context, typename T>
1861 decltype(auto) get_pending_symtab_ops(

Callers 5

findMethod · 0.85
insertMethod · 0.85
eraseMethod · 0.85
clearMethod · 0.85
callMethod · 0.85

Calls 3

case_fold_viewClass · 0.85
swapFunction · 0.50
insertMethod · 0.45

Tested by

no test coverage detected