-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLine.java
More file actions
83 lines (78 loc) · 2.5 KB
/
Copy pathLine.java
File metadata and controls
83 lines (78 loc) · 2.5 KB
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
/**
* Adder Thread representation of every line
*/
public class Line extends Thread {
private Data data;
// Number of line to calculate
private int number;
private int lineHeight;
private int[][] scheme;
private int[] output;
public Line(Data data , int number, int[][] scheme) {
this.data = data;
this.number = number;
lineHeight = data.getHeight();
this.scheme = scheme;
}
/**
* Calculate whole line
*/
public void run(){
boolean g1, g2, p1,p2;
for (int i=0; i<lineHeight+1; i++){
if (scheme[i][number] == -1){
if (i == lineHeight) {
boolean h = data.getHalfsum(number);
// First line - only halfsum
if (number == 0) {
data.setOutput(h, number);
} else {
g1 = data.getGeneration(i, number-1);
h = h ^ g1;
data.setOutput(h, number);
}
} else {
g1 = data.getGeneration(i, number);
p1 = data.getPropagation(i, number);
data.setGenerationAndPropagation(g1, p1, i + 1, number);
}
}else {
g1 = data.getGeneration(i, number);
g2 = data.getGeneration(i, scheme[i][number]);
p1 = data.getPropagation(i, number);
p2 = data.getPropagation(i, scheme[i][number]);
g1 = g1|(p1&g2);
p1 = p2&p1;
if (i == lineHeight){
boolean h = data.getHalfsum(number);
// First line - only halfsum
if (number == 0) {
data.setOutput(h, number);
} else {
g1 = data.getGeneration(i, number-1);
h = h ^ g1;
data.setOutput(h, number);
}
} else {
data.setGenerationAndPropagation(g1, p1, i + 1, number);
}
}
}
}
}
/**
* Adder Thread representation of line calculating carry digit
*/
class CarryDigit extends Thread{
private Data data;
CarryDigit(Data data){
this.data = data;
}
/**
* Calculate carry digit
*/
public void run(){
boolean g = data.getGeneration(data.getHeight(), data.getWidth()-1);
data.setCarry(g);
}
}