-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBin.cpp
More file actions
143 lines (120 loc) · 3.01 KB
/
Bin.cpp
File metadata and controls
143 lines (120 loc) · 3.01 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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
Vector: The vector class
@file vector3D.h
@author Adanna Obibuaku
@date 14/11/20
*/
#ifndef BIN_HEADER
#define BIN_HEADER
#include "Bin.h"
#endif
Bin::Bin(int num):size(num),index(EMPTY-1),init(INIT) {
bin = new Vector3D[size];
}
Bin::Bin(const Bin &bincpy):size(bincpy.size),index(bincpy.index),init(INIT) {
bin = new Vector3D[bincpy.size];
for (int i = 0; i<bincpy.size; i++) {
bin[i] = bincpy.bin[i];
}
}
Bin::~Bin() {
delete bin;
bin = NULL;
}
int Bin::getIndex() {
return index;
}
int Bin::getSize() {
return size;
}
float Bin::getX(int a) {
if ((a >= EMPTY) && (a < size )) {
return bin[a].getX();
}
return 0.0f;
}
float Bin::getY(int a) {
if ((a >= EMPTY) && (a < size )) {
return bin[a].getY();
}
return 0.0f;
}
float Bin::getZ(int a) {
if ((a >= EMPTY) && (a < size )) {
return bin[a].getZ();
}
return 0.0f;
}
void Bin::add(Vector3D v) {
index++; /// 0
if (index < size) {
bin[index] = v;
} else {
Vector3D * temp;
if (size == 0){
temp = new Vector3D[2];
size = 1;
} else {
temp = new Vector3D[size*2]; //increase size
vectorCpy(temp, bin, 0, size);
}
temp[index] = v; // new element added in
delete[] bin; // release old array
bin = temp; // point to temp
temp = NULL; // temp is null
size = size*2;
}
}
void Bin::remove(int b) {
if ((b >= EMPTY) && (b < size ) ) {
if (index>=EMPTY) { // index needs to be greater than 0 to remove
index--;
size--;
Vector3D * temp = new Vector3D[size];
vectorCpy(temp, bin, 0, b); // copy first half elements across
for (int i = b; i<size;i++) { // copy second half across
temp[i] = bin[i+1];
}
delete[] bin; // free allocate memory, we no longer need this
bin = temp; // resaign bin
temp = NULL;
}
}
}
void Bin::vectorCpy(Vector3D cpy[], Vector3D pst[], int index, int size){
for (int i = index; i<size; i++) {
cpy[i] = pst[i];
}
}
Bin Bin::operator=(const Bin &rhs){
if (rhs.init) {
if (this == &rhs){
return *this;
}
size = rhs.size;
index = rhs.index;
delete[] bin; // delete allocated memory
bin = new Vector3D[size]; // create a new vector with size
vectorCpy(bin, rhs.bin, 0, size);
return *this;
}
return *this;
}
Vector3D Bin::operator[](int c) {
return bin[c];
}
ostream& operator<< (ostream& ostream , Bin& bin) {
ostream << endl;
for (int i = 0; i<bin.getSize(); i++) {
ostream << "****************\n";
ostream << "| "<<"(" << bin.getX(i) << "," << bin.getY(i) << "," << bin.getZ(i)<< ")" << " |\n";
ostream << "****************\n";
}
ostream << endl;
return ostream;
}
/*
int main(){
Bin b = Bin(5);
cout << b;
}*/