diff options
author | Alberto Gonzalez <boqwxp@airmail.cc> | 2020-06-17 22:32:34 +0000 |
---|---|---|
committer | Alberto Gonzalez <boqwxp@airmail.cc> | 2020-06-19 17:44:29 +0000 |
commit | e5a2d17b5dffc69c9994d48c2c12288865b80156 (patch) | |
tree | 9cc11cdd8a3873069dd0d96991ee08c5ffdbccf7 /kernel | |
parent | d5d0cc88d272b85c3be3677993596dcfa82d579f (diff) | |
download | yosys-e5a2d17b5dffc69c9994d48c2c12288865b80156.tar.gz yosys-e5a2d17b5dffc69c9994d48c2c12288865b80156.tar.bz2 yosys-e5a2d17b5dffc69c9994d48c2c12288865b80156.zip |
hashlib, rtlil: Add `operator+=()` to `dict<>::iterator` and `dict<>::const_iterator` and add `operator+()` and `operator+=()` to `ObjIterator`.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/hashlib.h | 2 | ||||
-rw-r--r-- | kernel/rtlil.h | 23 |
2 files changed, 25 insertions, 0 deletions
diff --git a/kernel/hashlib.h b/kernel/hashlib.h index 5c87b55f5..52dfd1280 100644 --- a/kernel/hashlib.h +++ b/kernel/hashlib.h @@ -363,6 +363,7 @@ public: public: const_iterator() { } const_iterator operator++() { index--; return *this; } + const_iterator operator+=(int amt) { index -= amt; if(index < 0) index = -1; return *this; } bool operator<(const const_iterator &other) const { return index > other.index; } bool operator==(const const_iterator &other) const { return index == other.index; } bool operator!=(const const_iterator &other) const { return index != other.index; } @@ -380,6 +381,7 @@ public: public: iterator() { } iterator operator++() { index--; return *this; } + iterator operator+=(int amt) { index -= amt; if(index < 0) index = -1; return *this; } bool operator<(const iterator &other) const { return index > other.index; } bool operator==(const iterator &other) const { return index == other.index; } bool operator!=(const iterator &other) const { return index != other.index; } diff --git a/kernel/rtlil.h b/kernel/rtlil.h index f3dc3af68..147ec8a5b 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -554,6 +554,29 @@ namespace RTLIL return *this; } + inline ObjIterator<T>& operator+=(int amt) { + log_assert(list_p != nullptr); + it += amt; + if (it == list_p->end()) { + (*refcount_p)--; + list_p = nullptr; + refcount_p = nullptr; + } + return *this; + } + + inline ObjIterator<T> operator+(int amt) { + log_assert(list_p != nullptr); + ObjIterator<T> new_obj(*this); + new_obj.it += amt; + if (new_obj.it == list_p->end()) { + (*(new_obj.refcount_p))--; + new_obj.list_p = nullptr; + new_obj.refcount_p = nullptr; + } + return new_obj; + } + inline const ObjIterator<T> operator++(int) { ObjIterator<T> result(*this); ++(*this); |