// // size.h // stream // // Created by Sam Jaffe on 3/30/23. // #pragma once #include namespace stream::ranges { template std::ptrdiff_t distance(It it, S end) { if constexpr (std::is_same_v) { return std::distance(it, end); } else { std::ptrdiff_t accum = 0; for (; it != end; ++it) { ++accum; } return accum; } } template size_t size(Stream const & stream) { if constexpr (detail::has_size_v) { return stream.size(); } else { return distance(stream.begin(), stream.end()); } } template bool empty(Stream const & stream) { if constexpr (detail::has_empty_v) { return stream.empty(); } else { return stream.begin() == stream.end(); } } }