fix logic error
diff --git a/lib/cpp/src/thrift/Thrift.h b/lib/cpp/src/thrift/Thrift.h
index f3fe708..3a1c5cc 100644
--- a/lib/cpp/src/thrift/Thrift.h
+++ b/lib/cpp/src/thrift/Thrift.h
@@ -59,11 +59,15 @@
int operator++() { return ++ii_; }
bool operator==(const TEnumIterator& rhs) const {
- return ii_ == rhs.ii_ && n_ == rhs.n_;
+ bool is_end = ii_ == n_ || n_ == -1;
+ bool is_rhs_end = rhs.ii_ == rhs.n_ || rhs.n_ == -1;
+ return (ii_ == rhs.ii_ && n_ == rhs.n_) || (is_end && is_rhs_end);
}
bool operator!=(const TEnumIterator& rhs) const {
- return ii_ != rhs.ii_ || n_ != rhs.n_;
+ bool is_end = ii_ == n_ || n_ == -1;
+ bool is_rhs_end = rhs.ii_ == rhs.n_ || rhs.n_ == -1;
+ return (ii_ != rhs.ii_ || n_ != rhs.n_) && (!is_end || !is_rhs_end);
}
std::pair<int, const char*> operator*() const { return std::make_pair(enums_[ii_], names_[ii_]); }