C++ Logo

std-proposals

Advanced search

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
    step2: Execute statements step3: return to step1
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


Received on 2019-12-28 03:50:11