summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/sbe/expressions/expression.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/sbe/expressions/expression.h')
-rw-r--r--src/mongo/db/exec/sbe/expressions/expression.h46
1 files changed, 12 insertions, 34 deletions
diff --git a/src/mongo/db/exec/sbe/expressions/expression.h b/src/mongo/db/exec/sbe/expressions/expression.h
index d5a2c0fdf0e..2b9032f257b 100644
--- a/src/mongo/db/exec/sbe/expressions/expression.h
+++ b/src/mongo/db/exec/sbe/expressions/expression.h
@@ -348,8 +348,6 @@ private:
std::string toString() const;
};
-using SlotExprPairVector = std::vector<std::pair<value::SlotId, std::unique_ptr<EExpression>>>;
-
template <typename T, typename... Args>
inline std::unique_ptr<EExpression> makeE(Args&&... args) {
return std::make_unique<T>(std::forward<Args>(args)...);
@@ -366,30 +364,20 @@ inline auto makeEs(Ts&&... pack) {
namespace detail {
// base case
-template <typename R>
-inline void makeSlotExprPairHelper(R& result,
- value::SlotId slot,
- std::unique_ptr<EExpression> expr) {
- if constexpr (std::is_same_v<R, value::SlotMap<std::unique_ptr<EExpression>>>) {
- result.emplace(slot, std::move(expr));
- } else {
- result.push_back({slot, std::move(expr)});
- }
+inline void makeEM_unwind(value::SlotMap<std::unique_ptr<EExpression>>& result,
+ value::SlotId slot,
+ std::unique_ptr<EExpression> expr) {
+ result.emplace(slot, std::move(expr));
}
// recursive case
-template <typename R, typename... Ts>
-inline void makeSlotExprPairHelper(R& result,
- value::SlotId slot,
- std::unique_ptr<EExpression> expr,
- Ts&&... rest) {
- if constexpr (std::is_same_v<R, value::SlotMap<std::unique_ptr<EExpression>>>) {
- result.emplace(slot, std::move(expr));
- } else {
- static_assert(std::is_same_v<R, SlotExprPairVector>);
- result.push_back({slot, std::move(expr)});
- }
- makeSlotExprPairHelper(result, std::forward<Ts>(rest)...);
+template <typename... Ts>
+inline void makeEM_unwind(value::SlotMap<std::unique_ptr<EExpression>>& result,
+ value::SlotId slot,
+ std::unique_ptr<EExpression> expr,
+ Ts&&... rest) {
+ result.emplace(slot, std::move(expr));
+ makeEM_unwind(result, std::forward<Ts>(rest)...);
}
} // namespace detail
@@ -398,7 +386,7 @@ auto makeEM(Ts&&... pack) {
value::SlotMap<std::unique_ptr<EExpression>> result;
if constexpr (sizeof...(pack) > 0) {
result.reserve(sizeof...(Ts) / 2);
- detail::makeSlotExprPairHelper(result, std::forward<Ts>(pack)...);
+ detail::makeEM_unwind(result, std::forward<Ts>(pack)...);
}
return result;
}
@@ -411,16 +399,6 @@ auto makeSV(Args&&... args) {
return v;
}
-template <typename... Ts>
-auto makeSlotExprPairVec(Ts&&... pack) {
- SlotExprPairVector v;
- if constexpr (sizeof...(pack) > 0) {
- v.reserve(sizeof...(Ts) / 2);
- detail::makeSlotExprPairHelper(v, std::forward<Ts>(pack)...);
- }
- return v;
-}
-
/**
* This is a constant expression. It assumes the ownership of the input constant.
*/