Cleanup: remove non-existing function declarations
[blender.git] / source / blender / compositor / intern / COM_NodeGraph.h
1 /*
2  * Copyright 2013, Blender Foundation.
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  * Contributor:
19  *      Lukas Toenne
20  */
21
22 #ifndef __COM_NODEGRAPH_H__
23 #define __COM_NODEGRAPH_H__
24
25 #include <map>
26 #include <set>
27 #include <vector>
28
29 extern "C" {
30 #include "DNA_node_types.h"
31 }
32
33 #ifdef WITH_CXX_GUARDEDALLOC
34 #  include "MEM_guardedalloc.h"
35 #endif
36
37 class CompositorContext;
38 class Node;
39 class NodeInput;
40 class NodeOutput;
41
42 /** Internal representation of DNA node data.
43  *  This structure is converted into operations by \a NodeCompiler.
44  */
45 class NodeGraph {
46 public:
47         class Link {
48         private:
49                 NodeOutput *m_from;
50                 NodeInput *m_to;
51
52         public:
53                 Link(NodeOutput *from, NodeInput *to) :
54                     m_from(from),
55                     m_to(to)
56                 {}
57
58                 NodeOutput *getFromSocket() const { return m_from; }
59                 NodeInput *getToSocket() const { return m_to; }
60         };
61
62         typedef std::vector<Node *> Nodes;
63         typedef Nodes::iterator NodeIterator;
64         typedef std::vector<Link> Links;
65
66 private:
67         Nodes m_nodes;
68         Links m_links;
69
70 public:
71         NodeGraph();
72         ~NodeGraph();
73
74         const Nodes &nodes() const { return m_nodes; }
75         const Links &links() const { return m_links; }
76
77         void from_bNodeTree(const CompositorContext &context, bNodeTree *tree);
78
79 protected:
80         typedef std::pair<NodeIterator, NodeIterator> NodeRange;
81         typedef std::vector<NodeInput *> NodeInputs;
82
83         static bNodeSocket *find_b_node_input(bNode *b_node, const char *identifier);
84         static bNodeSocket *find_b_node_output(bNode *b_node, const char *identifier);
85
86         void add_node(Node *node, bNodeTree *b_ntree, bNodeInstanceKey key, bool is_active_group);
87         void add_link(NodeOutput *fromSocket, NodeInput *toSocket);
88
89         void add_bNodeTree(const CompositorContext &context, int nodes_start, bNodeTree *tree, bNodeInstanceKey parent_key);
90
91         void add_bNode(const CompositorContext &context, bNodeTree *b_ntree, bNode *b_node, bNodeInstanceKey key, bool is_active_group);
92
93         NodeInputs find_inputs(const NodeRange &node_range, bNodeSocket *b_socket);
94         NodeOutput *find_output(const NodeRange &node_range, bNodeSocket *b_socket);
95         void add_bNodeLink(const NodeRange &node_range, bNodeLink *bNodeLink);
96
97         /* **** Special proxy node type conversions **** */
98         /* These nodes are not represented in the node graph themselves,
99          * but converted into a number of proxy links
100          */
101
102         void add_proxies_mute(bNodeTree *b_ntree, bNode *b_node, bNodeInstanceKey key, bool is_active_group);
103         void add_proxies_skip(bNodeTree *b_ntree, bNode *b_node, bNodeInstanceKey key, bool is_active_group);
104
105         void add_proxies_group_inputs(bNode *b_node, bNode *b_node_io);
106         void add_proxies_group_outputs(bNode *b_node, bNode *b_node_io, bool use_buffer);
107         void add_proxies_group(const CompositorContext &context, bNode *b_node, bNodeInstanceKey key);
108
109         void add_proxies_reroute(bNodeTree *b_ntree, bNode *b_node, bNodeInstanceKey key, bool is_active_group);
110
111 #ifdef WITH_CXX_GUARDEDALLOC
112         MEM_CXX_CLASS_ALLOC_FUNCS("COM:NodeGraph")
113 #endif
114 };
115
116 #endif /* __COM_NODEGRAPH_H__ */