File: maxperday-2.xml

package info (click to toggle)
tablix2 0.3.5-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, squeeze, wheezy
  • size: 9,920 kB
  • ctags: 3,351
  • sloc: ansic: 24,593; xml: 13,161; sh: 10,409; makefile: 852; perl: 564; yacc: 289; sed: 16
file content (110 lines) | stat: -rw-r--r-- 2,868 bytes parent folder | download | duplicates (4)
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
<!--
BEGIN TTF BLOCK
(define days 5)
(define periods 7)
(define maxperday 2)

(define perday (make-vector days 0))

(define (get-day tupleid) (quotient (get-time tupleid) periods))
(define (get-period tupleid) (modulo (get-time tupleid) periods))

; Increments a value with index "i" in vector "v"
(define (vector-inc! v i)
	(vector-set! v i (+ (vector-ref v i) 1))
)

; Fills vector "v" with constant value "e"
(define (vector-fill! v e)
     (let ((n (vector-length v)))
          (let loop ((i 0))
               (if (= i n)
                    v
                    (begin (vector-set! v i e) (loop (+ i 1)))))))

; Counts how many tuples with ids between "from" and "to" are scheduled in 
; each day. Results are stored in "perday" vector.
(define (tuple-collect from to)
	(let loop ((i from))
		(if (< i to)
			(begin
				(vector-inc! perday (get-day i))
				(loop (+ i 1))))))

; Checks if there are less than "maxperday" tuples each day.
(define (check-days)
	(let loop ((i 0) (result #t))
		(if (< i days)
			(loop (+ i 1) (and result 
				(<= (vector-ref perday i) maxperday)))
			result)))

(define (check-tuples start stop)
	(vector-fill! perday 0)
	(tuple-collect start stop)
	(check-days))

(test-ttf
	(check-tuples 0 4)
	(check-tuples 5 14)
	(check-tuples 15 21))
END TTF BLOCK
-->
<ttm version="0.2.0">
	<modules>
		<module name="sametime" weight="60" mandatory="yes"/> 
		<module name="timeplace" weight="60" mandatory="yes"/>
		<module name="maxperday" weight="60" mandatory="yes">
			<option name="resourcetype">teacher</option>
			<option name="maxperday">2</option>
		</module>
		<module name="maxperday" weight="60" mandatory="yes">
			<option name="resourcetype">class</option>
			<option name="maxperday">4</option>
		</module>
	</modules>

	<resources>
		<constant>
			<resourcetype type="teacher">
				<resource name="a"/>
				<resource name="b"/>
				<resource name="c"/>
			</resourcetype>
			<resourcetype type="class">
				<resource name="1"/>
				<resource name="2"/>
			</resourcetype>
		</constant>
		<variable>
			<resourcetype type="room">
				<linear name="#" from="1" to="40"/>
			</resourcetype>
			<resourcetype type="time">
				<matrix width="5" height="7"/>
			</resourcetype>
		</variable>
	</resources>

	<events>
		<!-- tuples from 0 to 4 -->
		<event name="test-1-a" repeats="5">
			<resource type="teacher" name="a"/>
			<resource type="class" name="1"/>
		</event>
		<!-- tuples from 5 to 14 -->
		<event name="test-1-b" repeats="5">
			<resource type="teacher" name="b"/>
			<resource type="class" name="1"/>
		</event>
		<event name="test-1-b" repeats="5">
			<resource type="teacher" name="b"/>
			<resource type="class" name="2"/>
		</event>
		<!-- tuples from 15 to 21 -->
		<event name="test-1-c" repeats="7">
			<resource type="teacher" name="c"/>
			<resource type="class" name="1"/>
		</event>
	</events>
</ttm>