Program Listing for File MultiFuture.hpp

Return to documentation for file (engine/include/Cacao/MultiFuture.hpp)

#pragma once

#include "DllHelper.hpp"

#include <future>
#include <vector>

namespace Cacao {
    template<typename T>
    class CACAO_API MultiFuture : public std::vector<std::future<T>> {
      public:
        //All of std::vector's constructors
        using std::vector<std::future<T>>::vector;

        MultiFuture(const MultiFuture&) = delete;

        MultiFuture& operator=(const MultiFuture&) = delete;

        MultiFuture(MultiFuture&&) = default;
        MultiFuture& operator=(MultiFuture&&) = default;

        void WaitAll() {
            for(const std::future<T>& fut : *this) {
                fut.wait();
            }
        }

        int NumReadyFutures() {
            int retval;
            for(const std::future<T>& fut : *this) {
                //Wait for no time to get status
                if(fut.wait_for(std::chrono::duration<double>::zero()) == std::future_status::ready) ++retval;
            }
            return retval;
        }
    };
}