#ifndef ASYNCHRONOUS_LOOP_H #define ASYNCHRONOUS_LOOP_H #include namespace smo { class AsynchronousLoop { public: AsynchronousLoop( unsigned int nTotal, unsigned int nSucceeded=0, unsigned int nFailed=0) : nTotal(nTotal), nSucceeded(nSucceeded), nFailed(nFailed) {} bool isComplete(void) const { return nSucceeded + nFailed == nTotal; } void incrementSuccessOrFailureDueTo(bool success) { if (success) { ++nSucceeded; } else { ++nFailed; } } bool incrementSuccessOrFailureAndTestForCompletionDueTo(bool success) { incrementSuccessOrFailureDueTo(success); return isComplete(); } public: std::atomic nTotal, nSucceeded, nFailed; }; } // namespace smo #endif // ASYNCHRONOUS_LOOP_H