2025-09-10 11:06:29 -04:00
|
|
|
#ifndef ASYNCHRONOUS_LOOP_H
|
|
|
|
|
#define ASYNCHRONOUS_LOOP_H
|
|
|
|
|
|
|
|
|
|
#include <atomic>
|
|
|
|
|
|
|
|
|
|
namespace smo {
|
|
|
|
|
|
|
|
|
|
class AsynchronousLoop
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
AsynchronousLoop(
|
|
|
|
|
unsigned int nTotal, unsigned int nSucceeded=0, unsigned int nFailed=0)
|
|
|
|
|
: nTotal(nTotal), nSucceeded(nSucceeded), nFailed(nFailed)
|
2025-09-10 11:07:42 -04:00
|
|
|
{}
|
2025-09-10 11:06:29 -04:00
|
|
|
|
|
|
|
|
bool isComplete(void) const
|
|
|
|
|
{
|
|
|
|
|
return nSucceeded + nFailed == nTotal;
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-10 11:54:26 -04:00
|
|
|
void incrementSuccessOrFailureDueTo(bool success)
|
|
|
|
|
{
|
|
|
|
|
if (success)
|
|
|
|
|
{ ++nSucceeded; }
|
|
|
|
|
else
|
|
|
|
|
{ ++nFailed; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool incrementSuccessOrFailureAndTestForCompletionDueTo(bool success)
|
|
|
|
|
{
|
|
|
|
|
incrementSuccessOrFailureDueTo(success);
|
|
|
|
|
return isComplete();
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-10 11:06:29 -04:00
|
|
|
public:
|
|
|
|
|
std::atomic<unsigned int> nTotal, nSucceeded, nFailed;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace smo
|
|
|
|
|
|
2025-09-10 11:07:42 -04:00
|
|
|
#endif // ASYNCHRONOUS_LOOP_H
|