Decode a command code, dispatch it with a switch, and report the chosen workflow size.

decode A decode helper converts raw input into a named command before the main workflow decides what to do.
report The selected command produces a small report value that later code can display or store.

Command Report

code
command_report.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

enum class Command {
    Build,
    Test,
    Package
};

Command decode(int code) {
    if (code == 1) {
        return Command::Build;
    }
    if (code == 2) {
        return Command::Test;
    }
    return Command::Package;
}

int main() {
    int code = 2;

    Command command = decode(code);
    int steps = 0;
    switch (command) {
        case Command::Build:
            steps = 4;
            break;
        case Command::Test:
            steps = 6;
            break;
        case Command::Package:
            steps = 3;
            break;
    }

    std::cout << "code=" << code << std::endl;
    std::cout << "steps=" << steps << std::endl;
    return 0;
}
#include <iostream>

enum class Command {
    Build,
    Test,
    Package
};

Command decode(int code) {
    if (code == 1) {
        return Command::Build;
    }
    if (code == 2) {
        return Command::Test;
    }
    return Command::Package;
}

int main() {
    int code = 1;

    Command command = decode(code);
    int steps = 0;
    switch (command) {
        case Command::Build:
            steps = 4;
            break;
        case Command::Test:
            steps = 6;
            break;
        case Command::Package:
            steps = 3;
            break;
    }

    std::cout << "code=" << code << std::endl;
    std::cout << "steps=" << steps << std::endl;
    return 0;
}
#include <iostream>

enum class Command {
    Build,
    Test,
    Package
};

Command decode(int code) {
    if (code == 1) {
        return Command::Build;
    }
    if (code == 2) {
        return Command::Test;
    }
    return Command::Package;
}

int main() {
    int code = 3;

    Command command = decode(code);
    int steps = 0;
    switch (command) {
        case Command::Build:
            steps = 4;
            break;
        case Command::Test:
            steps = 6;
            break;
        case Command::Package:
            steps = 3;
            break;
    }

    std::cout << "code=" << code << std::endl;
    std::cout << "steps=" << steps << std::endl;
    return 0;
}
  1. code ← 2

    19int main() {20    int code→ 2 = 2; //@code=1, 32122    Command command = decode(code2);23    int steps = 0;
  2. Command decode(int code)

    9Command decode(int code2) {10    if (code == 1) {
  3. if (code == 2)

    12}13if (code2 == 2) {14    return Command::Test;15}
  4. command ← 1, steps ← 0

    22Command command→ 1 = decode(code2);23int steps→ 0 = 0;24switch (command) {
  5. switch (command)

    23int steps = 0;24switch (command1) {25    case Command::Build:
  6. steps ← 6

    27    break;28case Command::Test:29    steps→ 6 = 6;30    break;
  7. steps = 6;

    28case Command::Test:29    steps = 6;30    break;31case Command::Package:
  8. std::cout << "code=" << code << std::endl;

    36    std::cout << "code=" << code2 << std::endl;37    std::cout << "steps=" << steps6 << std::endl;38    return 0;39}
    outputcode=2
    steps=6
  1. code ← 1

    19int main() {20    int code→ 1 = 1;2122    Command command = decode(code1);23    int steps = 0;
  2. Command decode(int code)

    9Command decode(int code1) {10    if (code == 1) {
  3. if (code == 1)

    9Command decode(int code) {10    if (code1 == 1) {11        return Command::Build;12    }
  4. command ← 0, steps ← 0

    22Command command→ 0 = decode(code1);23int steps→ 0 = 0;24switch (command) {
  5. switch (command)

    23int steps = 0;24switch (command0) {25    case Command::Build:
  6. steps ← 4

    24switch (command) {25    case Command::Build:26        steps→ 4 = 4;27        break;
  7. steps = 4;

    25case Command::Build:26    steps = 4;27    break;28case Command::Test:
  8. std::cout << "code=" << code << std::endl;

    36    std::cout << "code=" << code1 << std::endl;37    std::cout << "steps=" << steps4 << std::endl;38    return 0;39}
    outputcode=1
    steps=4
  1. code ← 3

    19int main() {20    int code→ 3 = 3;2122    Command command = decode(code3);23    int steps = 0;
  2. Command decode(int code)

    9Command decode(int code3) {10    if (code == 1) {11        return Command::Build;12    }13    if (code == 2) {14        return Command::Test;15    }16    return Command::Package;17}
  3. command ← 2, steps ← 0

    22Command command→ 2 = decode(code3);23int steps→ 0 = 0;24switch (command) {
  4. switch (command)

    23int steps = 0;24switch (command2) {25    case Command::Build:
  5. steps ← 3

    30    break;31case Command::Package:32    steps→ 3 = 3;33    break;
  6. steps = 3;

    31    case Command::Package:32        steps = 3;33        break;34}
  7. std::cout << "code=" << code << std::endl;

    36    std::cout << "code=" << code3 << std::endl;37    std::cout << "steps=" << steps3 << std::endl;38    return 0;39}
    outputcode=3
    steps=3