diff --git a/include/ircd/util/util.h b/include/ircd/util/util.h index 060007604..5bbaa1617 100644 --- a/include/ircd/util/util.h +++ b/include/ircd/util/util.h @@ -441,5 +441,36 @@ is_powerof2(const long long v) return v && !(v & (v - 1LL)); } +// +// Transform to pointer utils +// + +/// Transform input sequence values to pointers in the output sequence +/// using two input iterators [begin, end] and one output iterator [begin] +template +auto +pointers(input_begin&& ib, + const input_end &ie, + output_begin&& ob) +{ + return std::transform(ib, ie, ob, [] + (auto&& value) + { + return std::addressof(value); + }); +} + +template +auto +pointers(input_container&& ic, + output_container &oc) +{ + return pointers(begin(ic), end(ic), begin(oc)); +} + + } // namespace util } // namespace ircd