Rumba C++ SDK
PlugDescriptor.h
Go to the documentation of this file.
1 /*
2 
3  *
4  ***
5  *****
6  ********************* Mercenaries Engineering SARL
7  ***************** Copyright (C) 2018
8  *************
9  ********* http://www.mercenaries-engineering.com
10  ***********
11  **** ****
12  ** **
13 
14 */
15 #pragma once
16 
17 #include "Value.h"
18 #include "Plug.h"
19 #include "Ptr.h"
20 
21  namespace maquina
22  {
23  class ConditionalEvalContext;
24  class Value;
25  class EvalContext;
26  class PartialInvalidation;
27  using PartialInvalidationPtr = Ptr<const PartialInvalidation>;
28 
31  {
32  public:
33  enum Flags
34  {
35  none = 0,
36  cache = 1 << 0,
37  time_varying = 1 << 1,
38  serial = 1 << 3,
39  graph_invisible = 1 << 8,
40  hidden = 1 << 8,
41  channel = 1 << 9,
42  constant = 1 << 10,
43  cache_exact = 1 << 11,
44  main = 1 << 12,
45  auto_connect = 1 << 13,
46  no_input = 1 << 15,
47  background = 1 << 30
48  };
49 
52  {
54  (
55  const char* plug_name,
56  int time_offset = 0,
57  bool (*evaluate)(const ConditionalEvalContext& context, int dep) = nullptr
63  ) :
64  _plug_name(plug_name),
65  _time_offset(time_offset),
66  _evaluate(evaluate)
67  {}
68 
69  const char* _plug_name;
71  bool (*_evaluate)(const ConditionalEvalContext& context, int dep) = nullptr;
72  };
73 
76  {
78  (
79  const char* plug_name,
80  const Value& default_value
81  ) :
82  _plug_name(plug_name),
84  {
85  }
86 
87  const char* _plug_name;
89  };
90 
92 
94  const char* plug_name,
95  const Value& default_value,
96  uint32_t flags = serial,
97  const char* ui = ""
98  ) :
99  _plug_name(plug_name),
101  _flags(flags),
102  _ui(ui)
103  {}
104 
106 
116  const char *plug_name,
117  const Value &default_value,
118  uint32_t flags,
119  const char* ui,
120  const std::function<Value(EvalContext&)>& eval_handler,
121  const std::vector<InternalDependencies> &intern_deps,
122  PartialInvalidationPtr (*partial_invalidation_handler)(const Plug& plug, int dep, const PartialInvalidationPtr& pi) = nullptr,
123  bool (*dyn_evaluate)(const ConditionalEvalContext& context, int dep) = nullptr,
129  int first_extern_deps = -1,
130  const std::vector<ExternalDependencies> &extern_deps = {}
131  ) :
132  _plug_name(plug_name),
134  _flags(flags),
135  _ui(ui),
136  _eval_handler(eval_handler),
137  _intern_deps(intern_deps),
138  _partial_invalidation_handler(partial_invalidation_handler),
139  _dyn_evaluate(dyn_evaluate),
140  _first_extern_deps(first_extern_deps),
141  _extern_deps(extern_deps)
142  {
144  for(const auto& intern_dep : _intern_deps)
145  _has_conditional_evaluation |= intern_dep._evaluate != nullptr;
146  }
147 
148  public:
149 
150  std::string _plug_name;
152  uint32_t _flags = 0;
153  std::string _ui;
154  std::function<Value(EvalContext&)> _eval_handler;
155  std::vector<InternalDependencies> _intern_deps;
157  bool (*_dyn_evaluate)(const ConditionalEvalContext& context, int dep) = nullptr;
159  std::vector<ExternalDependencies> _extern_deps;
160  bool _has_conditional_evaluation = false; // true if _dyn_evaluate or at least one _intern_deps entry has an _evaluate function
161  };
162  }
A plug descriptor to pass to the Registry::register_node() function.
Definition: PlugDescriptor.h:30
This plug value should be keeped in memory because it takes time to be computed.
Definition: PlugDescriptor.h:36
ExternalDependencies(const char *plug_name, const Value &default_value)
Definition: PlugDescriptor.h:78
This plug should not be visible in the graph editor.
Definition: PlugDescriptor.h:39
A plug internal dependency descriptor.
Definition: PlugDescriptor.h:51
bool(* _evaluate)(const ConditionalEvalContext &context, int dep)
Definition: PlugDescriptor.h:71
bool(* _dyn_evaluate)(const ConditionalEvalContext &context, int dep)
Definition: PlugDescriptor.h:157
std::vector< ExternalDependencies > _extern_deps
Definition: PlugDescriptor.h:159
Value _default_value
Definition: PlugDescriptor.h:88
Definition: PlugDescriptor.h:35
Value _default_value
Definition: PlugDescriptor.h:151
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
A plug external dependency descriptor.
Definition: PlugDescriptor.h:75
int _first_extern_deps
Definition: PlugDescriptor.h:158
Definition: ConditionalEvalContext.h:25
const char * _plug_name
Definition: PlugDescriptor.h:87
PlugDescriptor(const char *plug_name, const Value &default_value, uint32_t flags, const char *ui, const std::function< Value(EvalContext &)> &eval_handler, const std::vector< InternalDependencies > &intern_deps, PartialInvalidationPtr(*partial_invalidation_handler)(const Plug &plug, int dep, const PartialInvalidationPtr &pi)=nullptr, bool(*dyn_evaluate)(const ConditionalEvalContext &context, int dep)=nullptr, int first_extern_deps=-1, const std::vector< ExternalDependencies > &extern_deps={})
Register an evaluated plug.
Definition: PlugDescriptor.h:115
This plug is evaluated by the background engine.
Definition: PlugDescriptor.h:47
This plug is always visible.
Definition: PlugDescriptor.h:44
MAQUINA_EXPORT Value default_value(const maquina::StringView &type_name)
Return the default value of a type.
This class holds the evaluation context passed to the evaluation handler during a plug evaluation...
Definition: EvalContext.h:51
PartialInvalidationPtr(* _partial_invalidation_handler)(const Plug &plug, int dep, const PartialInvalidationPtr &pi)
Definition: PlugDescriptor.h:156
const char * _plug_name
Definition: PlugDescriptor.h:69
This plug may be connected automatically when the node is dropped over a connection.
Definition: PlugDescriptor.h:45
This plug is not animable (i.e no animation curve, only constant values)
Definition: PlugDescriptor.h:42
This plug is a channel.
Definition: PlugDescriptor.h:41
A node plug.
Definition: Plug.h:59
bool _has_conditional_evaluation
Definition: PlugDescriptor.h:160
Ptr< const PartialInvalidation > PartialInvalidationPtr
Definition: EvalContext.h:26
int _time_offset
Definition: PlugDescriptor.h:70
PlugDescriptor(const char *plug_name, const Value &default_value, uint32_t flags=serial, const char *ui="")
Register an input plug.
Definition: PlugDescriptor.h:93
This plug should be hidden in the UI by default.
Definition: PlugDescriptor.h:40
std::string _plug_name
Definition: PlugDescriptor.h:150
This plug is cached with the exact value.
Definition: PlugDescriptor.h:43
Flags
Definition: PlugDescriptor.h:33
This plug value should be serialized.
Definition: PlugDescriptor.h:38
std::function< Value(EvalContext &)> _eval_handler
Definition: PlugDescriptor.h:154
std::vector< InternalDependencies > _intern_deps
Definition: PlugDescriptor.h:155
InternalDependencies(const char *plug_name, int time_offset=0, bool(*evaluate)(const ConditionalEvalContext &context, int dep)=nullptr)
Definition: PlugDescriptor.h:54
This plug is never constant.
Definition: PlugDescriptor.h:37
This plug cannot be connected with an input.
Definition: PlugDescriptor.h:46
std::string _ui
Definition: PlugDescriptor.h:153
Base class of all Rumba values.
Definition: Value.h:34
uint32_t _flags
Definition: PlugDescriptor.h:152