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) ...@@ -31,6 +31,7 @@ if (PISTACHE_BUILD_TESTS)
list( list(
APPEND CMAKE_CXX_CPPCHECK APPEND CMAKE_CXX_CPPCHECK
"--enable=all" "--enable=all"
"-DCPPCHECK"
"--suppress=*:${PROJECT_SOURCE_DIR}/third-party*" "--suppress=*:${PROJECT_SOURCE_DIR}/third-party*"
"--suppress=*:${PROJECT_SOURCE_DIR}/tests*" "--suppress=*:${PROJECT_SOURCE_DIR}/tests*"
) )
......
...@@ -26,8 +26,8 @@ namespace types { ...@@ -26,8 +26,8 @@ namespace types {
public: public:
template<typename U> friend class Pistache::Optional; template<typename U> friend class Pistache::Optional;
Some(const T &val) : val_(val) { } explicit Some(const T &val) : val_(val) { }
Some(T &&val) : val_(std::move(val)) { } explicit Some(T &&val) : val_(std::move(val)) { }
private: private:
T val_; T val_;
...@@ -86,8 +86,15 @@ namespace types { ...@@ -86,8 +86,15 @@ namespace types {
template <typename... Ts> struct make_void { typedef void type; }; template <typename... Ts> struct make_void { typedef void type; };
template <typename... Ts> using void_t = typename make_void<Ts...>::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<>> template <typename, typename = void_t<>>
struct has_equalto_operator : std::false_type {}; struct has_equalto_operator : std::false_type {};
#endif
template <typename T> template <typename T>
struct has_equalto_operator< struct has_equalto_operator<
...@@ -133,12 +140,14 @@ public: ...@@ -133,12 +140,14 @@ public:
} }
template<typename U> 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, static_assert(std::is_same<T, U>::value || std::is_convertible<U, T>::value,
"Types mismatch"); "Types mismatch");
from_some_helper(std::move(some), types::is_move_constructible<U>()); 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> template<typename U>
Optional<T> &operator=(types::Some<U> some) { Optional<T> &operator=(types::Some<U> some) {
......
...@@ -157,9 +157,9 @@ PathGroup::path(const std::string& name, Http::Method method) const { ...@@ -157,9 +157,9 @@ PathGroup::path(const std::string& name, Http::Method method) const {
}); });
if (it != std::end(group)) { if (it != std::end(group)) {
return Some(*it); return Optional<Path>(Some(*it));
} }
return None(); return Optional<Path>(None());
} }
PathGroup::group_iterator PathGroup::group_iterator
......
...@@ -507,9 +507,9 @@ namespace Uri { ...@@ -507,9 +507,9 @@ namespace Uri {
Query::get(const std::string& name) const { Query::get(const std::string& name) const {
auto it = params.find(name); auto it = params.find(name);
if (it == std::end(params)) 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 std::string
......
...@@ -163,10 +163,10 @@ Optional<Raw> ...@@ -163,10 +163,10 @@ Optional<Raw>
Collection::tryGetRaw(const std::string& name) const { Collection::tryGetRaw(const std::string& name) const {
auto it = rawHeaders.find(name); auto it = rawHeaders.find(name);
if (it == std::end(rawHeaders)) { if (it == std::end(rawHeaders)) {
return None(); return Optional<Raw>(None());
} }
return Some(it->second); return Optional<Raw>(Some(it->second));
} }
bool bool
......
...@@ -249,10 +249,10 @@ Optional<std::string> ...@@ -249,10 +249,10 @@ Optional<std::string>
MediaType::getParam(const std::string& name) const { MediaType::getParam(const std::string& name) const {
auto it = params.find(name); auto it = params.find(name);
if (it == std::end(params)) { if (it == std::end(params)) {
return None(); return Optional<std::string>(None());
} }
return Some(it->second); return Optional<std::string>(Some(it->second));
} }
void void
......
...@@ -100,7 +100,7 @@ TEST(optional, copy_assignment_operator_none) { ...@@ -100,7 +100,7 @@ TEST(optional, copy_assignment_operator_none) {
Optional<bool> value(Pistache::None()); Optional<bool> value(Pistache::None());
EXPECT_TRUE(value.isEmpty()); EXPECT_TRUE(value.isEmpty());
Optional<bool> assigned = Pistache::None(); Optional<bool> assigned = Pistache::Optional<bool>(Pistache::None());
EXPECT_TRUE(assigned.isEmpty()); 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