[Bf-blender-cvs] [e750e0f] particles_refactor: New function for getting a particle iterator at a given index. This will be used for binary search in the particle id attribute layer.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:05:43 CEST 2014


Commit: e750e0fc9364ef4ac0f5b6351265e386a76f28cb
Author: Lukas Tönne
Date:   Sun Dec 15 13:23:21 2013 +0100
https://developer.blender.org/rBe750e0fc9364ef4ac0f5b6351265e386a76f28cb

New function for getting a particle iterator at a given index. This will
be used for binary search in the particle id attribute layer.

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

M	source/blender/blenlib/BLI_pagedbuffer.h
M	source/blender/blenlib/intern/pagedbuffer.c

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

diff --git a/source/blender/blenlib/BLI_pagedbuffer.h b/source/blender/blenlib/BLI_pagedbuffer.h
index 0eb922e..8d91aa3 100644
--- a/source/blender/blenlib/BLI_pagedbuffer.h
+++ b/source/blender/blenlib/BLI_pagedbuffer.h
@@ -56,6 +56,8 @@ void BLI_pbuf_iter_init(struct bPagedBuffer *pbuf, struct bPagedBufferIterator *
 void BLI_pbuf_iter_next(struct bPagedBuffer *pbuf, struct bPagedBufferIterator *iter);
 bool BLI_pbuf_iter_valid(struct bPagedBuffer *pbuf, struct bPagedBufferIterator *iter);
 
+void BLI_pbuf_iter_at(struct bPagedBuffer *pbuf, struct bPagedBufferIterator *iter, int index);
+
 
 #if 0
 /* Buffer Management */
diff --git a/source/blender/blenlib/intern/pagedbuffer.c b/source/blender/blenlib/intern/pagedbuffer.c
index 11369c4..c0d1738 100644
--- a/source/blender/blenlib/intern/pagedbuffer.c
+++ b/source/blender/blenlib/intern/pagedbuffer.c
@@ -194,9 +194,9 @@ void *BLI_pbuf_get(bPagedBuffer *pbuf, int index)
 void BLI_pbuf_iter_init(bPagedBuffer *pbuf, bPagedBufferIterator *iter)
 {
 	iter->index = 0;
+	iter->page = pbuf->pages;
+	iter->page_index = 0;
 	if (pbuf->pages) {
-		iter->page = pbuf->pages;
-		iter->page_index = 0;
 		while (iter->page->data == NULL && iter->index < pbuf->totelem) {
 			iter->index += pbuf->page_size;
 			++iter->page;
@@ -228,6 +228,18 @@ bool BLI_pbuf_iter_valid(bPagedBuffer *pbuf, bPagedBufferIterator *iter)
 	return iter->index < pbuf->totelem;
 }
 
+void BLI_pbuf_iter_at(bPagedBuffer *pbuf, bPagedBufferIterator *iter, int index)
+{
+	div_t page_div = div(index, pbuf->page_size);
+	
+	iter->index = index;
+	iter->page = pbuf->pages + page_div.quot;
+	iter->page_index = page_div.rem;
+	if (iter->page) {
+		iter->data = (char *)iter->page->data + pbuf->elem_bytes * iter->page_index;
+	}
+}
+
 
 #if 0
 /************************************************/




More information about the Bf-blender-cvs mailing list