| // Copyright 2018 The Chromium 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 NET_TOOLS_HUFFMAN_TRIE_TRIE_ENTRY_H_ |
| #define NET_TOOLS_HUFFMAN_TRIE_TRIE_ENTRY_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| namespace net { |
| |
| namespace huffman_trie { |
| |
| class TrieBitBuffer; |
| |
| class TrieEntry { |
| public: |
| TrieEntry(); |
| virtual ~TrieEntry(); |
| |
| // The name to be used when inserting the entry to the trie. E.g. for HSTS |
| // preload list, this is the hostname. |
| virtual std::string name() const = 0; |
| virtual bool WriteEntry(huffman_trie::TrieBitBuffer* writer) const = 0; |
| }; |
| |
| // std::unique_ptr's are not covariant, so operations on TrieEntry uses a vector |
| // of raw pointers instead. |
| using TrieEntries = std::vector<TrieEntry*>; |
| |
| // ReversedEntry points to a TrieEntry and contains the reversed name for |
| // that entry. This is used to construct the trie. |
| struct ReversedEntry { |
| ReversedEntry(std::vector<uint8_t> reversed_name, const TrieEntry* entry); |
| ~ReversedEntry(); |
| |
| std::vector<uint8_t> reversed_name; |
| const TrieEntry* entry; |
| }; |
| |
| using ReversedEntries = std::vector<std::unique_ptr<ReversedEntry>>; |
| |
| } // namespace huffman_trie |
| |
| } // namespace net |
| |
| #endif // NET_TOOLS_HUFFMAN_TRIE_TRIE_ENTRY_H_ |