File: date.e

package info (click to toggle)
smarteiffel 1.1-11
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 12,288 kB
  • ctags: 40,785
  • sloc: ansic: 35,791; lisp: 4,036; sh: 1,783; java: 895; ruby: 613; python: 209; makefile: 115; csh: 78; cpp: 50
file content (124 lines) | stat: -rw-r--r-- 2,550 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
class DATE
   --
   -- Special DATE class to fit with the PARKING example.
   --
creation make

feature 

   display_on(file: OUTPUT_STREAM) is
	 -- To display `Current' on `file'.
      do
	 if day > 0 then
	    file.put_string("day")
	    if day > 1 then
	       file.put_character('s')
	    end
	    file.put_string(": ")
	    file.put_integer(day)
	 end
         file.put_string(" minute")
	 if min > 1 then
	    file.put_character('s')
	 end
	 file.put_string(": ")
         file.put_integer(min)
	 if day_time then
	    file.put_string(" (day time)")
	 else
	    file.put_string(" (night time)")
	 end
      end
   
   minutes_to(after: DATE): INTEGER is
         -- Count of minutes to go to `after'.
      require
         after >= Current
      do
         Result := ((after.day - day) * 24 * 60 + (after.min - min))
      ensure
         Result >= 0
      end

   day_night_to(d2: DATE): TUPLE[INTEGER,INTEGER] is
         --The `Result' is a couple of INTEGER where:
	 --    Result.first: Night time.
         --    Result.second: Day time.
      require
         d2 >= Current
      local
         min_jour, min_nuit, save_day, save_min: INTEGER
      do
	 save_day := day
	 save_min := min
         from until
            Current.is_equal(d2)
         loop
            if day_time then
               min_jour := min_jour + 1
            else
               min_nuit := min_nuit + 1
            end
            add_time(1)
         end
         day := save_day
         min := save_min
         Result := [min_jour,min_nuit]
      ensure
         Result.first + Result.second = minutes_to(d2)
      end

   infix ">=" (d2: like Current): BOOLEAN is
      require
         d2 /= Void
      do
	 if day > d2.day then
	    Result := true
	 elseif day = d2.day then 
	    Result := min >= d2.min
	 end
      end

   day_time: BOOLEAN is
         -- Is it Sunny ?
      do
         Result := (min >= 6 * 60) and (min <= 22 * 60)
      end

   nigth_time: BOOLEAN is
         -- Is it the night ?
      do
         Result := not day_time
      end
   
feature -- Modifications:

   make(vday, vmin: INTEGER) is
      do
         day := vday
         min := vmin
      ensure
         day = vday
         min = vmin
      end

   add_time(nb_min: INTEGER) is
      do
         min := min + nb_min
         if min >= (24 * 60) then
            day := day + (min // (24 * 60))
            min := min \\ (24 * 60)
         end
      end

feature {DATE}

   day, min: INTEGER

invariant

   day >= 0

   min.in_range(0, (24 * 60) - 1)

end -- DATE