Skip to content

src/storage/trie/supergenius_trie/supergenius_trie.hpp

Namespaces

Name
sgns
sgns::storage
sgns::storage::trie

Classes

Name
class sgns::storage::trie::SuperGeniusTrie

Source code

#ifndef SUPERGENIUS_STORAGE_TRIE_SUPERGENIUS_TRIE_HPP
#define SUPERGENIUS_STORAGE_TRIE_SUPERGENIUS_TRIE_HPP

#include <list>

#include "storage/face/generic_maps.hpp"
#include "storage/trie/supergenius_trie/supergenius_node.hpp"

namespace sgns::storage::trie {

  class SuperGeniusTrie : public face::GenericMap<base::Buffer, base::Buffer> {
   public:
    using NodePtr = std::shared_ptr<SuperGeniusNode>;
    using BranchPtr = std::shared_ptr<BranchNode>;

    virtual outcome::result<void> clearPrefix(const base::Buffer &prefix) = 0;

    virtual NodePtr getRoot() const = 0;

    virtual outcome::result<NodePtr> retrieveChild(BranchPtr parent,
                                                   uint8_t idx) const = 0;

    // TODO(Harrm) Make key nibbles type distinguishable with just key
    virtual outcome::result<NodePtr> getNode(
        NodePtr parent, const KeyNibbles &key_nibbles) const = 0;

    virtual outcome::result<std::list<std::pair<BranchPtr, uint8_t>>> getPath(
        NodePtr parent, const KeyNibbles &key_nibbles) const = 0;
  };

}  // namespace sgns::storage::trie

#endif  // SUPERGENIUS_STORAGE_TRIE_SUPERGENIUS_TRIE_HPP

Updated on 2026-03-04 at 13:10:45 -0800