Skip to content

Commit 6fd016e

Browse files
OlekRaymondJustCallMeRay
authored andcommitted
Adds constexpr to more types, edges
1 parent 4d02c2b commit 6fd016e

6 files changed

Lines changed: 69 additions & 69 deletions

File tree

include/CXXGraph/Edge/DirectedEdge_decl.h

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
/*** License: MPL v2.0 ***/
1818
/***********************************************************/
1919

20-
#ifndef __CXXGRAPH_DIRECTEDEDGE_DECL_H__
21-
#define __CXXGRAPH_DIRECTEDEDGE_DECL_H__
20+
#ifndef CXXGRAPH_DIRECTEDEDGE_DECL_H_
21+
#define CXXGRAPH_DIRECTEDEDGE_DECL_H_
2222

2323
#pragma once
2424

@@ -42,19 +42,21 @@ std::ostream &operator<<(std::ostream &o, const DirectedEdge<T> &edge);
4242
template <typename T>
4343
class DirectedEdge : public Edge<T> {
4444
public:
45-
DirectedEdge(const CXXGraph::id_t id, const Node<T> &node1,
45+
constexpr DirectedEdge(const CXXGraph::id_t id, const Node<T> &node1,
4646
const Node<T> &node2);
47-
DirectedEdge(const CXXGraph::id_t id, shared<const Node<T>> node1,
47+
constexpr DirectedEdge(const CXXGraph::id_t id, shared<const Node<T>> node1,
4848
shared<const Node<T>> node2);
49-
DirectedEdge(const CXXGraph::id_t id,
49+
constexpr DirectedEdge(
50+
const CXXGraph::id_t id,
5051
const std::pair<const Node<T> *, const Node<T> *> &nodepair);
51-
DirectedEdge(
52+
constexpr DirectedEdge(
5253
const CXXGraph::id_t id,
5354
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &nodepair);
54-
DirectedEdge(const Edge<T> &edge);
55+
constexpr DirectedEdge(const Edge<T> &edge);
5556
virtual ~DirectedEdge() = default;
56-
const Node<T> &getFrom() const;
57-
const Node<T> &getTo() const;
57+
constexpr const Node<T> &getFrom() const;
58+
constexpr const Node<T> &getTo() const;
59+
//
5860
const std::optional<bool> isDirected() const override;
5961
const std::optional<bool> isWeighted() const override;
6062
// operator
@@ -67,4 +69,4 @@ class DirectedEdge : public Edge<T> {
6769
};
6870
} // namespace CXXGraph
6971

70-
#endif // __CXXGRAPH_DIRECTEDEDGE_H__
72+
#endif // CXXGRAPH_DIRECTEDEDGE_H_

include/CXXGraph/Edge/DirectedEdge_impl.hpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,44 +26,42 @@
2626

2727
namespace CXXGraph {
2828

29-
using std::make_shared;
30-
using std::make_unique;
31-
3229
template <typename T>
33-
DirectedEdge<T>::DirectedEdge(const CXXGraph::id_t id, const Node<T> &node1,
30+
constexpr DirectedEdge<T>::DirectedEdge(const CXXGraph::id_t id,
31+
const Node<T> &node1,
3432
const Node<T> &node2)
3533
: Edge<T>(id, node1, node2) {}
3634

3735
template <typename T>
38-
DirectedEdge<T>::DirectedEdge(const CXXGraph::id_t id,
36+
constexpr DirectedEdge<T>::DirectedEdge(const CXXGraph::id_t id,
3937
shared<const Node<T>> node1,
4038
shared<const Node<T>> node2)
4139
: Edge<T>(id, node1, node2) {}
4240

4341
template <typename T>
44-
DirectedEdge<T>::DirectedEdge(
42+
constexpr DirectedEdge<T>::DirectedEdge(
4543
const CXXGraph::id_t id,
4644
const std::pair<const Node<T> *, const Node<T> *> &nodepair)
4745
: Edge<T>(id, nodepair) {}
4846

4947
template <typename T>
50-
DirectedEdge<T>::DirectedEdge(
48+
constexpr DirectedEdge<T>::DirectedEdge(
5149
const CXXGraph::id_t id,
5250
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &nodepair)
5351
: Edge<T>(id, nodepair) {}
5452

5553
template <typename T>
56-
DirectedEdge<T>::DirectedEdge(const Edge<T> &edge)
54+
constexpr DirectedEdge<T>::DirectedEdge(const Edge<T> &edge)
5755
: DirectedEdge(edge.getId(), *(edge.getNodePair().first),
5856
*(edge.getNodePair().second)) {}
5957

6058
template <typename T>
61-
const Node<T> &DirectedEdge<T>::getFrom() const {
59+
constexpr const Node<T> &DirectedEdge<T>::getFrom() const {
6260
return *(Edge<T>::getNodePair().first);
6361
}
6462

6563
template <typename T>
66-
const Node<T> &DirectedEdge<T>::getTo() const {
64+
constexpr const Node<T> &DirectedEdge<T>::getTo() const {
6765
return *(Edge<T>::getNodePair().second);
6866
}
6967

include/CXXGraph/Edge/DirectedWeightedEdge_decl.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,25 @@ std::ostream &operator<<(std::ostream &o, const DirectedWeightedEdge<T> &edge);
4545
template <typename T>
4646
class DirectedWeightedEdge : public DirectedEdge<T>, public Weighted {
4747
public:
48-
DirectedWeightedEdge(const CXXGraph::id_t id, const Node<T> &node1,
48+
constexpr DirectedWeightedEdge(const CXXGraph::id_t id, const Node<T> &node1,
4949
const Node<T> &node2, const double weight);
50-
DirectedWeightedEdge(const CXXGraph::id_t id, shared<const Node<T>> node1,
50+
constexpr DirectedWeightedEdge(const CXXGraph::id_t id,
51+
shared<const Node<T>> node1,
5152
shared<const Node<T>> node2, const double weight);
52-
DirectedWeightedEdge(
53+
constexpr DirectedWeightedEdge(
5354
const CXXGraph::id_t id,
5455
const std::pair<const Node<T> *, const Node<T> *> &nodepair,
5556
const double weight);
56-
DirectedWeightedEdge(
57+
constexpr DirectedWeightedEdge(
5758
const CXXGraph::id_t id,
5859
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &nodepair,
5960
const double weight);
60-
DirectedWeightedEdge(const DirectedEdge<T> &edge, const double weight);
61-
DirectedWeightedEdge(const Edge<T> &edge, const double weight);
62-
DirectedWeightedEdge(const DirectedEdge<T> &edge);
63-
DirectedWeightedEdge(const Edge<T> &edge);
64-
DirectedWeightedEdge(const UndirectedWeightedEdge<T> &edge);
61+
constexpr DirectedWeightedEdge(const DirectedEdge<T> &edge,
62+
const double weight);
63+
constexpr DirectedWeightedEdge(const Edge<T> &edge, const double weight);
64+
constexpr DirectedWeightedEdge(const DirectedEdge<T> &edge);
65+
constexpr DirectedWeightedEdge(const Edge<T> &edge);
66+
constexpr DirectedWeightedEdge(const UndirectedWeightedEdge<T> &edge);
6567
virtual ~DirectedWeightedEdge() = default;
6668
const std::optional<bool> isWeighted() const override;
6769
// operator

include/CXXGraph/Edge/DirectedWeightedEdge_impl.hpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,53 +27,56 @@
2727
namespace CXXGraph {
2828

2929
template <typename T>
30-
DirectedWeightedEdge<T>::DirectedWeightedEdge(const CXXGraph::id_t id,
30+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(const CXXGraph::id_t id,
3131
const Node<T> &node1,
3232
const Node<T> &node2,
3333
const double weight)
3434
: DirectedEdge<T>(id, node1, node2), Weighted(weight) {}
3535

3636
template <typename T>
37-
DirectedWeightedEdge<T>::DirectedWeightedEdge(const CXXGraph::id_t id,
37+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(
38+
const CXXGraph::id_t id,
3839
shared<const Node<T>> node1,
3940
shared<const Node<T>> node2,
4041
const double weight)
4142
: DirectedEdge<T>(id, node1, node2), Weighted(weight) {}
4243

4344
template <typename T>
44-
DirectedWeightedEdge<T>::DirectedWeightedEdge(
45+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(
4546
const CXXGraph::id_t id,
4647
const std::pair<const Node<T> *, const Node<T> *> &nodepair,
4748
const double weight)
4849
: DirectedEdge<T>(id, nodepair), Weighted(weight) {}
4950

5051
template <typename T>
51-
DirectedWeightedEdge<T>::DirectedWeightedEdge(
52+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(
5253
const CXXGraph::id_t id,
5354
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &nodepair,
5455
const double weight)
5556
: DirectedEdge<T>(id, nodepair), Weighted(weight) {}
5657

5758
template <typename T>
58-
DirectedWeightedEdge<T>::DirectedWeightedEdge(const DirectedEdge<T> &edge,
59+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(
60+
const DirectedEdge<T> &edge,
5961
const double weight)
6062
: DirectedEdge<T>(edge), Weighted(weight) {}
6163

6264
template <typename T>
63-
DirectedWeightedEdge<T>::DirectedWeightedEdge(const Edge<T> &edge,
65+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(const Edge<T> &edge,
6466
const double weight)
6567
: DirectedEdge<T>(edge), Weighted(weight) {}
6668

6769
template <typename T>
68-
DirectedWeightedEdge<T>::DirectedWeightedEdge(const DirectedEdge<T> &edge)
70+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(
71+
const DirectedEdge<T> &edge)
6972
: DirectedEdge<T>(edge), Weighted() {}
7073

7174
template <typename T>
72-
DirectedWeightedEdge<T>::DirectedWeightedEdge(const Edge<T> &edge)
75+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(const Edge<T> &edge)
7376
: DirectedEdge<T>(edge), Weighted() {}
7477

7578
template <typename T>
76-
DirectedWeightedEdge<T>::DirectedWeightedEdge(
79+
constexpr DirectedWeightedEdge<T>::DirectedWeightedEdge(
7780
const UndirectedWeightedEdge<T> &edge)
7881
: DirectedEdge<T>(edge), Weighted(edge.getWeight()) {}
7982

include/CXXGraph/Edge/Edge_decl.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,25 +49,26 @@ class Edge {
4949
public:
5050
typedef T Node_t;
5151

52-
Edge(const CXXGraph::id_t id, const Node<T> &node1, const Node<T> &node2);
53-
Edge(const CXXGraph::id_t id, shared<const Node<T>> node1,
52+
constexpr Edge(const CXXGraph::id_t id, const Node<T> &node1, const Node<T> &node2);
53+
constexpr Edge(const CXXGraph::id_t id, shared<const Node<T>> node1,
5454
shared<const Node<T>> node2);
55-
Edge(const CXXGraph::id_t id,
55+
constexpr Edge(const CXXGraph::id_t id,
5656
const std::pair<const Node<T> *, const Node<T> *> &nodepair);
57-
Edge(const CXXGraph::id_t id,
57+
constexpr Edge(
58+
const CXXGraph::id_t id,
5859
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &nodepair);
5960
virtual ~Edge() = default;
6061
void setFirstNode(shared<const Node<T>> node);
6162
void setSecondNode(shared<const Node<T>> node);
62-
unsigned long long getId() const;
63+
constexpr unsigned long long getId() const;
6364
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &getNodePair()
6465
const;
6566
shared<const Node<T>> getOtherNode(shared<const Node<T>> node) const;
6667
virtual const std::optional<bool> isDirected() const;
6768
virtual const std::optional<bool> isWeighted() const;
6869
// operator
6970
virtual bool operator==(const Edge<T> &b) const;
70-
bool operator<(const Edge<T> &b) const;
71+
constexpr bool operator<(const Edge<T> &b) const;
7172

7273
friend std::ostream &operator<< <>(std::ostream &os, const Edge<T> &edge);
7374
};

include/CXXGraph/Edge/Edge_impl.hpp

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,36 +35,30 @@ using std::make_shared;
3535
using std::make_unique;
3636

3737
template <typename T>
38-
Edge<T>::Edge(const CXXGraph::id_t id, const Node<T> &node1,
39-
const Node<T> &node2) {
40-
this->nodePair.first = make_shared<const Node<T>>(node1);
41-
this->nodePair.second = make_shared<const Node<T>>(node2);
42-
this->id = id;
43-
}
38+
constexpr Edge<T>::Edge(const CXXGraph::id_t otherId, const Node<T> &node1,
39+
const Node<T> &node2)
40+
: id(otherId), nodePair{std::make_shared<const Node<T>>(node1),
41+
std::make_shared<const Node<T>>(node2)}
42+
{}
4443

4544
template <typename T>
46-
Edge<T>::Edge(const CXXGraph::id_t id, shared<const Node<T>> node1,
47-
shared<const Node<T>> node2) {
48-
this->nodePair.first = node1;
49-
this->nodePair.second = node2;
50-
this->id = id;
51-
}
45+
constexpr Edge<T>::Edge(const CXXGraph::id_t otherId, shared<const Node<T>> node1,
46+
shared<const Node<T>> node2)
47+
: id(otherId), nodePair(node1, node2) {}
5248

5349
template <typename T>
54-
Edge<T>::Edge(const CXXGraph::id_t id,
55-
const std::pair<const Node<T> *, const Node<T> *> &nodepair) {
56-
this->nodePair.first = make_shared<const Node<T>>(*(nodepair.first));
57-
this->nodePair.second = make_shared<const Node<T>>(*(nodepair.second));
58-
this->id = id;
59-
}
50+
constexpr Edge<T>::Edge(const CXXGraph::id_t otherId,
51+
const std::pair<const Node<T> *, const Node<T> *> &nodepair)
52+
: id(otherId)
53+
, nodePair(std::make_shared<const Node<T>>(*(nodepair.first)),
54+
std::make_shared<const Node<T>>(*(nodepair.second)))
55+
{ }
6056

6157
template <typename T>
62-
Edge<T>::Edge(
63-
const CXXGraph::id_t id,
58+
constexpr Edge<T>::Edge(
59+
const CXXGraph::id_t otherId,
6460
const std::pair<shared<const Node<T>>, shared<const Node<T>>> &nodepair)
65-
: nodePair(nodepair) {
66-
this->id = id;
67-
}
61+
: id(otherId), nodePair(nodepair) { }
6862

6963
template <typename T>
7064
void Edge<T>::setFirstNode(shared<const Node<T>> node) {
@@ -79,7 +73,7 @@ void Edge<T>::setSecondNode(shared<const Node<T>> node) {
7973
}
8074

8175
template <typename T>
82-
unsigned long long Edge<T>::getId() const {
76+
constexpr unsigned long long Edge<T>::getId() const {
8377
return id;
8478
}
8579

@@ -114,7 +108,7 @@ bool Edge<T>::operator==(const Edge<T> &b) const {
114108
}
115109

116110
template <typename T>
117-
bool Edge<T>::operator<(const Edge<T> &b) const {
111+
constexpr bool Edge<T>::operator<(const Edge<T> &b) const {
118112
return (this->id < b.id);
119113
}
120114

0 commit comments

Comments
 (0)