You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by hu...@apache.org on 2024/01/26 03:17:41 UTC
(kvrocks) branch unstable updated: Refine ctor definition of CommandParser (#2044)
This is an automated email from the ASF dual-hosted git repository.
hulk pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new 4bb6954c Refine ctor definition of CommandParser (#2044)
4bb6954c is described below
commit 4bb6954c837cfac605ce8ed77ab77b868432fa7b
Author: Twice <tw...@gmail.com>
AuthorDate: Fri Jan 26 12:17:36 2024 +0900
Refine ctor definition of CommandParser (#2044)
---
src/commands/command_parser.h | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/commands/command_parser.h b/src/commands/command_parser.h
index 3aa31ae0..c13d682b 100644
--- a/src/commands/command_parser.h
+++ b/src/commands/command_parser.h
@@ -24,10 +24,12 @@
#include <cctype>
#include <functional>
#include <iterator>
+#include <type_traits>
#include "parse_util.h"
#include "status.h"
#include "string_util.h"
+#include "type_util.h"
template <typename Iter>
struct MoveIterator : Iter {
@@ -46,17 +48,29 @@ struct CommandParser {
CommandParser(Iter begin, Iter end) : begin_(std::move(begin)), end_(std::move(end)) {}
- template <typename Container>
- explicit CommandParser(const Container& con, size_t skip_num = 0) : CommandParser(std::begin(con), std::end(con)) {
+ template <typename Container, std::enable_if_t<std::is_lvalue_reference_v<Container> &&
+ !std::is_same_v<RemoveCVRef<Container>, CommandParser>,
+ int> = 0>
+ explicit CommandParser(Container&& con, size_t skip_num = 0) : CommandParser(std::begin(con), std::end(con)) {
std::advance(begin_, skip_num);
}
- template <typename Container>
+ template <typename Container, std::enable_if_t<!std::is_lvalue_reference_v<Container> &&
+ !std::is_same_v<RemoveCVRef<Container>, CommandParser>,
+ int> = 0>
explicit CommandParser(Container&& con, size_t skip_num = 0)
: CommandParser(MoveIterator(std::begin(con)), MoveIterator(std::end(con))) {
std::advance(begin_, skip_num);
}
+ CommandParser(const CommandParser&) = default;
+ CommandParser(CommandParser&&) noexcept = default;
+
+ CommandParser& operator=(const CommandParser&) = default;
+ CommandParser& operator=(CommandParser&&) noexcept = default;
+
+ ~CommandParser() = default;
+
decltype(auto) RawPeek() const { return *begin_; }
decltype(auto) operator[](size_t index) const {