소스 검색

Add an accumulate that returns nullopt on an empty stream

Sam Jaffe 2 년 전
부모
커밋
41191a1d91
1개의 변경된 파일7개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      include/stream/streams/streams.hpp

+ 7 - 0
include/stream/streams/streams.hpp

@@ -144,6 +144,13 @@ namespace stream {
       value_type accumulate(F && fold, value_type const & accum) const {
         return std::accumulate(begin(), end(), accum, fold);
       }
+      
+      template <typename F>
+      std::optional<value_type> accumulate(F && fold) const {
+        if (empty()) { return std::nullopt; }
+        value_type first = *begin();
+        return std::accumulate(++begin(), end(), first, fold);
+      }
 
       value_type accumulate(value_type const & accum) const {
         return std::accumulate(begin(), end(), accum);