Helper: SigSpec::operator[] to accept negative indices
authorEddie Hung <eddie@fpgeh.com>
Wed, 31 Jul 2019 19:18:03 +0000 (12:18 -0700)
committerEddie Hung <eddie@fpgeh.com>
Wed, 31 Jul 2019 19:18:03 +0000 (12:18 -0700)
kernel/rtlil.h

index 868aaaa142c9eb0600788ef65e968668ae4ca8e6..1ed05571559e57cb51910e65b34e6a5ae560ebd6 100644 (file)
@@ -734,8 +734,8 @@ public:
        inline int size() const { return width_; }
        inline bool empty() const { return width_ == 0; }
 
-       inline RTLIL::SigBit &operator[](int index) { inline_unpack(); return bits_.at(index); }
-       inline const RTLIL::SigBit &operator[](int index) const { inline_unpack(); return bits_.at(index); }
+       inline RTLIL::SigBit &operator[](int index) { inline_unpack(); return index >= 0 ? bits_.at(index) : bits_.at(width_ + index); }
+       inline const RTLIL::SigBit &operator[](int index) const { inline_unpack(); return index >= 0 ? bits_.at(index) : bits_.at(width_ + index); }
 
        inline RTLIL::SigSpecIterator begin() { RTLIL::SigSpecIterator it; it.sig_p = this; it.index = 0; return it; }
        inline RTLIL::SigSpecIterator end() { RTLIL::SigSpecIterator it; it.sig_p = this; it.index = width_; return it; }