summaryrefslogtreecommitdiff
path: root/algo1w1/NAWArray.cpp
blob: 51742f13f85e3c82354aeed4168285a1e02777fd (plain)
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
#include "NAWArray.h"
#include "NAW.h"

#include <sstream>
#include <iostream>

NAWArray::NAWArray() { }
NAWArray::~NAWArray() { }

void NAWArray::add(const NAW& newNAW) {
	_nawCollection[_nawCollectionSize++] = new NAW(newNAW);
}

int NAWArray::zoekOpEersteNaam(const std::string& naam) const {
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (!_nawCollection[i]->heeftNaam(naam)) continue;
		return i;
	}
	return -1;
}

int NAWArray::zoekOpEersteAdres(const std::string& adres) const {
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (!_nawCollection[i]->heeftAdres(adres)) continue;
		return i;
	}
	return -1;
}

int NAWArray::zoekOpEerstePlaats(const std::string& plaats) const {
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (!_nawCollection[i]->heeftPlaats(plaats)) continue;
		return i;
	}
	return -1;
}

int NAWArray::zoekOpEersteAdresEnPlaats(const std::string& adres, const std::string& plaats) const {
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (!_nawCollection[i]->heeftAdres(adres)) continue;
		if (!_nawCollection[i]->heeftPlaats(plaats)) continue;
		return i;
	}
	return -1;
}

int NAWArray::verwijderEersteMetNaam(const std::string& naam) {
	int x = -1; // deleted element index
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (x == -1) {
			if (!_nawCollection[i]->heeftNaam(naam)) continue;
			x = i; // set deleted element index
			_nawCollectionSize--; // decrease container size
			i++; // skip deleted element
		}
		if (i == 0) continue; // check if i-1 >= 0
		_nawCollection[i-1] = _nawCollection[i]; // shift elements back
	}
	return x;
}

int NAWArray::verwijderLaatsteMetNaam(const std::string& naam) {
	int x = -1; // deleted element index
	for (unsigned _i = 0; _i < _nawCollectionSize; _i++) {
		unsigned i = _nawCollectionSize - (_i + 1); // calculate index from back
		if (x == -1) {
			if (!_nawCollection[i]->heeftNaam(naam)) continue;
			x = i; // set deleted element index
			_nawCollectionSize--; // decrease container size
			_i = i; // set loop index to deleted element
			i++; // skip deleted element
		}
		i = _i; // move forward through array shifting elements back
		if (i == 0) continue; // check if i-1 >= 0
		_nawCollection[i-1] = _nawCollection[i]; // shift elements back
	}
	return x;
}

int NAWArray::verwijderAllenMetNaam(const std::string& naam) {
	int c = 0; // deleted element count
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (_nawCollection[i]->heeftNaam(naam)) {
			c++; // pun unintended
			_nawCollectionSize--; // decrease container size
		}
		if (i + c >= _nawCollectionSize) break;
		_nawCollection[i] = _nawCollection[i + c]; // shift elements back
	}
	return c;
}

int NAWArray::verwijderEersteMetAdresEnPlaats(const std::string& adres, const std::string& plaats) {
	int x = -1; // deleted element index
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (x == -1) {
			if (!_nawCollection[i]->heeftAdres(adres)) continue;
			if (!_nawCollection[i]->heeftPlaats(plaats)) continue;
			x = i; // set deleted element index
			_nawCollectionSize--; // decrease container size
			i++; // skip deleted element
		}
		if (i == 0) continue; // check if i-1 >= 0
		_nawCollection[i-1] = _nawCollection[i]; // shift elements back
	}
	return x;
}

int NAWArray::verwijderAllenMetAdresEnPlaats(const std::string& adres, const std::string& plaats) {
	int c = 0; // deleted element count
	for (unsigned i = 0; i < _nawCollectionSize; i++) {
		if (_nawCollection[i]->heeftAdres(adres) &&
				_nawCollection[i]->heeftPlaats(plaats)) {
			c++; // pun unintended
			_nawCollectionSize--; // decrease container size
		}
		if (i + c >= _nawCollectionSize) break;
		_nawCollection[i] = _nawCollection[i + c]; // shift elements back
	}
	return c;
}