TP2: add class annotations.
[TP_POO.git] / TP2 / Image.java
CommitLineData
36a82657 1import java.util.Comparator;
a988a46e 2
78c725c5
JB
3@ClassPreamble (
4 author = "Jérôme Benoit",
5 date = "09/11/2009"
6)
600e6ac6
JB
7public class Image extends Forme implements Compactable,
8 Comparable<Image>,
9 Comparator<Image> {
a988a46e 10 final int IMAGE_MAX_SIZE = 100;
a988a46e
JB
11 Forme[] formeCollection;
12 int formeNumber;
13
14 Image() {
009c5b1e 15 super();
a988a46e
JB
16 formeCollection = new Forme[IMAGE_MAX_SIZE];
17 formeNumber = 0;
18 }
19
20 Image(Point p) {
009c5b1e 21 super(p);
a988a46e
JB
22 formeCollection = new Forme[IMAGE_MAX_SIZE];
23 formeNumber = 0;
24 }
25
1ace8736
JB
26 public int getSize() {
27 return formeNumber;
28 }
29
a988a46e
JB
30 private boolean isEmpty() {
31 return (formeNumber == 0);
32 }
33
34 private boolean isFull() {
35 return (formeNumber >= formeCollection.length);
36 }
37
38 public void dessiner(Piletransformations pile) {
39 for (int i = 0; i < formeNumber; i++) {
40 formeCollection[i].dessiner(pile);
41 }
42 }
43
44 public void deplacer(Point p) {
45 for (int i = 0; i < formeNumber; i++) {
46 formeCollection[i].deplacer(p);
47 }
48 }
49
50 public boolean ajouter(Forme forme) {
145c683d
JB
51 boolean rtVal = false;
52 if (!isFull()) {
53 formeCollection[formeNumber] = forme;
f8ac3cd5 54 formeNumber++;
145c683d
JB
55 rtVal = true;
56 }
57 return rtVal;
a988a46e
JB
58 }
59
5731ae5f
JB
60 public boolean supprimer(int index) {
61 boolean rtVal = false;
62 if (!isEmpty()) {
63 for (int j = index; (j < formeNumber - 1 && index < formeNumber); j++) {
64 formeCollection[j] = formeCollection[j + 1];
65 }
66 rtVal = true;
67 formeNumber--;
68 }
69 return rtVal;
70 }
71
54d3f5b3 72 public void afficher() {
0f1b2018
JB
73 String className = this.getClass().getSimpleName();
74 System.out.println("---- " + className + " ----");
54d3f5b3
JB
75 for (int i = 0; i < formeNumber; i++) {
76 formeCollection[i].afficher();
77 }
78 }
79
97929775 80 public void compacter(int nElements) {
38098a56
JB
81 // Heavy solution
82 /* int minIndex = formeNumber - nElements - 1;
0f1b2018 83 for (int i = formeNumber - 1; (i > minIndex && !isEmpty()); i--) {
5731ae5f 84 supprimer(i);
38098a56
JB
85 } */
86 // Lightweight solution
87 if (formeNumber - nElements > 0) {
88 formeNumber -= nElements;
89 } else {
90 formeNumber = 0;
5731ae5f 91 }
97929775
JB
92 }
93
1ace8736
JB
94 public int compareTo(Image image) {
95 return formeNumber - image.getSize();
96 }
97
36a82657 98 public int compare(Image image1, Image image2) {
a8276a31 99 return (int)(image1.getpOri().getY() - image2.getpOri().getY());
36a82657
JB
100 }
101
a988a46e 102}