 # dofor loop

From: Menashe Rosemberg <rosemberg_at_[hidden]>
Date: Sat, 28 Dec 2019 09:47:41 +0000 (UTC)
Hi,

The loops we have in c++ are loop while, for and do...while. How they work is pretty know, but I will describe them shortly (in their general use) to better demonstrate my proposal.
1. while: (condition evaluation before statements)
step1: Evaluate condition. Continue to step2 if the condition is true
2. do: (condition evaluation after statements)
step1: Execute statements step2: Evaluate condition. Return to srep1 if the condition is true
3. for: (condition evaluation before statements)
step1: create a counter step2: Evaluate condition. Continue to step3 if the condition is true step3: Execute statements step4: Execute an mathematics operation (with the counter) and return to step2
What I see is we have a lack type of loop where is similar to for but with the condition after statements as the do...while loop).The proposal is to include a new loop that marge the for and do..while following the pattern below:

dofor loop: step1: create a counter step2: execute statements step3: Execute a mathematics operation (with the counter) step4: return to step2 if condition is true
The syntax could be similar to for like that:
dofor ( <variable declaration>; <mathematics operation>; <condition evaluation>) { statements...
}

Just for example, I wrote a templated functionn to print the index of an array's elements:
//1. While template <typename obj, size_t S, enable_if_t <S != 0, size_t> = 1>
void WhileDescending(const array<obj, S>& Obj) {
size_t Size = Obj.size();
while (Size) {
--Size;
cout << Size;
}
}
//----------------------------------------------------------------------------------------------------------------
//2. do template <typename obj, size_t S, enable_if_t <S != 0, size_t> = 1>
void DoDescending(const array<obj, S>& Obj) {
size_t Size = Obj.size();
do { --Size;
cout << Size;
} while (Size);
}//----------------------------------------------------------------------------------------------------------------
//3. for template <typename obj, size_t S, enable_if_t <S != 0, size_t> = 1>
void ForDescending(const array<obj, S>& Obj) { for (size_t Size = Obj.size() - 1; Size != numeric_limits<size_t>::max(); --Size)
cout << Size;
}
//----------------------------------------------------------------------------------------------------------------
//The proposal 'dofor' template <typename obj, size_t S, enable_if_t <S != 0, size_t> = 1> void DoForDescending(const array<obj, S>& Obj) { dofor (size_t Size = Obj.size(); --Size; Size >= 0) cout << Size;
}
Best regards,M.Rosemberg