53425f5faf1f925e7da622906576957d5e0723d7
[blender.git] / intern / cycles / graph / node.h
1 /*
2  * Copyright 2011-2016 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include "graph/node_type.h"
20
21 #include "util/util_map.h"
22 #include "util/util_param.h"
23 #include "util/util_vector.h"
24
25 CCL_NAMESPACE_BEGIN
26
27 struct Node;
28 struct NodeType;
29 struct Transform;
30
31 /* Node */
32
33 struct Node
34 {
35         explicit Node(const NodeType *type, ustring name = ustring());
36         virtual ~Node();
37
38         /* set values */
39         void set(const SocketType& input, bool value);
40         void set(const SocketType& input, int value);
41         void set(const SocketType& input, uint value);
42         void set(const SocketType& input, float value);
43         void set(const SocketType& input, float2 value);
44         void set(const SocketType& input, float3 value);
45         void set(const SocketType& input, const char *value);
46         void set(const SocketType& input, ustring value);
47         void set(const SocketType& input, const Transform& value);
48         void set(const SocketType& input, Node *value);
49
50         /* set array values. the memory from the input array will taken over
51          * by the node and the input array will be empty after return */
52         void set(const SocketType& input, array<bool>& value);
53         void set(const SocketType& input, array<int>& value);
54         void set(const SocketType& input, array<float>& value);
55         void set(const SocketType& input, array<float2>& value);
56         void set(const SocketType& input, array<float3>& value);
57         void set(const SocketType& input, array<ustring>& value);
58         void set(const SocketType& input, array<Transform>& value);
59         void set(const SocketType& input, array<Node*>& value);
60
61         /* get values */
62         bool get_bool(const SocketType& input) const;
63         int get_int(const SocketType& input) const;
64         uint get_uint(const SocketType& input) const;
65         float get_float(const SocketType& input) const;
66         float2 get_float2(const SocketType& input) const;
67         float3 get_float3(const SocketType& input) const;
68         ustring get_string(const SocketType& input) const;
69         Transform get_transform(const SocketType& input) const;
70         Node *get_node(const SocketType& input) const;
71
72         /* get array values */
73         const array<bool>& get_bool_array(const SocketType& input) const;
74         const array<int>& get_int_array(const SocketType& input) const;
75         const array<float>& get_float_array(const SocketType& input) const;
76         const array<float2>& get_float2_array(const SocketType& input) const;
77         const array<float3>& get_float3_array(const SocketType& input) const;
78         const array<ustring>& get_string_array(const SocketType& input) const;
79         const array<Transform>& get_transform_array(const SocketType& input) const;
80         const array<Node*>& get_node_array(const SocketType& input) const;
81
82         /* generic values operations */
83         bool has_default_value(const SocketType& input) const;
84         void set_default_value(const SocketType& input);
85         bool equals_value(const Node& other, const SocketType& input) const;
86         void copy_value(const SocketType& input, const Node& other, const SocketType& other_input);
87
88         /* equals */
89         bool equals(const Node& other) const;
90
91         ustring name;
92         const NodeType *type;
93 };
94
95 CCL_NAMESPACE_END
96