[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