summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/SerialCaseElement.java
blob: 3d15e8c263ed4e3f5da8632ad174d17b9017a8a9 (plain)
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
package bjc.rgens.parser.elements;

import bjc.rgens.parser.GenerationState;

/**
 * Case element which is generated one or more times.
 * 
 * @author Ben Culkin
 *
 */
public class SerialCaseElement extends CaseElement {
	/**
	 * The case element to repeat.
	 */
	public final CaseElement rep;

	/**
	 * The lower bound of times to repeat.
	 */
	public final int lower;
	
	/**
	 * The upper bound of times to repeat.
	 */
	public final int upper;

	/**
	 * Create a new repeating case element.
	 * 
	 * @param rep The case element to repeat.
	 * @param lower The lower bound of times to repeat.
	 * @param upper The upper bound of times to repeat.
	 */
	public SerialCaseElement(CaseElement rep, int lower, int upper)  {
		super(rep.spacing);

		this.rep = rep;

		this.lower = lower;
		this.upper = upper;
	}

	@Override
	public void generate(GenerationState state) {
		int num = state.rnd.nextInt(upper - lower) + lower;

		for(int i = 0; i < num; i++) {
			rep.generate(state);

			if(rep.spacing)
				state.appendContents(" ");
		}
	}
}