From eb3c2733767938831c0592c8c2eeac582bac213b Mon Sep 17 00:00:00 2001 From: q66 Date: Sun, 16 Aug 2015 11:35:06 -0700 Subject: [PATCH] add algorithm::find_last --- ostd/algorithm.hh | 14 ++++++++++++++ ostd/stream.hh | 6 +++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ostd/algorithm.hh b/ostd/algorithm.hh index 1eb87ff..893ebb4 100644 --- a/ostd/algorithm.hh +++ b/ostd/algorithm.hh @@ -276,6 +276,20 @@ R find(R range, const T &v) { return range; } +template +R find_last(R range, const T &v) { + range = find(range, v); + if (!range.empty()) for (;;) { + R prev = range; + prev.pop_front(); + R r = find(prev, v); + if (r.empty()) + break; + prev = r; + } + return range; +} + template R find_if(R range, P pred) { for (; !range.empty(); range.pop_front()) diff --git a/ostd/stream.hh b/ostd/stream.hh index 2816518..6b309ef 100644 --- a/ostd/stream.hh +++ b/ostd/stream.hh @@ -68,10 +68,10 @@ private: } template - inline void write_impl(const T &v, EnableIf< + inline bool write_impl(const T &v, EnableIf< !IsConstructible::value, StNat > = StNat()) { - write(ostd::to_string(v)); + return write(ostd::to_string(v)); } public: @@ -113,7 +113,7 @@ public: template bool write(const T &v) { - write_impl(v); + return write_impl(v); } template