Skip to content

Commit 5ced3d5

Browse files
committed
update graph class (consts and integral->arithmetic)
1 parent fc3e316 commit 5ced3d5

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

lib/src/graph.hpp

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66

77
template <typename vert_t>
88
concept AllowedVertType =
9-
std::is_integral_v<vert_t> || std::is_same_v<vert_t, std::string>;
9+
std::is_arithmetic_v<vert_t> || std::is_same_v<vert_t, std::string>;
1010

1111
template <typename weight_t>
12-
concept AllowedWeightType =
13-
std::is_integral_v<weight_t> || std::is_floating_point_v<weight_t>;
12+
concept AllowedWeightType = std::is_arithmetic_v<weight_t>;
1413

1514
// MARK: VertFromTuple
1615

@@ -36,9 +35,6 @@ inline weight_t WeightFromTuple(
3635

3736
/**
3837
* @brief Класс графа (может быть взвешенным и ориентированным)
39-
* @details Поддерживаемые типы:
40-
* вес: char, short, int, long, size_t, float, double, long double
41-
* вершины: std::string, char, short, int, long, size_t
4238
* @tparam vert_t: тип вершин
4339
* @tparam weight_t: тип весов
4440
*/
@@ -209,7 +205,7 @@ class Graph {
209205
static Graph GraphFromAdjMatrix(
210206
const std::vector<std::vector<weight_t>>& adj_matrix,
211207
bool is_weighted = false) {
212-
if constexpr (std::is_integral_v<vert_t>) {
208+
if constexpr (std::is_arithmetic_v<vert_t>) {
213209
if (adj_matrix.empty()) return Graph();
214210

215211
std::vector<Edge> edges{};
@@ -253,7 +249,7 @@ class Graph {
253249
*/
254250
static Graph GraphFromAdjList(
255251
const std::vector<std::vector<vert_t>>& adj_list) {
256-
if constexpr (std::is_integral_v<vert_t>) {
252+
if constexpr (std::is_arithmetic_v<vert_t>) {
257253
if (adj_list.empty()) return Graph();
258254

259255
std::vector<Edge> edges{};
@@ -394,7 +390,7 @@ class Graph {
394390
* for std::string.")`
395391
*/
396392
std::vector<std::vector<vert_t>> GetAdjListWithoutKeys() const {
397-
if constexpr (std::is_integral_v<vert_t>) {
393+
if constexpr (std::is_arithmetic_v<vert_t>) {
398394
std::vector<std::vector<vert_t>> adj_list(
399395
*std::max_element(Verts().begin(), Verts().end()) + 1);
400396

@@ -431,7 +427,7 @@ class Graph {
431427
* std::string.")`
432428
*/
433429
std::vector<std::vector<weight_t>> GetAdjMatrix() const {
434-
if constexpr (std::is_integral_v<vert_t>) {
430+
if constexpr (std::is_arithmetic_v<vert_t>) {
435431
std::vector<std::vector<weight_t>> adj_matrix(
436432
VertsAmount(), std::vector<weight_t>(VertsAmount(), 0));
437433

@@ -528,7 +524,7 @@ class Graph {
528524
it->SetWeight(new_weight);
529525
}
530526

531-
void AddVert(vert_t vert) {
527+
void AddVert(const vert_t& vert) {
532528
if (!Contains(verts_, vert)) verts_.push_back(vert);
533529
}
534530

@@ -554,8 +550,8 @@ class Graph {
554550
}
555551

556552
/// @throw `std::invalid_argument("RemoveVert: there is no such vert:")`
557-
void RemoveVert(vert_t vert) {
558-
if constexpr (std::is_integral_v<vert_t>) {
553+
void RemoveVert(const vert_t& vert) {
554+
if constexpr (std::is_arithmetic_v<vert_t>) {
559555
if (!Contains(Verts(), vert))
560556
throw std::invalid_argument(
561557
"RemoveVert: there is no such vert in graph: " +
@@ -663,7 +659,7 @@ class Graph {
663659
const std::string& Name() const {
664660
static std::string name;
665661

666-
if constexpr (std::is_integral_v<vert_t>) {
662+
if constexpr (std::is_arithmetic_v<vert_t>) {
667663
if (IsWeighted())
668664
name = "[" + std::to_string(StartVert()) + "->" +
669665
std::to_string(EndVert()) +
@@ -715,7 +711,7 @@ class Graph {
715711
AddEdge_(edge);
716712
}
717713

718-
if constexpr (std::is_integral_v<vert_t>) {
714+
if constexpr (std::is_arithmetic_v<vert_t>) {
719715
// кол-во вершин = максимальная вершина среди ребер, т.е. в этом случае
720716
// происходит заполнение вершин до наибольшей из них в списке ребер
721717
vert_t max_vert = edges[0].StartVert();
@@ -757,7 +753,7 @@ class Graph {
757753
throw std::invalid_argument("EdgeString: invalid edge string format: " +
758754
edge_str);
759755

760-
if constexpr (std::is_integral_v<vert_t>) {
756+
if constexpr (std::is_arithmetic_v<vert_t>) {
761757
try {
762758
start_vert = std::stoul(edge_str.substr(0, pos));
763759
end_vert = std::stoul(edge_str.substr(pos + 2));

0 commit comments

Comments
 (0)