initial commit, copy everything to new repository

This commit is contained in:
ado
2020-12-10 19:26:56 +01:00
parent 2c0a35acf9
commit 9d45ff7b62
12 changed files with 8334 additions and 0 deletions

100
include/ss/restrictions.hpp Normal file
View File

@@ -0,0 +1,100 @@
#pragma once
namespace ss {
////////////////
// all except
////////////////
template <typename T, auto... Values>
struct ax {
private:
template <auto X, auto... Xs>
bool ss_valid_impl(const T& x) const {
if constexpr (sizeof...(Xs) != 0) {
return x != X && ss_valid_impl<Xs...>(x);
}
return x != X;
}
public:
bool ss_valid(const T& value) const {
return ss_valid_impl<Values...>(value);
}
const char* error() const {
return "value excluded";
}
};
////////////////
// none except
////////////////
template <typename T, auto... Values>
struct nx {
private:
template <auto X, auto... Xs>
bool ss_valid_impl(const T& x) const {
if constexpr (sizeof...(Xs) != 0) {
return x == X || ss_valid_impl<Xs...>(x);
}
return x == X;
}
public:
bool ss_valid(const T& value) const {
return ss_valid_impl<Values...>(value);
}
const char* error() const {
return "value excluded";
}
};
////////////////
// in range
////////////////
template <typename T, auto Min, auto Max>
struct ir {
bool ss_valid(const T& value) const {
return value >= Min && value <= Max;
}
const char* error() const {
return "out of range";
}
};
////////////////
// out of range
////////////////
template <typename T, auto Min, auto Max>
struct oor {
bool ss_valid(const T& value) const {
return value < Min || value > Max;
}
const char* error() const {
return "in restricted range";
}
};
////////////////
// non empty
////////////////
template <typename T>
struct ne {
bool ss_valid(const T& value) const {
return !value.empty();
}
const char* error() const {
return "empty field";
}
};
} /* ss */