[ create a new paste ] login | about

Link: http://codepad.org/z0cwiuHv    [ raw code | output | fork | 1 comment ]

RogerPate - C++, pasted on Mar 9:
    enum Weekday {
      INVALID,
      MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    };
    Weekday operator+(Weekday w, int n) {
      if (w == INVALID) return w;
      n %= 7;
      if (n < 0) n += 7;
      return Weekday((n + (w - 1)) % 7 + 1);
    }
    Weekday operator+(int n, Weekday w) { return w + n; }
    Weekday operator-(Weekday w, int n) { return w + -n; }
    
    std::string str(Weekday d) {
      assert(INVALID <= d && d <= SUNDAY); // function precondition
      static char const* const days[] = {
        "INVALID",
        "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"
      };
      return days[d];
    }

    // you would probably not call this directly, but it shows how you simply have to
    // pick what day int(0) means, and add any int to that day to get a Weekday
    Weekday Weekday_from_num(int n, Weekday zero=MONDAY) {
      return zero + n;
    }

    int main() {
      assert(MONDAY + 1 == TUESDAY);
      assert(MONDAY + 8 == TUESDAY);
      assert(MONDAY - 1 == SUNDAY);
      assert(MONDAY - 8 == SUNDAY);
    
      cout << "MONDAY + 3 is " << str(MONDAY + 3) << '\n';
      return 0;
    }


Output:
1
MONDAY + 3 is THURSDAY


Create a new paste based on this one


Comments:
posted by RogerPate on Mar 9
reply