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