-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdata_structure.cpp
135 lines (106 loc) · 2.56 KB
/
data_structure.cpp
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
#include "data_structure.h"
#include <stdexcept>
namespace easy_algorithm {
const char* LengthError = "Unable to insert a new itement!"; // Сообщения при генерировании исключений
const char* IndexError = "Index is out of range!";
void DataStructure::checkIndex(size_t index) const {
if((index >= _size || index < 0))
throw std::out_of_range(IndexError);
}
DataStructure::DataStructure(size_t maxSize)
: _size(0), _maxSize(maxSize), _cur1(0), _cur2(0) {}
DataStructure::DataStructure(const DataStructure& ds)
: _size(ds.Size()), _maxSize(ds.maxSize()), _cur1(0), _cur2(0) {
}
DataStructure::~DataStructure() {}
size_t DataStructure::Size() const {
return _size;
}
void DataStructure::setSize(size_t size) {
_size = size;
}
size_t DataStructure::maxSize() const {
return _maxSize;
}
void DataStructure::setMaxSize(size_t size) {
_maxSize = size;
}
bool DataStructure::empty() const {
return _size == 0 ? true : false;
}
std::ostream& operator << (std::ostream& os, const DataStructure& ds) {
return ds.vPrint(os, ds);
}
std::istream& operator >> (std::istream& is, DataStructure& ds) {
return ds.vInput(is, ds);
}
void DataStructure::swap(size_t index1, size_t index2) {
checkIndex(index1);
checkIndex(index2);
if(index1 != index2) {
setCur1(index1);
setCur2(index2);
vSwap();
}
}
void DataStructure::swap(DataStructure& ds) {
vSwap(ds);
}
void DataStructure::move(size_t source, size_t dest) {
checkIndex(source);
checkIndex(dest);
if(source != dest) {
setCur1(source);
setCur2(dest);
vMove();
}
}
void DataStructure::remove(size_t index) {
checkIndex(index);
setCur1(index);
vRemove();
}
const DataStructure& DataStructure::operator = (const DataStructure& ds) {
vAssign(ds);
return *this;
}
bool DataStructure::compare(size_t index1, size_t index2) const {
checkIndex(index1);
checkIndex(index2);
setCur1(index1);
setCur2(index2);
return vCompare();
}
void DataStructure::setCur1(size_t index) const {
checkIndex(index);
vSetCur1(index);
_cur1 = index;
}
void DataStructure::setCur2(size_t index) const {
checkIndex(index);
vSetCur2(index);
_cur2 = index;
}
size_t DataStructure::getCur1() const {
return _cur1;
}
size_t DataStructure::getCur2() const {
return _cur2;
}
bool DataStructure::compare() const {
if (_cur1 != _cur2)
return vCompare();
return false;
}
void DataStructure::swap() {
if (_cur1 != _cur2)
vSwap();
}
void DataStructure::move() {
if (_cur1 != _cur2)
vMove();
}
void DataStructure::remove() {
vRemove();
}
}