Skip to content

Commit 2d39a29

Browse files
authored
Merge pull request #257 from HyperloopUPV-H8/fix/separed_concepts
moved concepts and data_structures
2 parents b5292c9 + 10d6d41 commit 2d39a29

6 files changed

Lines changed: 120 additions & 55 deletions

File tree

Inc/C++Utilities/CppUtils.hpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <cstdarg>
3737
#include <stdarg.h>
3838

39+
3940
namespace chrono = std::chrono;
4041
namespace placeholders = std::placeholders;
4142

@@ -67,9 +68,4 @@ using std::unordered_map;
6768
using std::vector;
6869
using std::queue;
6970
using std::map;
70-
71-
template<class Type>
72-
concept Integral = is_integral<Type>::value;
73-
74-
template<class Type>
75-
concept NotIntegral = !is_integral<Type>::value;
71+
using std::stringstream;
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#pragma once
2+
#include "C++Utilities/CppUtils.hpp"
3+
4+
template<class Type>
5+
concept Integral = is_integral<Type>::value;
6+
7+
template<class Type>
8+
concept NotIntegral = !is_integral<Type>::value;
9+
10+
template <class T>
11+
concept Callable = requires(T a)
12+
{
13+
{ a() };
14+
};
15+
16+
template <class T>
17+
concept NotCallable = !Callable<T>;
18+
19+
template <class... Types>
20+
struct has_callable;
21+
22+
template <class Type, class... Types>
23+
struct has_callable<Type,Types...>{
24+
static constexpr bool value = Callable<Type> || has_callable<Types...>::value;
25+
};
26+
27+
template <>
28+
struct has_callable<>{
29+
static constexpr bool value = false;
30+
};
31+
32+
template <class... Types>
33+
concept CallablePack = has_callable<Types...>::value;
34+
35+
template <class... Types>
36+
concept NotCallablePack = !CallablePack<Types...>;
37+
38+
template <class T>
39+
concept Container = requires(T a, const T b)
40+
{
41+
requires std::regular<T>;
42+
requires std::swappable<T>;
43+
requires std::same_as<typename T::reference, typename T::value_type &>;
44+
requires std::same_as<typename T::const_reference, const typename T::value_type &>;
45+
requires std::forward_iterator<typename T::iterator>;
46+
requires std::forward_iterator<typename T::const_iterator>;
47+
requires std::signed_integral<typename T::difference_type>;
48+
requires std::same_as<typename T::difference_type, typename std::iterator_traits<typename T::iterator>::difference_type>;
49+
requires std::same_as<typename T::difference_type, typename std::iterator_traits<typename T::const_iterator>::difference_type>;
50+
{ a.begin() } -> std::same_as<typename T::iterator>;
51+
{ a.end() } -> std::same_as<typename T::iterator>;
52+
{ b.begin() } -> std::same_as<typename T::const_iterator>;
53+
{ b.end() } -> std::same_as<typename T::const_iterator>;
54+
{ a.cbegin() } -> std::same_as<typename T::const_iterator>;
55+
{ a.cend() } -> std::same_as<typename T::const_iterator>;
56+
{ a.size() } -> std::same_as<typename T::size_type>;
57+
{ a.max_size() } -> std::same_as<typename T::size_type>;
58+
{ a.empty() } -> std::convertible_to<bool>;
59+
};
60+
61+
template <class T>
62+
concept NotContainer = !Container<T>;
63+
64+
template <class T, class... U>
65+
concept PackDerivesFrom = (std::derived_from<T, U> && ...);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#include "C++Utilities/CppUtils.hpp"
4+
5+
template<class... Types> class stack_tuple;
6+
7+
template<>
8+
class stack_tuple<> {
9+
public:
10+
stack_tuple() = default;
11+
template<class FunctionType>
12+
void for_each(FunctionType function) {}
13+
};
14+
15+
template<class Type, class... Types>
16+
class stack_tuple<Type, Types...>: public stack_tuple<Types...> {
17+
public:
18+
Type value;
19+
stack_tuple() = default;
20+
stack_tuple(Type value, Types... values): stack_tuple<Types...>(values...), value(value) {}
21+
template<class FunctionType>
22+
void for_each(FunctionType function) {
23+
function(value);
24+
stack_tuple<Types...>::for_each(function);
25+
}
26+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#pragma once
2+
#include "C++Utilities/CppUtils.hpp"
3+
4+
template<class... Types>
5+
struct TemplatePack{
6+
using Pack = Types...;
7+
};
8+
9+
template<class FilterType, class... ToFilter>
10+
struct TemplatePackFilter;
11+
12+
template<class FilterType, class First, class... ToFilter> requires requires { requires !is_same<FilterType, First>::value; }
13+
struct TemplatePackFilter<FilterType, First, ToFilter...>{
14+
using FilteredPack = typename TemplatePackFilter<FilterType, ToFilter...>::FilteredPack;
15+
};
16+
17+
template<class FilterType, class... ToFilter>
18+
struct TemplatePackFilter<FilterType, FilterType, ToFilter...>{
19+
using FilteredPack = TemplatePack<FilterType, typename TemplatePackFilter<FilterType, ToFilter...>::FilteredPack>::Pack;
20+
};
21+
22+
template<class FilterType>
23+
struct TemplatePackFilter<FilterType>{
24+
using FilteredPack = TemplatePack<>::Pack;
25+
};

Inc/HALAL/Models/Packets/Packet.hpp

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,7 @@
11
#pragma once
22

33
#include "PacketValue.hpp"
4-
5-
template<class... Types> class stack_tuple;
6-
7-
template<>
8-
class stack_tuple<> {
9-
public:
10-
stack_tuple() = default;
11-
template<class FunctionType>
12-
void for_each(FunctionType function) {}
13-
};
14-
15-
template<class Type, class... Types>
16-
class stack_tuple<Type, Types...>: public stack_tuple<Types...> {
17-
public:
18-
Type value;
19-
stack_tuple() = default;
20-
stack_tuple(Type value, Types... values): stack_tuple<Types...>(values...), value(value) {}
21-
template<class FunctionType>
22-
void for_each(FunctionType function) {
23-
function(value);
24-
stack_tuple<Types...>::for_each(function);
25-
}
26-
};
4+
#include "DataStructures/StackTuple.hpp"
275

286
class Packet{
297
public:

Inc/HALAL/Models/Packets/PacketValue.hpp

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
#pragma once
22

33
#include "C++Utilities/CppUtils.hpp"
4-
5-
template <class T>
6-
concept Container = requires(T a, const T b)
7-
{
8-
requires std::regular<T>;
9-
requires std::swappable<T>;
10-
requires std::same_as<typename T::reference, typename T::value_type &>;
11-
requires std::same_as<typename T::const_reference, const typename T::value_type &>;
12-
requires std::forward_iterator<typename T::iterator>;
13-
requires std::forward_iterator<typename T::const_iterator>;
14-
requires std::signed_integral<typename T::difference_type>;
15-
requires std::same_as<typename T::difference_type, typename std::iterator_traits<typename T::iterator>::difference_type>;
16-
requires std::same_as<typename T::difference_type, typename std::iterator_traits<typename T::const_iterator>::difference_type>;
17-
{ a.begin() } -> std::same_as<typename T::iterator>;
18-
{ a.end() } -> std::same_as<typename T::iterator>;
19-
{ b.begin() } -> std::same_as<typename T::const_iterator>;
20-
{ b.end() } -> std::same_as<typename T::const_iterator>;
21-
{ a.cbegin() } -> std::same_as<typename T::const_iterator>;
22-
{ a.cend() } -> std::same_as<typename T::const_iterator>;
23-
{ a.size() } -> std::same_as<typename T::size_type>;
24-
{ a.max_size() } -> std::same_as<typename T::size_type>;
25-
{ a.empty() } -> std::convertible_to<bool>;
26-
};
27-
28-
template <class T>
29-
concept NotContainer = !Container<T>;
4+
#include "Concepts/Concepts.hpp"
305

316
struct empty_type {};
327

0 commit comments

Comments
 (0)