1#ifndef FREE_TENSOR_SHARED_LINKED_LIST_H
2#define FREE_TENSOR_SHARED_LINKED_LIST_H
20template <
class T,
class Hash = std::hash<T>,
class Equal = std::equal_to<T>>
31 const T &
top()
const {
47 auto h = Hash()(data);
51 *node = {data, h, tail_};
66 ret.tail_ = tail_->prev_;
71 std::vector<T> revRet;
72 for (
auto it = *
this; !it.empty(); it = it.pop()) {
73 revRet.emplace_back(it.top());
75 return std::vector<T>(revRet.rbegin(), revRet.rend());
80 std::vector<T> revRet;
81 for (
auto it =
top; !it.empty() && it != bottom; it = it.
pop()) {
82 revRet.emplace_back(it.top());
84 return std::vector<T>(revRet.rbegin(), revRet.rend());
87 size_t hash()
const {
return empty() ? 0 : tail_->hash_; }
92 while (!l.empty() && !r.empty()) {
93 if (l.tail_ == r.tail_) {
98 if (l.hash() != r.hash()) {
101 if (!Equal()(l.top(), r.top())) {
104 l = l.pop(), r = r.pop();
106 return l.empty() && r.empty();
114template <
class T,
class Hash,
class Equal>
static Ref make()
Definition: ref.h:105
bool isValid() const
Definition: ref.h:89
Definition: shared_linked_list.h:21
std::vector< T > asVector() const
Definition: shared_linked_list.h:70
friend bool operator==(const SharedLinkedList &lhs, const SharedLinkedList &rhs)
Definition: shared_linked_list.h:89
friend std::vector< T > asVector(const SharedLinkedList &bottom, const SharedLinkedList &top)
Definition: shared_linked_list.h:78
size_t hash() const
Definition: shared_linked_list.h:87
SharedLinkedList push(const T &data) const
Definition: shared_linked_list.h:45
SharedLinkedList pop() const
Definition: shared_linked_list.h:64
const T & top() const
Definition: shared_linked_list.h:31
bool empty() const
Definition: shared_linked_list.h:36
size_t operator()(const freetensor::SharedLinkedList< T, Hash, Equal > &stack) const
Definition: shared_linked_list.h:117
#define ASSERT(expr)
Definition: except.h:152
Definition: allocator.h:9
auto && lhs
Definition: const_fold.cc:70
auto auto && rhs
Definition: const_fold.cc:70
size_t hashCombine(size_t seed, size_t other)
Definition: hash_combine.cc:5