| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef FLUTTER_FML_ASCIITRIE_H_ | |
| #define FLUTTER_FML_ASCIITRIE_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| namespace fml { | |
| /// A trie for looking for ASCII prefixes. | |
| class AsciiTrie { | |
| public: | |
| struct TrieNode; | |
| typedef std::unique_ptr<TrieNode> TrieNodePtr; | |
| /// The max Ascii value. | |
| static const int kMaxAsciiValue = 128; | |
| /// Clear and insert all the entries into the trie. | |
| void Fill(const std::vector<std::string>& entries); | |
| /// Returns true if \p argument is prefixed by the contents of the trie. | |
| inline bool Query(const char* argument) { | |
| return !node_ || Query(node_.get(), argument); | |
| } | |
| struct TrieNode { | |
| TrieNodePtr children[kMaxAsciiValue]; | |
| }; | |
| private: | |
| static bool Query(TrieNode* trie, const char* query); | |
| TrieNodePtr node_; | |
| }; | |
| } // namespace fml | |
| #endif |