Graphs/src/my_operator.cpp

90 lines
2.0 KiB
C++

#include <../inc/my_structures.h>
#include <../inc/my_util.h>
ostream& operator<<(ostream& out, Matrix& mat) {
for (auto& row: mat) {
for (auto& weight: row) {
out << weight;
out << ", ";
}
out << endl;
}
return out;
}
ostream& operator<<(ostream& out, Graph& list) {
int i = 0;
for (auto& vertex: list) {
out << "n: " << i + 1 << " => ";
string s;
for (auto& edge: vertex.neighbours) {
out << "[" << edge.to + 1 << ", " << edge.cost << "], ";
}
out << endl;
}
return out;
}
ostream& operator<<(ostream& out, vector<vector<eStatus>>& vec) {
int i = 0;
for (auto& vertex: vec) {
out << ++i << ": ";
for (auto& edge: vertex) {
switch(edge) {
case eStatus::absent:
out << "A";
break;
case eStatus::backward:
out << "B";
break;
case eStatus::cross:
out << "C";
break;
case eStatus::forward:
out << "F";
break;
default:
out << "T";
}
out << ", ";
}
out << endl;
}
return out;
}
istream& operator>>(istream& in, Matrix& mat) {
string input_str;
vector<string> weigth_list;
int row = 0, dim = 0;
do {
getline(in, input_str);
weigth_list = split(input_str);
if (dim == 0) {
dim = weigth_list.size();
mat.resize(dim, vector<int>(dim));
}
for (int col = 0; col < dim; col++) {
mat[row][col] = atoi(&weigth_list[col][0]);
}
row++;
} while (row < dim);
return in;
}
Color operator++(Color& obj) { // ++x
obj = static_cast<Color>((obj + 1));
return obj;
}
Color operator++(Color& obj, int) { // x++
Color result = obj;
++obj;
return result;
}