1#ifndef FREE_TENSOR_RAND_COND_H
2#define FREE_TENSOR_RAND_COND_H
23 virtual std::type_index
typeId()
const = 0;
24 virtual std::string
name()
const = 0;
25 virtual size_t hash()
const = 0;
41 std::type_index typeId_;
46 std::type_index
typeId() const override final {
return typeId_; }
49 if (typeId_ != other.typeId()) {
52 return (
const Derived &)(*this) == (
const Derived &)other;
56template <
class T,
class Hasher = std::hash<T>,
57 class Comparator = std::equal_to<T>>
64 : name_(
name), value_(value) {}
66 std::string
name()
const override {
return name_; }
68 size_t hash()
const override {
73 return lhs.name_ ==
rhs.name_ && Comparator{}(
lhs.value_,
rhs.value_);
77 std::ostringstream os;
78 os << name_ <<
" = " << value_;
88template <
class T,
class Hasher = std::hash<T>,
89 class Comparator = std::equal_to<T>>
Definition: rand_cond.h:40
RandCondCRTP()
Definition: rand_cond.h:44
std::type_index typeId() const override final
Definition: rand_cond.h:46
bool sameAs(const RandCondInterface &other) const override final
Definition: rand_cond.h:48
Definition: rand_cond.h:90
RandCondGuard(RandCondStack &stack, const std::string &name, const T &value)
Definition: rand_cond.h:94
~RandCondGuard()
Definition: rand_cond.h:100
Definition: rand_cond.h:20
virtual ~RandCondInterface()
Definition: rand_cond.h:22
virtual std::string toString() const =0
friend bool operator==(const RandCondInterface &lhs, const RandCondInterface &rhs)
Definition: rand_cond.h:29
virtual bool sameAs(const RandCondInterface &other) const =0
virtual size_t hash() const =0
friend std::ostream & operator<<(std::ostream &os, const RandCondInterface &self)
Definition: rand_cond.h:34
virtual std::string name() const =0
virtual std::type_index typeId() const =0
Definition: rand_cond.h:58
std::string name() const override
Definition: rand_cond.h:66
std::string toString() const override
Definition: rand_cond.h:76
size_t hash() const override
Definition: rand_cond.h:68
friend bool operator==(const RandCond &lhs, const RandCond &rhs)
Definition: rand_cond.h:72
RandCond(const std::string &name, const T &value)
Definition: rand_cond.h:63
Definition: shared_linked_list.h:21
SharedLinkedList push(const T &data) const
Definition: shared_linked_list.h:45
SharedLinkedList pop() const
Definition: shared_linked_list.h:64
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
SharedLinkedList< Ref< RandCondInterface > > RandCondStack
Definition: rand_cond.h:83
size_t operator()(const freetensor::RandCondInterface &obj) const
Definition: rand_cond.h:108