[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55608] trunk/blender/source/blender/ blenkernel: move FOREACH_NODETREE internal checks into functions.
Campbell Barton
ideasman42 at gmail.com
Tue Mar 26 23:37:43 CET 2013
Revision: 55608
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55608
Author: campbellbarton
Date: 2013-03-26 22:37:41 +0000 (Tue, 26 Mar 2013)
Log Message:
-----------
move FOREACH_NODETREE internal checks into functions.
BKE_node_tree_iter_init,step()
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_node.h
trunk/blender/source/blender/blenkernel/intern/node.c
Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h 2013-03-26 21:34:39 UTC (rev 55607)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h 2013-03-26 22:37:41 UTC (rev 55608)
@@ -641,57 +641,33 @@
* FOREACH_NODETREE_END
*/
+/* should be an opaque type, only for internal use by BKE_node_tree_iter_*** */
+struct NodeTreeIterStore {
+ bNodeTree *ngroup;
+ Scene *scene;
+ Material *mat;
+ Tex *tex;
+ Lamp *lamp;
+ World *world;
+};
+
+void BKE_node_tree_iter_init(struct NodeTreeIterStore *ntreeiter, struct Main *bmain);
+bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter,
+ struct bNodeTree **r_nodetree, struct ID **r_id);
+
#define FOREACH_NODETREE(bmain, _nodetree, _id) \
{ \
+ struct NodeTreeIterStore _nstore; \
bNodeTree *_nodetree; \
ID *_id; \
- bNodeTree *_ngroup = bmain->nodetree.first; \
- Scene *_scene = bmain->scene.first; \
- Material *_mat = bmain->mat.first; \
- Tex *_tex = bmain->tex.first; \
- Lamp *_lamp = bmain->lamp.first; \
- World *_world = bmain->world.first; \
/* avoid compiler warning about unused variables */ \
- (void)_id; \
- (void)_nodetree; \
- do { \
- if (_ngroup) { \
- _nodetree = _ngroup; \
- _id = (ID *)_ngroup; \
- _ngroup = _ngroup->id.next; \
- } \
- else if (_scene) { \
- _nodetree = _scene->nodetree; \
- _id = (ID *)_scene; \
- _scene = _scene->id.next; \
- } \
- else if (_mat) { \
- _nodetree = _mat->nodetree; \
- _id = (ID *)_mat; \
- _mat = _mat->id.next; \
- } \
- else if (_tex) { \
- _nodetree = _tex->nodetree; \
- _id = (ID *)_tex; \
- _tex = _tex->id.next; \
- } \
- else if (_lamp) { \
- _nodetree = _lamp->nodetree; \
- _id = (ID *)_lamp; \
- _lamp = _lamp->id.next; \
- } \
- else if (_world) { \
- _nodetree = _world->nodetree; \
- _id = (ID *)_world; \
- _world = _world->id.next; \
- } \
- else \
- break; \
+ BKE_node_tree_iter_init(&_nstore, bmain); \
+ while (BKE_node_tree_iter_step(&_nstore, &_nodetree, &_id) == true) { \
if (_nodetree) {
#define FOREACH_NODETREE_END \
} \
- } while (TRUE); \
+ } \
}
/* ************** SHADER NODES *************** */
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2013-03-26 21:34:39 UTC (rev 55607)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2013-03-26 22:37:41 UTC (rev 55608)
@@ -3593,3 +3593,56 @@
}
}
}
+
+
+/* -------------------------------------------------------------------- */
+/* NodeTree Iterator Helpers (FOREACH_NODETREE) */
+
+void BKE_node_tree_iter_init(struct NodeTreeIterStore *ntreeiter, struct Main *bmain)
+{
+ ntreeiter->ngroup = bmain->nodetree.first;
+ ntreeiter->scene = bmain->scene.first;
+ ntreeiter->mat = bmain->mat.first;
+ ntreeiter->tex = bmain->tex.first;
+ ntreeiter->lamp = bmain->lamp.first;
+ ntreeiter->world = bmain->world.first;
+}
+bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter,
+ bNodeTree **r_nodetree, struct ID **r_id)
+{
+ if (ntreeiter->ngroup) {
+ *r_nodetree = ntreeiter->ngroup;
+ *r_id = (ID *)ntreeiter->ngroup;
+ ntreeiter->ngroup = ntreeiter->ngroup->id.next;
+ }
+ else if (ntreeiter->scene) {
+ *r_nodetree = ntreeiter->scene->nodetree;
+ *r_id = (ID *)ntreeiter->scene;
+ ntreeiter->scene = ntreeiter->scene->id.next;
+ }
+ else if (ntreeiter->mat) {
+ *r_nodetree = ntreeiter->mat->nodetree;
+ *r_id = (ID *)ntreeiter->mat;
+ ntreeiter->mat = ntreeiter->mat->id.next;
+ }
+ else if (ntreeiter->tex) {
+ *r_nodetree = ntreeiter->tex->nodetree;
+ *r_id = (ID *)ntreeiter->tex;
+ ntreeiter->tex = ntreeiter->tex->id.next;
+ }
+ else if (ntreeiter->lamp) {
+ *r_nodetree = ntreeiter->lamp->nodetree;
+ *r_id = (ID *)ntreeiter->lamp;
+ ntreeiter->lamp = ntreeiter->lamp->id.next;
+ }
+ else if (ntreeiter->world) {
+ *r_nodetree = ntreeiter->world->nodetree;
+ *r_id = (ID *)ntreeiter->world;
+ ntreeiter->world = ntreeiter->world->id.next;
+ }
+ else {
+ return false;
+ }
+
+ return true;
+}
More information about the Bf-blender-cvs
mailing list