diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/hashlib.h | 11 | ||||
-rw-r--r-- | kernel/rtlil.h | 11 |
2 files changed, 20 insertions, 2 deletions
diff --git a/kernel/hashlib.h b/kernel/hashlib.h index 021cc66ee..4e8c00026 100644 --- a/kernel/hashlib.h +++ b/kernel/hashlib.h @@ -76,6 +76,17 @@ template<> struct hash_ops<std::string> { } }; +template<typename P, typename Q> struct hash_ops<std::pair<P, Q>> { + bool cmp(std::pair<P, Q> a, std::pair<P, Q> b) const { + return a == b; + } + unsigned int hash(std::pair<P, Q> a) const { + hash_ops<P> p_ops; + hash_ops<Q> q_ops; + return mkhash(p_ops.hash(a.first), q_ops.hash(a.second)); + } +}; + struct hash_cstr_ops { bool cmp(const char *a, const char *b) const { for (int i = 0; a[i] || b[i]; i++) diff --git a/kernel/rtlil.h b/kernel/rtlil.h index 5bca060f4..25477d02e 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -219,8 +219,8 @@ namespace RTLIL return index_; } - // The following is a helper key_compare class. Instead of for example pool<Cell*> - // use pool<Cell*, IdString::compare_ptr_by_name<Cell>> if the order of cells in the + // The following is a helper key_compare class. Instead of for example std::set<Cell*> + // use std::set<Cell*, IdString::compare_ptr_by_name<Cell>> if the order of cells in the // set has an influence on the algorithm. template<typename T> struct compare_ptr_by_name { @@ -450,6 +450,13 @@ struct RTLIL::Const std::string decode_string() const; inline int size() const { return bits.size(); } + + inline unsigned int hash() const { + unsigned int h = 5381; + for (auto b : bits) + mkhash(h, b); + return h; + } }; struct RTLIL::SigChunk |