Commit 0ad580e8 authored by Dennis Jenkins's avatar Dennis Jenkins

Elminiated the cppcheck findings for include/pistache/optional.h. Had to hack...

Elminiated the cppcheck findings for include/pistache/optional.h.  Had to hack around apparent bug in cppcheck.
parent 3b4f5f14
......@@ -31,6 +31,7 @@ if (PISTACHE_BUILD_TESTS)
list(
APPEND CMAKE_CXX_CPPCHECK
"--enable=all"
"-DCPPCHECK"
"--suppress=*:${PROJECT_SOURCE_DIR}/third-party*"
"--suppress=*:${PROJECT_SOURCE_DIR}/tests*"
)
......
......@@ -26,8 +26,8 @@ namespace types {
public:
template<typename U> friend class Pistache::Optional;
Some(const T &val) : val_(val) { }
Some(T &&val) : val_(std::move(val)) { }
explicit Some(const T &val) : val_(val) { }
explicit Some(T &&val) : val_(std::move(val)) { }
private:
T val_;
......@@ -86,8 +86,15 @@ namespace types {
template <typename... Ts> struct make_void { typedef void type; };
template <typename... Ts> using void_t = typename make_void<Ts...>::type;
// cppcheck 1.88 (and earlier?) are unable to handle the following template.
// cppcheck reports:
// (error) Syntax Error: AST broken, binary operator '>' doesn't have two operands.
// In order to run cppcheck on the rest of this file, we need to cause cppcheck
// to skip the next few lines of code (the code is valid and compiles just fine).
#ifndef CPPCHECK
template <typename, typename = void_t<>>
struct has_equalto_operator : std::false_type {};
#endif
template <typename T>
struct has_equalto_operator<
......@@ -133,12 +140,14 @@ public:
}
template<typename U>
Optional(types::Some<U> some) {
explicit Optional(types::Some<U> some):
none_flag(NoneMarker)
{
static_assert(std::is_same<T, U>::value || std::is_convertible<U, T>::value,
"Types mismatch");
from_some_helper(std::move(some), types::is_move_constructible<U>());
}
Optional(types::None) { none_flag = NoneMarker; }
explicit Optional(types::None) { none_flag = NoneMarker; }
template<typename U>
Optional<T> &operator=(types::Some<U> some) {
......
......@@ -157,9 +157,9 @@ PathGroup::path(const std::string& name, Http::Method method) const {
});
if (it != std::end(group)) {
return Some(*it);
return Optional<Path>(Some(*it));
}
return None();
return Optional<Path>(None());
}
PathGroup::group_iterator
......
......@@ -507,9 +507,9 @@ namespace Uri {
Query::get(const std::string& name) const {
auto it = params.find(name);
if (it == std::end(params))
return None();
return Optional<std::string>(None());
return Some(it->second);
return Optional<std::string>(Some(it->second));
}
std::string
......
......@@ -163,10 +163,10 @@ Optional<Raw>
Collection::tryGetRaw(const std::string& name) const {
auto it = rawHeaders.find(name);
if (it == std::end(rawHeaders)) {
return None();
return Optional<Raw>(None());
}
return Some(it->second);
return Optional<Raw>(Some(it->second));
}
bool
......
......@@ -249,10 +249,10 @@ Optional<std::string>
MediaType::getParam(const std::string& name) const {
auto it = params.find(name);
if (it == std::end(params)) {
return None();
return Optional<std::string>(None());
}
return Some(it->second);
return Optional<std::string>(Some(it->second));
}
void
......
......@@ -100,7 +100,7 @@ TEST(optional, copy_assignment_operator_none) {
Optional<bool> value(Pistache::None());
EXPECT_TRUE(value.isEmpty());
Optional<bool> assigned = Pistache::None();
Optional<bool> assigned = Pistache::Optional<bool>(Pistache::None());
EXPECT_TRUE(assigned.isEmpty());
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment