Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/graph/node.cpp')
-rw-r--r--intern/cycles/graph/node.cpp817
1 files changed, 456 insertions, 361 deletions
diff --git a/intern/cycles/graph/node.cpp b/intern/cycles/graph/node.cpp
index 19fe0a168ea..fc7daaeeaa6 100644
--- a/intern/cycles/graph/node.cpp
+++ b/intern/cycles/graph/node.cpp
@@ -26,550 +26,645 @@ CCL_NAMESPACE_BEGIN
/* Node Type */
-Node::Node(const NodeType *type_, ustring name_)
-: name(name_), type(type_)
+Node::Node(const NodeType *type_, ustring name_) : name(name_), type(type_)
{
- assert(type);
+ assert(type);
- /* assign non-empty name, convenient for debugging */
- if(name.empty()) {
- name = type->name;
- }
+ /* assign non-empty name, convenient for debugging */
+ if (name.empty()) {
+ name = type->name;
+ }
- /* initialize default values */
- foreach(const SocketType& socket, type->inputs) {
- set_default_value(socket);
- }
+ /* initialize default values */
+ foreach (const SocketType &socket, type->inputs) {
+ set_default_value(socket);
+ }
}
Node::~Node()
{
}
-template<typename T>
-static T& get_socket_value(const Node *node, const SocketType& socket)
+template<typename T> static T &get_socket_value(const Node *node, const SocketType &socket)
{
- return (T&)*(((char*)node) + socket.struct_offset);
+ return (T &)*(((char *)node) + socket.struct_offset);
}
#ifndef NDEBUG
-static bool is_socket_float3(const SocketType& socket)
+static bool is_socket_float3(const SocketType &socket)
{
- return socket.type == SocketType::COLOR ||
- socket.type == SocketType::POINT ||
- socket.type == SocketType::VECTOR ||
- socket.type == SocketType::NORMAL;
+ return socket.type == SocketType::COLOR || socket.type == SocketType::POINT ||
+ socket.type == SocketType::VECTOR || socket.type == SocketType::NORMAL;
}
-static bool is_socket_array_float3(const SocketType& socket)
+static bool is_socket_array_float3(const SocketType &socket)
{
- return socket.type == SocketType::COLOR_ARRAY ||
- socket.type == SocketType::POINT_ARRAY ||
- socket.type == SocketType::VECTOR_ARRAY ||
- socket.type == SocketType::NORMAL_ARRAY;
+ return socket.type == SocketType::COLOR_ARRAY || socket.type == SocketType::POINT_ARRAY ||
+ socket.type == SocketType::VECTOR_ARRAY || socket.type == SocketType::NORMAL_ARRAY;
}
#endif
/* set values */
-void Node::set(const SocketType& input, bool value)
+void Node::set(const SocketType &input, bool value)
{
- assert(input.type == SocketType::BOOLEAN);
- get_socket_value<bool>(this, input) = value;
+ assert(input.type == SocketType::BOOLEAN);
+ get_socket_value<bool>(this, input) = value;
}
-void Node::set(const SocketType& input, int value)
+void Node::set(const SocketType &input, int value)
{
- assert((input.type == SocketType::INT || input.type == SocketType::ENUM));
- get_socket_value<int>(this, input) = value;
+ assert((input.type == SocketType::INT || input.type == SocketType::ENUM));
+ get_socket_value<int>(this, input) = value;
}
-void Node::set(const SocketType& input, uint value)
+void Node::set(const SocketType &input, uint value)
{
- assert(input.type == SocketType::UINT);
- get_socket_value<uint>(this, input) = value;
+ assert(input.type == SocketType::UINT);
+ get_socket_value<uint>(this, input) = value;
}
-void Node::set(const SocketType& input, float value)
+void Node::set(const SocketType &input, float value)
{
- assert(input.type == SocketType::FLOAT);
- get_socket_value<float>(this, input) = value;
+ assert(input.type == SocketType::FLOAT);
+ get_socket_value<float>(this, input) = value;
}
-void Node::set(const SocketType& input, float2 value)
+void Node::set(const SocketType &input, float2 value)
{
- assert(input.type == SocketType::FLOAT);
- get_socket_value<float2>(this, input) = value;
+ assert(input.type == SocketType::FLOAT);
+ get_socket_value<float2>(this, input) = value;
}
-void Node::set(const SocketType& input, float3 value)
+void Node::set(const SocketType &input, float3 value)
{
- assert(is_socket_float3(input));
- get_socket_value<float3>(this, input) = value;
+ assert(is_socket_float3(input));
+ get_socket_value<float3>(this, input) = value;
}
-void Node::set(const SocketType& input, const char *value)
+void Node::set(const SocketType &input, const char *value)
{
- set(input, ustring(value));
+ set(input, ustring(value));
}
-void Node::set(const SocketType& input, ustring value)
+void Node::set(const SocketType &input, ustring value)
{
- if(input.type == SocketType::STRING) {
- get_socket_value<ustring>(this, input) = value;
- }
- else if(input.type == SocketType::ENUM) {
- const NodeEnum& enm = *input.enum_values;
- if(enm.exists(value)) {
- get_socket_value<int>(this, input) = enm[value];
- }
- else {
- assert(0);
- }
- }
- else {
- assert(0);
- }
+ if (input.type == SocketType::STRING) {
+ get_socket_value<ustring>(this, input) = value;
+ }
+ else if (input.type == SocketType::ENUM) {
+ const NodeEnum &enm = *input.enum_values;
+ if (enm.exists(value)) {
+ get_socket_value<int>(this, input) = enm[value];
+ }
+ else {
+ assert(0);
+ }
+ }
+ else {
+ assert(0);
+ }
}
-void Node::set(const SocketType& input, const Transform& value)
+void Node::set(const SocketType &input, const Transform &value)
{
- assert(input.type == SocketType::TRANSFORM);
- get_socket_value<Transform>(this, input) = value;
+ assert(input.type == SocketType::TRANSFORM);
+ get_socket_value<Transform>(this, input) = value;
}
-void Node::set(const SocketType& input, Node *value)
+void Node::set(const SocketType &input, Node *value)
{
- assert(input.type == SocketType::TRANSFORM);
- get_socket_value<Node*>(this, input) = value;
+ assert(input.type == SocketType::TRANSFORM);
+ get_socket_value<Node *>(this, input) = value;
}
/* set array values */
-void Node::set(const SocketType& input, array<bool>& value)
+void Node::set(const SocketType &input, array<bool> &value)
{
- assert(input.type == SocketType::BOOLEAN_ARRAY);
- get_socket_value<array<bool> >(this, input).steal_data(value);
+ assert(input.type == SocketType::BOOLEAN_ARRAY);
+ get_socket_value<array<bool>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<int>& value)
+void Node::set(const SocketType &input, array<int> &value)
{
- assert(input.type == SocketType::INT_ARRAY);
- get_socket_value<array<int> >(this, input).steal_data(value);
+ assert(input.type == SocketType::INT_ARRAY);
+ get_socket_value<array<int>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<float>& value)
+void Node::set(const SocketType &input, array<float> &value)
{
- assert(input.type == SocketType::FLOAT_ARRAY);
- get_socket_value<array<float> >(this, input).steal_data(value);
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ get_socket_value<array<float>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<float2>& value)
+void Node::set(const SocketType &input, array<float2> &value)
{
- assert(input.type == SocketType::FLOAT_ARRAY);
- get_socket_value<array<float2> >(this, input).steal_data(value);
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ get_socket_value<array<float2>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<float3>& value)
+void Node::set(const SocketType &input, array<float3> &value)
{
- assert(is_socket_array_float3(input));
- get_socket_value<array<float3> >(this, input).steal_data(value);
+ assert(is_socket_array_float3(input));
+ get_socket_value<array<float3>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<ustring>& value)
+void Node::set(const SocketType &input, array<ustring> &value)
{
- assert(input.type == SocketType::STRING_ARRAY);
- get_socket_value<array<ustring> >(this, input).steal_data(value);
+ assert(input.type == SocketType::STRING_ARRAY);
+ get_socket_value<array<ustring>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<Transform>& value)
+void Node::set(const SocketType &input, array<Transform> &value)
{
- assert(input.type == SocketType::TRANSFORM_ARRAY);
- get_socket_value<array<Transform> >(this, input).steal_data(value);
+ assert(input.type == SocketType::TRANSFORM_ARRAY);
+ get_socket_value<array<Transform>>(this, input).steal_data(value);
}
-void Node::set(const SocketType& input, array<Node*>& value)
+void Node::set(const SocketType &input, array<Node *> &value)
{
- assert(input.type == SocketType::TRANSFORM_ARRAY);
- get_socket_value<array<Node*> >(this, input).steal_data(value);
+ assert(input.type == SocketType::TRANSFORM_ARRAY);
+ get_socket_value<array<Node *>>(this, input).steal_data(value);
}
/* get values */
-bool Node::get_bool(const SocketType& input) const
+bool Node::get_bool(const SocketType &input) const
{
- assert(input.type == SocketType::BOOLEAN);
- return get_socket_value<bool>(this, input);
+ assert(input.type == SocketType::BOOLEAN);
+ return get_socket_value<bool>(this, input);
}
-int Node::get_int(const SocketType& input) const
+int Node::get_int(const SocketType &input) const
{
- assert(input.type == SocketType::INT || input.type == SocketType::ENUM);
- return get_socket_value<int>(this, input);
+ assert(input.type == SocketType::INT || input.type == SocketType::ENUM);
+ return get_socket_value<int>(this, input);
}
-uint Node::get_uint(const SocketType& input) const
+uint Node::get_uint(const SocketType &input) const
{
- assert(input.type == SocketType::UINT);
- return get_socket_value<uint>(this, input);
+ assert(input.type == SocketType::UINT);
+ return get_socket_value<uint>(this, input);
}
-float Node::get_float(const SocketType& input) const
+float Node::get_float(const SocketType &input) const
{
- assert(input.type == SocketType::FLOAT);
- return get_socket_value<float>(this, input);
+ assert(input.type == SocketType::FLOAT);
+ return get_socket_value<float>(this, input);
}
-float2 Node::get_float2(const SocketType& input) const
+float2 Node::get_float2(const SocketType &input) const
{
- assert(input.type == SocketType::FLOAT);
- return get_socket_value<float2>(this, input);
+ assert(input.type == SocketType::FLOAT);
+ return get_socket_value<float2>(this, input);
}
-float3 Node::get_float3(const SocketType& input) const
+float3 Node::get_float3(const SocketType &input) const
{
- assert(is_socket_float3(input));
- return get_socket_value<float3>(this, input);
+ assert(is_socket_float3(input));
+ return get_socket_value<float3>(this, input);
}
-ustring Node::get_string(const SocketType& input) const
+ustring Node::get_string(const SocketType &input) const
{
- if(input.type == SocketType::STRING) {
- return get_socket_value<ustring>(this, input);
- }
- else if(input.type == SocketType::ENUM) {
- const NodeEnum& enm = *input.enum_values;
- int intvalue = get_socket_value<int>(this, input);
- return (enm.exists(intvalue)) ? enm[intvalue] : ustring();
- }
- else {
- assert(0);
- return ustring();
- }
+ if (input.type == SocketType::STRING) {
+ return get_socket_value<ustring>(this, input);
+ }
+ else if (input.type == SocketType::ENUM) {
+ const NodeEnum &enm = *input.enum_values;
+ int intvalue = get_socket_value<int>(this, input);
+ return (enm.exists(intvalue)) ? enm[intvalue] : ustring();
+ }
+ else {
+ assert(0);
+ return ustring();
+ }
}
-Transform Node::get_transform(const SocketType& input) const
+Transform Node::get_transform(const SocketType &input) const
{
- assert(input.type == SocketType::TRANSFORM);
- return get_socket_value<Transform>(this, input);
+ assert(input.type == SocketType::TRANSFORM);
+ return get_socket_value<Transform>(this, input);
}
-Node *Node::get_node(const SocketType& input) const
+Node *Node::get_node(const SocketType &input) const
{
- assert(input.type == SocketType::NODE);
- return get_socket_value<Node*>(this, input);
+ assert(input.type == SocketType::NODE);
+ return get_socket_value<Node *>(this, input);
}
/* get array values */
-const array<bool>& Node::get_bool_array(const SocketType& input) const
+const array<bool> &Node::get_bool_array(const SocketType &input) const
{
- assert(input.type == SocketType::BOOLEAN_ARRAY);
- return get_socket_value<array<bool> >(this, input);
+ assert(input.type == SocketType::BOOLEAN_ARRAY);
+ return get_socket_value<array<bool>>(this, input);
}
-const array<int>& Node::get_int_array(const SocketType& input) const
+const array<int> &Node::get_int_array(const SocketType &input) const
{
- assert(input.type == SocketType::INT_ARRAY);
- return get_socket_value<array<int> >(this, input);
+ assert(input.type == SocketType::INT_ARRAY);
+ return get_socket_value<array<int>>(this, input);
}
-const array<float>& Node::get_float_array(const SocketType& input) const
+const array<float> &Node::get_float_array(const SocketType &input) const
{
- assert(input.type == SocketType::FLOAT_ARRAY);
- return get_socket_value<array<float> >(this, input);
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ return get_socket_value<array<float>>(this, input);
}
-const array<float2>& Node::get_float2_array(const SocketType& input) const
+const array<float2> &Node::get_float2_array(const SocketType &input) const
{
- assert(input.type == SocketType::FLOAT_ARRAY);
- return get_socket_value<array<float2> >(this, input);
+ assert(input.type == SocketType::FLOAT_ARRAY);
+ return get_socket_value<array<float2>>(this, input);
}
-const array<float3>& Node::get_float3_array(const SocketType& input) const
+const array<float3> &Node::get_float3_array(const SocketType &input) const
{
- assert(is_socket_array_float3(input));
- return get_socket_value<array<float3> >(this, input);
+ assert(is_socket_array_float3(input));
+ return get_socket_value<array<float3>>(this, input);
}
-const array<ustring>& Node::get_string_array(const SocketType& input) const
+const array<ustring> &Node::get_string_array(const SocketType &input) const
{
- assert(input.type == SocketType::STRING_ARRAY);
- return get_socket_value<array<ustring> >(this, input);
+ assert(input.type == SocketType::STRING_ARRAY);
+ return get_socket_value<array<ustring>>(this, input);
}
-const array<Transform>& Node::get_transform_array(const SocketType& input) const
+const array<Transform> &Node::get_transform_array(const SocketType &input) const
{
- assert(input.type == SocketType::TRANSFORM_ARRAY);
- return get_socket_value<array<Transform> >(this, input);
+ assert(input.type == SocketType::TRANSFORM_ARRAY);
+ return get_socket_value<array<Transform>>(this, input);
}
-const array<Node*>& Node::get_node_array(const SocketType& input) const
+const array<Node *> &Node::get_node_array(const SocketType &input) const
{
- assert(input.type == SocketType::NODE_ARRAY);
- return get_socket_value<array<Node*> >(this, input);
+ assert(input.type == SocketType::NODE_ARRAY);
+ return get_socket_value<array<Node *>>(this, input);
}
/* generic value operations */
-bool Node::has_default_value(const SocketType& input) const
+bool Node::has_default_value(const SocketType &input) const
{
- const void *src = input.default_value;
- void *dst = &get_socket_value<char>(this, input);
- return memcmp(dst, src, input.size()) == 0;
+ const void *src = input.default_value;
+ void *dst = &get_socket_value<char>(this, input);
+ return memcmp(dst, src, input.size()) == 0;
}
-void Node::set_default_value(const SocketType& socket)
+void Node::set_default_value(const SocketType &socket)
{
- const void *src = socket.default_value;
- void *dst = ((char*)this) + socket.struct_offset;
- memcpy(dst, src, socket.size());
+ const void *src = socket.default_value;
+ void *dst = ((char *)this) + socket.struct_offset;
+ memcpy(dst, src, socket.size());
}
template<typename T>
-static void copy_array(const Node *node, const SocketType& socket, const Node *other, const SocketType& other_socket)
-{
- const array<T>* src = (const array<T>*)(((char*)other) + other_socket.struct_offset);
- array<T>* dst = (array<T>*)(((char*)node) + socket.struct_offset);
- *dst = *src;
-}
-
-void Node::copy_value(const SocketType& socket, const Node& other, const SocketType& other_socket)
-{
- assert(socket.type == other_socket.type);
-
- if(socket.is_array()) {
- switch(socket.type) {
- case SocketType::BOOLEAN_ARRAY: copy_array<bool>(this, socket, &other, other_socket); break;
- case SocketType::FLOAT_ARRAY: copy_array<float>(this, socket, &other, other_socket); break;
- case SocketType::INT_ARRAY: copy_array<int>(this, socket, &other, other_socket); break;
- case SocketType::COLOR_ARRAY: copy_array<float3>(this, socket, &other, other_socket); break;
- case SocketType::VECTOR_ARRAY: copy_array<float3>(this, socket, &other, other_socket); break;
- case SocketType::POINT_ARRAY: copy_array<float3>(this, socket, &other, other_socket); break;
- case SocketType::NORMAL_ARRAY: copy_array<float3>(this, socket, &other, other_socket); break;
- case SocketType::POINT2_ARRAY: copy_array<float2>(this, socket, &other, other_socket); break;
- case SocketType::STRING_ARRAY: copy_array<ustring>(this, socket, &other, other_socket); break;
- case SocketType::TRANSFORM_ARRAY: copy_array<Transform>(this, socket, &other, other_socket); break;
- case SocketType::NODE_ARRAY: copy_array<void*>(this, socket, &other, other_socket); break;
- default: assert(0); break;
- }
- }
- else {
- const void *src = ((char*)&other) + other_socket.struct_offset;
- void *dst = ((char*)this) + socket.struct_offset;
- memcpy(dst, src, socket.size());
- }
+static void copy_array(const Node *node,
+ const SocketType &socket,
+ const Node *other,
+ const SocketType &other_socket)
+{
+ const array<T> *src = (const array<T> *)(((char *)other) + other_socket.struct_offset);
+ array<T> *dst = (array<T> *)(((char *)node) + socket.struct_offset);
+ *dst = *src;
+}
+
+void Node::copy_value(const SocketType &socket, const Node &other, const SocketType &other_socket)
+{
+ assert(socket.type == other_socket.type);
+
+ if (socket.is_array()) {
+ switch (socket.type) {
+ case SocketType::BOOLEAN_ARRAY:
+ copy_array<bool>(this, socket, &other, other_socket);
+ break;
+ case SocketType::FLOAT_ARRAY:
+ copy_array<float>(this, socket, &other, other_socket);
+ break;
+ case SocketType::INT_ARRAY:
+ copy_array<int>(this, socket, &other, other_socket);
+ break;
+ case SocketType::COLOR_ARRAY:
+ copy_array<float3>(this, socket, &other, other_socket);
+ break;
+ case SocketType::VECTOR_ARRAY:
+ copy_array<float3>(this, socket, &other, other_socket);
+ break;
+ case SocketType::POINT_ARRAY:
+ copy_array<float3>(this, socket, &other, other_socket);
+ break;
+ case SocketType::NORMAL_ARRAY:
+ copy_array<float3>(this, socket, &other, other_socket);
+ break;
+ case SocketType::POINT2_ARRAY:
+ copy_array<float2>(this, socket, &other, other_socket);
+ break;
+ case SocketType::STRING_ARRAY:
+ copy_array<ustring>(this, socket, &other, other_socket);
+ break;
+ case SocketType::TRANSFORM_ARRAY:
+ copy_array<Transform>(this, socket, &other, other_socket);
+ break;
+ case SocketType::NODE_ARRAY:
+ copy_array<void *>(this, socket, &other, other_socket);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ }
+ else {
+ const void *src = ((char *)&other) + other_socket.struct_offset;
+ void *dst = ((char *)this) + socket.struct_offset;
+ memcpy(dst, src, socket.size());
+ }
}
template<typename T>
-static bool is_array_equal(const Node *node, const Node *other, const SocketType& socket)
+static bool is_array_equal(const Node *node, const Node *other, const SocketType &socket)
{
- const array<T>* a = (const array<T>*)(((char*)node) + socket.struct_offset);
- const array<T>* b = (const array<T>*)(((char*)other) + socket.struct_offset);
- return *a == *b;
+ const array<T> *a = (const array<T> *)(((char *)node) + socket.struct_offset);
+ const array<T> *b = (const array<T> *)(((char *)other) + socket.struct_offset);
+ return *a == *b;
}
template<typename T>
-static bool is_value_equal(const Node *node, const Node *other, const SocketType& socket)
-{
- const T *a = (const T*)(((char*)node) + socket.struct_offset);
- const T *b = (const T*)(((char*)other) + socket.struct_offset);
- return *a == *b;
-}
-
-bool Node::equals_value(const Node& other, const SocketType& socket) const
-{
- switch(socket.type) {
- case SocketType::BOOLEAN: return is_value_equal<bool>(this, &other, socket);
- case SocketType::FLOAT: return is_value_equal<float>(this, &other, socket);
- case SocketType::INT: return is_value_equal<int>(this, &other, socket);
- case SocketType::UINT: return is_value_equal<uint>(this, &other, socket);
- case SocketType::COLOR: return is_value_equal<float3>(this, &other, socket);
- case SocketType::VECTOR: return is_value_equal<float3>(this, &other, socket);
- case SocketType::POINT: return is_value_equal<float3>(this, &other, socket);
- case SocketType::NORMAL: return is_value_equal<float3>(this, &other, socket);
- case SocketType::POINT2: return is_value_equal<float2>(this, &other, socket);
- case SocketType::CLOSURE: return true;
- case SocketType::STRING: return is_value_equal<ustring>(this, &other, socket);
- case SocketType::ENUM: return is_value_equal<int>(this, &other, socket);
- case SocketType::TRANSFORM: return is_value_equal<Transform>(this, &other, socket);
- case SocketType::NODE: return is_value_equal<void*>(this, &other, socket);
-
- case SocketType::BOOLEAN_ARRAY: return is_array_equal<bool>(this, &other, socket);
- case SocketType::FLOAT_ARRAY: return is_array_equal<float>(this, &other, socket);
- case SocketType::INT_ARRAY: return is_array_equal<int>(this, &other, socket);
- case SocketType::COLOR_ARRAY: return is_array_equal<float3>(this, &other, socket);
- case SocketType::VECTOR_ARRAY: return is_array_equal<float3>(this, &other, socket);
- case SocketType::POINT_ARRAY: return is_array_equal<float3>(this, &other, socket);
- case SocketType::NORMAL_ARRAY: return is_array_equal<float3>(this, &other, socket);
- case SocketType::POINT2_ARRAY: return is_array_equal<float2>(this, &other, socket);
- case SocketType::STRING_ARRAY: return is_array_equal<ustring>(this, &other, socket);
- case SocketType::TRANSFORM_ARRAY: return is_array_equal<Transform>(this, &other, socket);
- case SocketType::NODE_ARRAY: return is_array_equal<void*>(this, &other, socket);
-
- case SocketType::UNDEFINED: return true;
- }
-
- return true;
+static bool is_value_equal(const Node *node, const Node *other, const SocketType &socket)
+{
+ const T *a = (const T *)(((char *)node) + socket.struct_offset);
+ const T *b = (const T *)(((char *)other) + socket.struct_offset);
+ return *a == *b;
+}
+
+bool Node::equals_value(const Node &other, const SocketType &socket) const
+{
+ switch (socket.type) {
+ case SocketType::BOOLEAN:
+ return is_value_equal<bool>(this, &other, socket);
+ case SocketType::FLOAT:
+ return is_value_equal<float>(this, &other, socket);
+ case SocketType::INT:
+ return is_value_equal<int>(this, &other, socket);
+ case SocketType::UINT:
+ return is_value_equal<uint>(this, &other, socket);
+ case SocketType::COLOR:
+ return is_value_equal<float3>(this, &other, socket);
+ case SocketType::VECTOR:
+ return is_value_equal<float3>(this, &other, socket);
+ case SocketType::POINT:
+ return is_value_equal<float3>(this, &other, socket);
+ case SocketType::NORMAL:
+ return is_value_equal<float3>(this, &other, socket);
+ case SocketType::POINT2:
+ return is_value_equal<float2>(this, &other, socket);
+ case SocketType::CLOSURE:
+ return true;
+ case SocketType::STRING:
+ return is_value_equal<ustring>(this, &other, socket);
+ case SocketType::ENUM:
+ return is_value_equal<int>(this, &other, socket);
+ case SocketType::TRANSFORM:
+ return is_value_equal<Transform>(this, &other, socket);
+ case SocketType::NODE:
+ return is_value_equal<void *>(this, &other, socket);
+
+ case SocketType::BOOLEAN_ARRAY:
+ return is_array_equal<bool>(this, &other, socket);
+ case SocketType::FLOAT_ARRAY:
+ return is_array_equal<float>(this, &other, socket);
+ case SocketType::INT_ARRAY:
+ return is_array_equal<int>(this, &other, socket);
+ case SocketType::COLOR_ARRAY:
+ return is_array_equal<float3>(this, &other, socket);
+ case SocketType::VECTOR_ARRAY:
+ return is_array_equal<float3>(this, &other, socket);
+ case SocketType::POINT_ARRAY:
+ return is_array_equal<float3>(this, &other, socket);
+ case SocketType::NORMAL_ARRAY:
+ return is_array_equal<float3>(this, &other, socket);
+ case SocketType::POINT2_ARRAY:
+ return is_array_equal<float2>(this, &other, socket);
+ case SocketType::STRING_ARRAY:
+ return is_array_equal<ustring>(this, &other, socket);
+ case SocketType::TRANSFORM_ARRAY:
+ return is_array_equal<Transform>(this, &other, socket);
+ case SocketType::NODE_ARRAY:
+ return is_array_equal<void *>(this, &other, socket);
+
+ case SocketType::UNDEFINED:
+ return true;
+ }
+
+ return true;
}
/* equals */
-bool Node::equals(const Node& other) const
+bool Node::equals(const Node &other) const
{
- assert(type == other.type);
+ assert(type == other.type);
- foreach(const SocketType& socket, type->inputs) {
- if(!equals_value(other, socket))
- return false;
- }
+ foreach (const SocketType &socket, type->inputs) {
+ if (!equals_value(other, socket))
+ return false;
+ }
- return true;
+ return true;
}
/* Hash */
namespace {
-template<typename T>
-void value_hash(const Node *node, const SocketType& socket, MD5Hash& md5)
+template<typename T> void value_hash(const Node *node, const SocketType &socket, MD5Hash &md5)
{
- md5.append(((uint8_t*)node) + socket.struct_offset, socket.size());
+ md5.append(((uint8_t *)node) + socket.struct_offset, socket.size());
}
-void float3_hash(const Node *node, const SocketType& socket, MD5Hash& md5)
+void float3_hash(const Node *node, const SocketType &socket, MD5Hash &md5)
{
- /* Don't compare 4th element used for padding. */
- md5.append(((uint8_t*)node) + socket.struct_offset, sizeof(float) * 3);
+ /* Don't compare 4th element used for padding. */
+ md5.append(((uint8_t *)node) + socket.struct_offset, sizeof(float) * 3);
}
-template<typename T>
-void array_hash(const Node *node, const SocketType& socket, MD5Hash& md5)
+template<typename T> void array_hash(const Node *node, const SocketType &socket, MD5Hash &md5)
{
- const array<T>& a = *(const array<T>*)(((char*)node) + socket.struct_offset);
- for(size_t i = 0; i < a.size(); i++) {
- md5.append((uint8_t*)&a[i], sizeof(T));
- }
+ const array<T> &a = *(const array<T> *)(((char *)node) + socket.struct_offset);
+ for (size_t i = 0; i < a.size(); i++) {
+ md5.append((uint8_t *)&a[i], sizeof(T));
+ }
}
-void float3_array_hash(const Node *node, const SocketType& socket, MD5Hash& md5)
+void float3_array_hash(const Node *node, const SocketType &socket, MD5Hash &md5)
{
- /* Don't compare 4th element used for padding. */
- const array<float3>& a = *(const array<float3>*)(((char*)node) + socket.struct_offset);
- for(size_t i = 0; i < a.size(); i++) {
- md5.append((uint8_t*)&a[i], sizeof(float) * 3);
- }
+ /* Don't compare 4th element used for padding. */
+ const array<float3> &a = *(const array<float3> *)(((char *)node) + socket.struct_offset);
+ for (size_t i = 0; i < a.size(); i++) {
+ md5.append((uint8_t *)&a[i], sizeof(float) * 3);
+ }
}
} // namespace
-void Node::hash(MD5Hash& md5)
-{
- md5.append(type->name.string());
-
- foreach(const SocketType& socket, type->inputs) {
- md5.append(socket.name.string());
-
- switch(socket.type) {
- case SocketType::BOOLEAN: value_hash<bool>(this, socket, md5); break;
- case SocketType::FLOAT: value_hash<float>(this, socket, md5); break;
- case SocketType::INT: value_hash<int>(this, socket, md5); break;
- case SocketType::UINT: value_hash<uint>(this, socket, md5); break;
- case SocketType::COLOR: float3_hash(this, socket, md5); break;
- case SocketType::VECTOR: float3_hash(this, socket, md5); break;
- case SocketType::POINT: float3_hash(this, socket, md5); break;
- case SocketType::NORMAL: float3_hash(this, socket, md5); break;
- case SocketType::POINT2: value_hash<float2>(this, socket, md5); break;
- case SocketType::CLOSURE: break;
- case SocketType::STRING: value_hash<ustring>(this, socket, md5); break;
- case SocketType::ENUM: value_hash<int>(this, socket, md5); break;
- case SocketType::TRANSFORM: value_hash<Transform>(this, socket, md5); break;
- case SocketType::NODE: value_hash<void*>(this, socket, md5); break;
-
- case SocketType::BOOLEAN_ARRAY: array_hash<bool>(this, socket, md5); break;
- case SocketType::FLOAT_ARRAY: array_hash<float>(this, socket, md5); break;
- case SocketType::INT_ARRAY: array_hash<int>(this, socket, md5); break;
- case SocketType::COLOR_ARRAY: float3_array_hash(this, socket, md5); break;
- case SocketType::VECTOR_ARRAY: float3_array_hash(this, socket, md5); break;
- case SocketType::POINT_ARRAY: float3_array_hash(this, socket, md5); break;
- case SocketType::NORMAL_ARRAY: float3_array_hash(this, socket, md5); break;
- case SocketType::POINT2_ARRAY: array_hash<float2>(this, socket, md5); break;
- case SocketType::STRING_ARRAY: array_hash<ustring>(this, socket, md5); break;
- case SocketType::TRANSFORM_ARRAY: array_hash<Transform>(this, socket, md5); break;
- case SocketType::NODE_ARRAY: array_hash<void*>(this, socket, md5); break;
-
- case SocketType::UNDEFINED: break;
- }
- }
+void Node::hash(MD5Hash &md5)
+{
+ md5.append(type->name.string());
+
+ foreach (const SocketType &socket, type->inputs) {
+ md5.append(socket.name.string());
+
+ switch (socket.type) {
+ case SocketType::BOOLEAN:
+ value_hash<bool>(this, socket, md5);
+ break;
+ case SocketType::FLOAT:
+ value_hash<float>(this, socket, md5);
+ break;
+ case SocketType::INT:
+ value_hash<int>(this, socket, md5);
+ break;
+ case SocketType::UINT:
+ value_hash<uint>(this, socket, md5);
+ break;
+ case SocketType::COLOR:
+ float3_hash(this, socket, md5);
+ break;
+ case SocketType::VECTOR:
+ float3_hash(this, socket, md5);
+ break;
+ case SocketType::POINT:
+ float3_hash(this, socket, md5);
+ break;
+ case SocketType::NORMAL:
+ float3_hash(this, socket, md5);
+ break;
+ case SocketType::POINT2:
+ value_hash<float2>(this, socket, md5);
+ break;
+ case SocketType::CLOSURE:
+ break;
+ case SocketType::STRING:
+ value_hash<ustring>(this, socket, md5);
+ break;
+ case SocketType::ENUM:
+ value_hash<int>(this, socket, md5);
+ break;
+ case SocketType::TRANSFORM:
+ value_hash<Transform>(this, socket, md5);
+ break;
+ case SocketType::NODE:
+ value_hash<void *>(this, socket, md5);
+ break;
+
+ case SocketType::BOOLEAN_ARRAY:
+ array_hash<bool>(this, socket, md5);
+ break;
+ case SocketType::FLOAT_ARRAY:
+ array_hash<float>(this, socket, md5);
+ break;
+ case SocketType::INT_ARRAY:
+ array_hash<int>(this, socket, md5);
+ break;
+ case SocketType::COLOR_ARRAY:
+ float3_array_hash(this, socket, md5);
+ break;
+ case SocketType::VECTOR_ARRAY:
+ float3_array_hash(this, socket, md5);
+ break;
+ case SocketType::POINT_ARRAY:
+ float3_array_hash(this, socket, md5);
+ break;
+ case SocketType::NORMAL_ARRAY:
+ float3_array_hash(this, socket, md5);
+ break;
+ case SocketType::POINT2_ARRAY:
+ array_hash<float2>(this, socket, md5);
+ break;
+ case SocketType::STRING_ARRAY:
+ array_hash<ustring>(this, socket, md5);
+ break;
+ case SocketType::TRANSFORM_ARRAY:
+ array_hash<Transform>(this, socket, md5);
+ break;
+ case SocketType::NODE_ARRAY:
+ array_hash<void *>(this, socket, md5);
+ break;
+
+ case SocketType::UNDEFINED:
+ break;
+ }
+ }
}
namespace {
-template<typename T>
-size_t array_size_in_bytes(const Node *node, const SocketType& socket)
+template<typename T> size_t array_size_in_bytes(const Node *node, const SocketType &socket)
{
- const array<T>& a = *(const array<T>*)(((char*)node) + socket.struct_offset);
- return a.size() * sizeof(T);
+ const array<T> &a = *(const array<T> *)(((char *)node) + socket.struct_offset);
+ return a.size() * sizeof(T);
}
} // namespace
size_t Node::get_total_size_in_bytes() const
{
- size_t total_size = 0;
- foreach(const SocketType& socket, type->inputs) {
- switch(socket.type) {
- case SocketType::BOOLEAN:
- case SocketType::FLOAT:
- case SocketType::INT:
- case SocketType::UINT:
- case SocketType::COLOR:
- case SocketType::VECTOR:
- case SocketType::POINT:
- case SocketType::NORMAL:
- case SocketType::POINT2:
- case SocketType::CLOSURE:
- case SocketType::STRING:
- case SocketType::ENUM:
- case SocketType::TRANSFORM:
- case SocketType::NODE:
- total_size += socket.size();
- break;
-
- case SocketType::BOOLEAN_ARRAY:
- total_size += array_size_in_bytes<bool>(this, socket);
- break;
- case SocketType::FLOAT_ARRAY:
- total_size += array_size_in_bytes<float>(this, socket);
- break;
- case SocketType::INT_ARRAY:
- total_size += array_size_in_bytes<int>(this, socket);
- break;
- case SocketType::COLOR_ARRAY:
- total_size += array_size_in_bytes<float3>(this, socket);
- break;
- case SocketType::VECTOR_ARRAY:
- total_size += array_size_in_bytes<float3>(this, socket);
- break;
- case SocketType::POINT_ARRAY:
- total_size += array_size_in_bytes<float3>(this, socket);
- break;
- case SocketType::NORMAL_ARRAY:
- total_size += array_size_in_bytes<float3>(this, socket);
- break;
- case SocketType::POINT2_ARRAY:
- total_size += array_size_in_bytes<float2>(this, socket);
- break;
- case SocketType::STRING_ARRAY:
- total_size += array_size_in_bytes<ustring>(this, socket);
- break;
- case SocketType::TRANSFORM_ARRAY:
- total_size += array_size_in_bytes<Transform>(this, socket);
- break;
- case SocketType::NODE_ARRAY:
- total_size += array_size_in_bytes<void*>(this, socket);
- break;
-
- case SocketType::UNDEFINED: break;
- }
- }
- return total_size;
+ size_t total_size = 0;
+ foreach (const SocketType &socket, type->inputs) {
+ switch (socket.type) {
+ case SocketType::BOOLEAN:
+ case SocketType::FLOAT:
+ case SocketType::INT:
+ case SocketType::UINT:
+ case SocketType::COLOR:
+ case SocketType::VECTOR:
+ case SocketType::POINT:
+ case SocketType::NORMAL:
+ case SocketType::POINT2:
+ case SocketType::CLOSURE:
+ case SocketType::STRING:
+ case SocketType::ENUM:
+ case SocketType::TRANSFORM:
+ case SocketType::NODE:
+ total_size += socket.size();
+ break;
+
+ case SocketType::BOOLEAN_ARRAY:
+ total_size += array_size_in_bytes<bool>(this, socket);
+ break;
+ case SocketType::FLOAT_ARRAY:
+ total_size += array_size_in_bytes<float>(this, socket);
+ break;
+ case SocketType::INT_ARRAY:
+ total_size += array_size_in_bytes<int>(this, socket);
+ break;
+ case SocketType::COLOR_ARRAY:
+ total_size += array_size_in_bytes<float3>(this, socket);
+ break;
+ case SocketType::VECTOR_ARRAY:
+ total_size += array_size_in_bytes<float3>(this, socket);
+ break;
+ case SocketType::POINT_ARRAY:
+ total_size += array_size_in_bytes<float3>(this, socket);
+ break;
+ case SocketType::NORMAL_ARRAY:
+ total_size += array_size_in_bytes<float3>(this, socket);
+ break;
+ case SocketType::POINT2_ARRAY:
+ total_size += array_size_in_bytes<float2>(this, socket);
+ break;
+ case SocketType::STRING_ARRAY:
+ total_size += array_size_in_bytes<ustring>(this, socket);
+ break;
+ case SocketType::TRANSFORM_ARRAY:
+ total_size += array_size_in_bytes<Transform>(this, socket);
+ break;
+ case SocketType::NODE_ARRAY:
+ total_size += array_size_in_bytes<void *>(this, socket);
+ break;
+
+ case SocketType::UNDEFINED:
+ break;
+ }
+ }
+ return total_size;
}
CCL_NAMESPACE_END