1 // =================================
 2 // Copyright (c) 2021 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 #include <soulng/lexer/Keyword.hpp>
 7 
 8 namespace soulng { namespace lexer {
 9 
10 inline const char32_t* StrEnd(const char32_t* s)
11 {
12     while (*s)
13     {
14         ++s;
15     }
16     return s;
17 }
18 
19 KeywordMap::KeywordMap(const Keyword* keywords_) : keywords(keywords_)
20 {
21     const Keyword* kw = keywords;
22     while (kw->str)
23     {
24         Lexeme lexeme(kw->strStrEnd(kw->str));
25         keywordMap[lexeme] = kw->tokenID;
26         ++kw;
27     }
28 }
29 
30 int KeywordMap::GetKeywordToken(const Lexeme& lexeme) const
31 {
32     std::map<Lexemeint>::const_iterator it = keywordMap.find(lexeme);
33     if (it != keywordMap.cend())
34     {
35         return it->second;
36     }
37     else
38     {
39         return INVALID_TOKEN;
40     }
41 }
42 
43 } } // namespace soulng::lexer