[Bf-blender-cvs] [6e3e0f8c7fb] soc-2019-fast-io: [Fast import/export] Fixed loose_edge_iterator

Hugo Sales noreply at git.blender.org
Thu Jun 6 15:25:37 CEST 2019


Commit: 6e3e0f8c7fbc96ca03f7521214c38ac56858e046
Author: Hugo Sales
Date:   Mon Jun 3 16:28:44 2019 +0100
Branches: soc-2019-fast-io
https://developer.blender.org/rB6e3e0f8c7fbc96ca03f7521214c38ac56858e046

[Fast import/export] Fixed loose_edge_iterator

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/editors/io/intern/common.hpp

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 2eab3be9bbd..ad82c4ce43e 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 2eab3be9bbdb2d27e36cfde38fdcba5fc264f223
+Subproject commit ad82c4ce43ef2801ef51e75af1f9702992478b02
diff --git a/release/scripts/addons b/release/scripts/addons
index 53e11f6552d..d79fa2c042e 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 53e11f6552dfd2defbf2b5c4fd1621d3dfdb6129
+Subproject commit d79fa2c042e34e1639030b06ff762673a0a68803
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 0409b81f454..4af87c687bc 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 0409b81f45445c2934ad223e430ca7d8970ae5f0
+Subproject commit 4af87c687bc1afa2968f13602897782d5c5d622a
diff --git a/source/blender/editors/io/intern/common.hpp b/source/blender/editors/io/intern/common.hpp
index 814184bb27e..9b7aa398e70 100644
--- a/source/blender/editors/io/intern/common.hpp
+++ b/source/blender/editors/io/intern/common.hpp
@@ -204,16 +204,28 @@ namespace common {
 
 	struct edge_iter : pointer_iterator<MEdge> {
 		edge_iter(const Mesh * const m) : pointer_iterator(m->medge, m->totedge) {}
+		edge_iter(const pointer_iterator<MEdge> &pi) : pointer_iterator(pi) {}
+		edge_iter(pointer_iterator<MEdge> &&pi) : pointer_iterator(pi) {}
 	};
 
-	// TODO someone This can't work. Merge dereference_iterator and pointer_iterator
-	struct loose_edge_iter : edge_iter {
-		using edge_iter::edge_iter;
-		MEdge dereference() {
-			while(this->it->flag & ME_LOOSEEDGE)
-				++this->it;
-			return *(this->it);
+	struct loose_edge_iter : public boost::iterator_adaptor<loose_edge_iter, edge_iter,
+	                                                        MEdge, std::bidirectional_iterator_tag> {
+		explicit loose_edge_iter(const Mesh * const m, const edge_iter &e)
+			: loose_edge_iter::iterator_adaptor_(e), mesh(m) {}
+		explicit loose_edge_iter(const Mesh * const m) : loose_edge_iter(m, edge_iter(m)) {}
+		loose_edge_iter begin() const { return loose_edge_iter(mesh); }
+		loose_edge_iter end()   const { return loose_edge_iter(mesh, this->base().end()); }
+		void increment() {
+			do {
+				++this->base_reference();
+			} while(!(this->base()->flag & ME_LOOSEEDGE));
 		}
+		void decrement() {
+			do {
+				--this->base_reference();
+			} while(!(this->base()->flag & ME_LOOSEEDGE));
+		}
+		const Mesh * const mesh;
 	};
 
 	// TODO someone G.is_break



More information about the Bf-blender-cvs mailing list