diff --git a/src/context/ExecutionContext.cpp b/src/context/ExecutionContext.cpp
index 04936ec547de23b4b75fe4880b4273055a2b25b8..54df3480f56c4c76170ab945d9608945a00c25dc 100644
--- a/src/context/ExecutionContext.cpp
+++ b/src/context/ExecutionContext.cpp
@@ -64,29 +64,28 @@ const Result& ExecutionContext::getResult(const std::string& name) const {
if (it != valueMap_.end() && !it->second.empty()) {
return it->second.back();
} else {
- return Result::kEmptyResult;
+ return Result::EmptyResult();
}
}
-const Result& ExecutionContext::getVersionedResult(const std::string& name,
- int64_t version) const {
+const Result& ExecutionContext::getVersionedResult(const std::string& name, int64_t version) const {
auto& result = getHistory(name);
auto size = result.size();
if (static_cast<size_t>(std::abs(version)) >= size) {
- return Result::kEmptyResult;
+ return Result::EmptyResult();
} else {
- return result[(size + version - 1) % size ];
+ return result[(size + version - 1) % size];
}
}
-const std::vector<Result>& ExecutionContext::getHistory(
- const std::string& name) const {
+const std::vector<Result>& ExecutionContext::getHistory(const std::string& name) const {
auto it = valueMap_.find(name);
if (it != valueMap_.end()) {
return it->second;
} else {
- return Result::kEmptyResultList;
+ return Result::EmptyResultList();
}
}
+
} // namespace graph
} // namespace nebula
diff --git a/src/context/Result.cpp b/src/context/Result.cpp
index c40cbc2e08702c94f7346c380f8a05282c7efad0..702a2c9128981bc92de1e9fe15cfc52db892dbf7 100644
--- a/src/context/Result.cpp
+++ b/src/context/Result.cpp
@@ -9,9 +9,32 @@
namespace nebula {
namespace graph {
-const Result Result::kEmptyResult = ResultBuilder().iter(Iterator::Kind::kDefault).finish();
+const Result& Result::EmptyResult() {
+ static Result kEmptyResult = ResultBuilder().iter(Iterator::Kind::kDefault).finish();
+ return kEmptyResult;
+}
-const std::vector<Result> Result::kEmptyResultList;
+const std::vector<Result>& Result::EmptyResultList() {
+ static std::vector<Result> kEmptyResultList;
+ return kEmptyResultList;
+}
+
+ResultBuilder& ResultBuilder::iter(Iterator::Kind kind) {
+ DCHECK(kind == Iterator::Kind::kDefault || core_.value)
+ << "Must set value when creating non-default iterator";
+ switch (kind) {
+ case Iterator::Kind::kDefault:
+ return iter(std::make_unique<DefaultIter>(core_.value));
+ case Iterator::Kind::kSequential:
+ return iter(std::make_unique<SequentialIter>(core_.value));
+ case Iterator::Kind::kGetNeighbors:
+ return iter(std::make_unique<GetNeighborsIter>(core_.value));
+ case Iterator::Kind::kProp:
+ return iter(std::make_unique<PropIter>(core_.value));
+ default:
+ LOG(FATAL) << "Invalid Iterator kind" << static_cast<uint8_t>(kind);
+ }
+}
} // namespace graph
} // namespace nebula
diff --git a/src/context/Result.h b/src/context/Result.h
index 48ee72746b8310433a015ec6b1656e8e8fa092df..ff60738ed9a23469356addb4933a694bf095344d 100644
--- a/src/context/Result.h
+++ b/src/context/Result.h
@@ -21,15 +21,15 @@ class ResultBuilder;
// An executor will produce a result.
class Result final {
public:
- static const Result kEmptyResult;
- static const std::vector<Result> kEmptyResultList;
-
enum class State : uint8_t {
kUnExecuted,
kPartialSuccess,
kSuccess,
};
+ static const Result& EmptyResult();
+ static const std::vector<Result>& EmptyResultList();
+
std::shared_ptr<Value> valuePtr() const {
return core_.value;
}
@@ -98,22 +98,7 @@ public:
return *this;
}
- ResultBuilder& iter(Iterator::Kind kind) {
- DCHECK(kind == Iterator::Kind::kDefault || core_.value)
- << "Must set value when creating non-default iterator";
- switch (kind) {
- case Iterator::Kind::kDefault:
- return iter(std::make_unique<DefaultIter>(core_.value));
- case Iterator::Kind::kSequential:
- return iter(std::make_unique<SequentialIter>(core_.value));
- case Iterator::Kind::kGetNeighbors:
- return iter(std::make_unique<GetNeighborsIter>(core_.value));
- case Iterator::Kind::kProp:
- return iter(std::make_unique<PropIter>(core_.value));
- default:
- LOG(FATAL) << "Invalid Iterator kind" << static_cast<uint8_t>(kind);
- }
- }
+ ResultBuilder& iter(Iterator::Kind kind);
ResultBuilder& state(Result::State state) {
core_.state = state;