blob: fe70260f981f25475b274eafffe9496a08e8e2f0 [file] [log] [blame]
// 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_