-
Notifications
You must be signed in to change notification settings - Fork 0
/
printer.cc
120 lines (109 loc) · 3.55 KB
/
printer.cc
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
111
112
113
114
115
116
117
118
119
120
#include "printer.h"
#include <iostream>
using namespace std;
Printer::Printer( unsigned int numStudents, unsigned int numVendingMachines, unsigned int numCouriers ) :
numStudents( numStudents ), numVendingMachines( numVendingMachines ), numCouriers( numCouriers ) {
total = 6 + numStudents + numVendingMachines + numCouriers;
buffer = new info[ total ];
cout << "Parent" << "\t" << "Gropoff" << "WATOff" << "\t" << "Names" << "\t" << "Truck" << "\t" << "Plant" << "\t";
for ( unsigned int s = 0; s < numStudents; s++ ) {
cout << "Stud" << s << "\t";
}
for ( unsigned int s = 0; s < numVendingMachines; s++ ) {
cout << "Mach" << s << "\t";
}
for ( unsigned int s = 0; s < numCouriers-1; s++ ) {
cout << "Cour" << s << "\t";
}
cout << "Cour" << ( numCouriers-1 )<< endl;
for ( unsigned int s = 0; s < total; s++ ) {
if ( s == 0 ) {
cout << "*******";
} else {
cout << "\t*******";
}
}
cout << "\n";
}
Printer::~Printer() {
flush(0,true);
cout << "***********************"<<endl;
delete [] buffer;
}
void Printer::init() {
for ( unsigned int i=0; i < total; i++ ) {
buffer[i] = info();
}
}
void Printer::flush( unsigned int p, bool forced = false ) {
if ( buffer[p].used || forced ) {
for ( unsigned int i = 0; i < total; i++ ) {
if ( length == 0 ) break;
if ( i != 0 ) cout << "\t";
if ( buffer[i].used ) {
cout << buffer[i].state;
if ( buffer[i].value1 != -1 ) cout << buffer[i].value1;
if ( buffer[i].value2 != -1 ) cout << "," <<buffer[i].value2;
length--;
}
}
cout << "\n";
init();
}
buffer[p].used = true;
length++;
}
unsigned int Printer::position( unsigned int p, unsigned id ) {
if ( p >= 6 ) {
switch (p) {
case 6: return ( 6 + id ;
case 7: return ( 6 + numStudents + id );
case 8: return ( 6 + numStudents + numVendingMachines + id );
default: cerr<< "exc" <<endl; return -1;
}
} else {
return p;
}
}
void Printer::print( Kind kind, char state ) {
unsigned int pos = position(kind, 0);
flush(pos);
buffer[pos].state = state;
}
void Printer::print( Kind kind, char state, int value1 ) {
unsigned int pos = position( kind, 0 );
flush(pos);
buffer[pos].state = state;
buffer[pos].value1 = value1;
assert (value1 != -1);
}
void Printer::print( Kind kind, char state, int value1, int value2 ){
unsigned int pos = position( kind, 0 );
flush(pos);
buffer[pos].state = state;
buffer[pos].value1 = value1;
buffer[pos].value2 = value2;
assert(value1 != -1);
assert(value2 != -1);
}
void Printer::print( Kind kind, unsigned int lid, char state ) {
unsigned int pos = position( kind, lid );
flush(pos);
buffer[pos].state = state;
}
void Printer::print( Kind kind, unsigned int lid, char state, int value1 ){
unsigned int pos = position( kind, lid );
flush(pos);
buffer[pos].state = state;
buffer[pos].value1 = value1;
assert (value1 != -1);
}
void Printer::print( Kind kind, unsigned int lid, char state, int value1, int value2 ){
unsigned int pos = position( kind, lid );
flush(pos);
buffer[pos].state = state;
buffer[pos].value1 = value1;
buffer[pos].value2 = value2;
assert(value1 != -1);
assert(value2 != -1);
}