By taking advantage of integer wrapping and a bitwise and, its quite a simple problem to solve!

Challenge for the reader: add support for binary operations and toString support.

https://dlang.org/spec/operatoroverloading.html

```d
struct Direction {
    private int value;

    Direction opUnary(string op:"++")() {
        value++;
        value &= 7;
        return this;
    }

    Direction opUnary(string op:"--")() {
        value--;
        value &= 7;
        return this;
    }

    void opOpAssign(string op:"+")(int amount) {
        value += amount;
        value &= 7;
    }

    void opOpAssign(string op:"-")(int amount) {
        value -= amount;
        value &= 7;
    }

    enum Direction N = Direction(0);
    enum Direction NE = Direction(1);
    enum Direction E = Direction(2);
    enum Direction SE = Direction(3);
    enum Direction S = Direction(4);
    enum Direction SW = Direction(5);
    enum Direction W = Direction(6);
    enum Direction NW = Direction(7);
}

unittest {
     Direction direction = Direction.N;
     direction++;
     assert(direction == Direction.NE);
     direction+=3;
     assert(direction == Direction.S);
     direction--;
     assert(direction == Direction.SE);
     direction-=4;
     assert(direction == Direction.NW);
}
```
  • Challenge: Make ... Liam McGillivray via Digitalmars-d-learn
    • Re: Challen... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
      • Re: Cha... Liam McGillivray via Digitalmars-d-learn
        • Re:... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
      • Re: Cha... Liam McGillivray via Digitalmars-d-learn
        • Re:... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
          • ... Liam McGillivray via Digitalmars-d-learn
            • ... Basile B. via Digitalmars-d-learn
              • ... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
                • ... Basile B. via Digitalmars-d-learn
            • ... H. S. Teoh via Digitalmars-d-learn
            • ... Liam McGillivray via Digitalmars-d-learn

Reply via email to