diff options
author | 2017-03-30 15:23:23 +1100 | |
---|---|---|
committer | 2017-03-30 15:51:14 +1100 | |
commit | 5e8fefbb1214e9936253a81da4946cc42cc20b9d (patch) | |
tree | 30d297c7eb05c68326488bf1618505a8d00bd135 /src/lib/netlist/plib/putil.cpp | |
parent | 35b673ea45da6b4759f170813f99c124c7db9d70 (diff) |
Turn psring iterator into a real forward iterator that works with standard algorithms.
There are a few changes to achieve this:
* Rename to const_iterator since it's immutable
* Typedef iterator to const_iterator for now as there's no mutable iterator
* Add default constrcutor and operator-> required by concept, const-qualify operators
* Remove operator+ and operator+= since it's not a random-access iterator (use std::next and std::advance instead)
* Return reference/pointer to a proxy rather than a code_t value from opertator*/operator->
The final change is required to meet the requirement that operator* for
two equivalent forward iterators return an equivalent reference. The
pstring doesn't actually contain a sequence of code_t, so there's no way
to return a reference to code_t directly. Instead, a reference to a
proxy object aliased on the string storage is returned. The proxy is
implicitly convertible to code_t. The most noticeable side effect is
that auto c = *s.begin() or for (auto c : s) won't work. You need to do
for (auto &c : s) or for (code_t c : s) instead.
Diffstat (limited to 'src/lib/netlist/plib/putil.cpp')
-rw-r--r-- | src/lib/netlist/plib/putil.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/lib/netlist/plib/putil.cpp b/src/lib/netlist/plib/putil.cpp index 0f09f512242..234b4e6cbaa 100644 --- a/src/lib/netlist/plib/putil.cpp +++ b/src/lib/netlist/plib/putil.cpp @@ -52,7 +52,7 @@ namespace plib pstring t = str.substr(p, pn); if (!ignore_empty || t.len() != 0) ret.push_back(t); - p = pn + onstr.len(); + p = std::next(pn, onstr.len()); pn = str.find(onstr, p); } if (p != str.end()) |