diff --git a/peglib.h b/peglib.h index 3c80642..27b1664 100644 --- a/peglib.h +++ b/peglib.h @@ -229,24 +229,18 @@ struct SemanticValues : protected std::vector return r; } - template - auto map(It beg, It end, F f) const -> vector::type> { + template + auto map(size_t beg, size_t end, F f) const -> vector::type> { vector::type> r; - auto it = beg; - while (it != end) { - r.push_back(f(*it)); - ++it; + end = std::min(end, size()); + for (size_t i = beg; i < end; i++) { + r.push_back(f((*this)[i])); } return r; } template - auto map() const -> vector { - return this->map([](const SemanticValue& v) { return v.get(); }); - } - - template - auto map(It beg, It end) const -> vector { + auto map(size_t beg = 0, size_t end = -1) const -> vector { return this->map(beg, end, [](const SemanticValue& v) { return v.get(); }); } };