瀏覽代碼

fix: use shared_ptr instead of weird thing

Sam Jaffe 2 年之前
父節點
當前提交
84d6c7f623
共有 1 個文件被更改,包括 5 次插入21 次删除
  1. 5 21
      include/iterator/join_iterator.hpp

+ 5 - 21
include/iterator/join_iterator.hpp

@@ -8,9 +8,9 @@
 #pragma once
 
 #include <iterator>
+#include <memory>
 #include <utility>
 
-#include <iterator/detail/arrow_proxy.h>
 #include <iterator/end_aware_iterator.hpp>
 #include <iterator/facade.h>
 #include <iterator/iterator_fwd.hpp>
@@ -67,21 +67,6 @@ protected:
   iterator(end_aware_iterator<Iter> join) : joiner_(join) {
     update_iterator();
   }
-
-  iterator(iterator const &other) { *this = other; }
-  iterator(iterator &&other) { *this = std::move(other); }
-  
-  iterator &operator=(iterator const &other) {
-    joiner_ = other.joiner_;
-    sync(std::distance(end_aware_iterator(cache_.get()), element_));
-    return *this;
-  }
-  
-  iterator &operator=(iterator &&other) {
-    joiner_ = std::move(joiner_);
-    sync(std::distance(end_aware_iterator(cache_.get()), element_));
-    return *this;
-  }
   
   void update_iterator() {
     while (!joiner_.at_end() && sync().at_end()) {
@@ -90,17 +75,16 @@ protected:
   }
   
 private:
-  end_aware_iterator<iter<inner_t>> const & sync(size_t n = 0) {
+  end_aware_iterator<iter<inner_t>> const & sync() {
     if (joiner_.at_end()) { return element_ = {}; }
-    cache_ = *joiner_;
-    element_ = end_aware_iterator(cache_.get());
-    std::advance(element_, n);
+    cache_ = std::make_shared<inner_t>(*joiner_);
+    element_ = end_aware_iterator(*cache_);
     return element_;
   }
 
 protected:
   end_aware_iterator<Iter> joiner_;
-  detail::value_proxy<decltype(*std::declval<Iter>())> cache_;
+  std::shared_ptr<inner_t> cache_;
   end_aware_iterator<iter<inner_t>> element_;
 };
 }