code cleanup: unused functions
[blender.git] / source / blender / blenkernel / depsgraph_private.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2004 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): none yet.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file blender/blenkernel/depsgraph_private.h
27  *  \ingroup bke
28  */
29
30 #ifndef __DEPSGRAPH_PRIVATE_H__
31 #define __DEPSGRAPH_PRIVATE_H__
32
33 #include "BKE_depsgraph.h"
34 #include "DNA_constraint_types.h"
35 #include "BKE_constraint.h"
36
37 /* **** DAG relation types *** */
38
39 /* scene link to object */
40 #define DAG_RL_SCENE        (1 << 0)
41 /* object link to data */
42 #define DAG_RL_DATA         (1 << 1)
43
44 /* object changes object (parent, track, constraints) */
45 #define DAG_RL_OB_OB        (1 << 2)
46 /* object changes obdata (hooks, constraints) */
47 #define DAG_RL_OB_DATA      (1 << 3)
48 /* data changes object (vertex parent) */
49 #define DAG_RL_DATA_OB      (1 << 4)
50 /* data changes data (deformers) */
51 #define DAG_RL_DATA_DATA    (1 << 5)
52
53 #define DAG_NO_RELATION     (1 << 6)
54
55 #define DAG_RL_ALL_BUT_DATA (DAG_RL_SCENE | DAG_RL_OB_OB | DAG_RL_OB_DATA | DAG_RL_DATA_OB | DAG_RL_DATA_DATA)
56 #define DAG_RL_ALL          (DAG_RL_ALL_BUT_DATA | DAG_RL_DATA)
57
58
59 #define DAGQUEUEALLOC 50
60
61 enum {
62         DAG_WHITE = 0,
63         DAG_GRAY = 1,
64         DAG_BLACK = 2
65 };
66
67 typedef struct DagAdjList {
68         struct DagNode *node;
69         short type;
70         int count;  /* number of identical arcs */
71         unsigned int lay;   // for flushing redraw/rebuild events
72         const char *name;
73         struct DagAdjList *next;
74 } DagAdjList;
75
76
77 typedef struct DagNode {
78         int color;
79         short type;
80         float x, y, k;
81         void *ob;
82         void *first_ancestor;
83         int ancestor_count;
84         unsigned int lay;               /* accumulated layers of its relations + itself */
85         unsigned int scelay;            /* layers due to being in scene */
86         uint64_t customdata_mask;       /* customdata mask */
87         int lasttime;       /* if lasttime != DagForest->time, this node was not evaluated yet for flushing */
88         int BFS_dist;       /* BFS distance */
89         int DFS_dist;       /* DFS distance */
90         int DFS_dvtm;       /* DFS discovery time */
91         int DFS_fntm;       /* DFS Finishing time */
92         struct DagAdjList *child;
93         struct DagAdjList *parent;
94         struct DagNode *next;
95 } DagNode;
96
97 typedef struct DagNodeQueueElem {
98         struct DagNode *node;
99         struct DagNodeQueueElem *next;
100 } DagNodeQueueElem;
101
102 typedef struct DagNodeQueue {
103         DagNodeQueueElem *first;
104         DagNodeQueueElem *last;
105         int count;
106         int maxlevel;
107         struct DagNodeQueue *freenodes;
108 } DagNodeQueue;
109
110 // forest as we may have more than one DAG unnconected
111 typedef struct DagForest {
112         ListBase DagNode;
113         struct GHash *nodeHash;
114         int numNodes;
115         int is_acyclic;
116         int time;  /* for flushing/tagging, compare with node->lasttime */
117 } DagForest;
118
119
120 // queue operations
121 DagNodeQueue *queue_create(int slots);
122 void queue_raz(DagNodeQueue *queue);
123 void push_queue(DagNodeQueue *queue, DagNode *node);
124 void push_stack(DagNodeQueue *queue, DagNode *node);
125 DagNode *pop_queue(DagNodeQueue *queue);
126 DagNode *get_top_node_queue(DagNodeQueue *queue);
127 void queue_delete(DagNodeQueue *queue);
128
129 // Dag management
130 DagForest *dag_init(void);
131 DagForest *build_dag(struct Main *bmain, struct Scene *sce, short mask);
132 void free_forest(struct DagForest *Dag);
133 DagNode *dag_find_node(DagForest *forest, void *fob);
134 DagNode *dag_add_node(DagForest *forest, void *fob);
135 DagNode *dag_get_node(DagForest *forest, void *fob);
136 DagNode *dag_get_sub_node(DagForest *forest, void *fob);
137 void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, const char *name);
138
139 void graph_print_queue(DagNodeQueue *nqueue);
140 void graph_print_queue_dist(DagNodeQueue *nqueue);
141 void graph_print_adj_list(DagForest *dag);
142
143 #endif /* __DEPSGRAPH_PRIVATE_H__ */