FreeTensor
Loading...
Searching...
No Matches
id.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_ID_H
2#define FREE_TENSOR_ID_H
3
4#include <atomic>
5#include <functional>
6#include <iostream>
7#include <optional>
9
10namespace freetensor {
11
18class ID {
19 friend class StmtNode;
20
21 uint64_t id_;
22
23 static std::atomic_uint64_t globalIdCnt_;
24 explicit ID(uint64_t id) : id_(id) {}
25
26 public:
27 ID() : id_(0) {}
28 ID(std::nullopt_t) : id_(0) {}
29
30 static ID make() { return ID(globalIdCnt_++); }
31 static ID make(uint64_t id) { return ID(id); }
32
33 bool isValid() const { return id_ != 0; }
34
35 operator uint64_t() const { return id_; }
36
37 friend std::ostream &operator<<(std::ostream &os, const ID &id);
38 friend bool operator==(const ID &lhs, const ID &rhs);
39 friend struct ::std::hash<ID>;
40};
41
52extern int OSTREAM_NO_ID_SIGN;
53std::function<std::ostream &(std::ostream &)> manipNoIdSign(bool flag);
56std::ostream &operator<<(std::ostream &os, const ID &id);
57
58} // namespace freetensor
59
60namespace std {
61
62template <> struct hash<freetensor::ID> {
63 size_t operator()(const freetensor::ID &id) const;
64};
65
66} // namespace std
67
68#endif // FREE_TENSOR_ID_H
Definition: id.h:18
friend std::ostream & operator<<(std::ostream &os, const ID &id)
Definition: id.cc:15
ID()
Definition: id.h:27
friend bool operator==(const ID &lhs, const ID &rhs)
Definition: id.cc:25
ID(std::nullopt_t)
Definition: id.h:28
static ID make()
Definition: id.h:30
static ID make(uint64_t id)
Definition: id.h:31
bool isValid() const
Definition: id.h:33
Definition: ast.h:223
Definition: allocator.h:9
std::function< std::ostream &(std::ostream &)> manipNoIdSign(bool flag)
Definition: id.cc:8
auto && lhs
Definition: const_fold.cc:70
int OSTREAM_NO_ID_SIGN
Definition: id.cc:7
auto auto && rhs
Definition: const_fold.cc:70
std::ostream & operator<<(std::ostream &os, const Dependence &dep)
Definition: deps.cc:1404
STL namespace.