summaryrefslogtreecommitdiff
path: root/NT/src/rotor.h
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-12-27 12:45:46 +0000
committerTim Redfern <tim@eclectronics.org>2013-12-27 12:45:46 +0000
commitea8d3b6fa7ac59d064e86755fae8f25f7ed8a0d2 (patch)
tree726a099a532d1098a5a102083a301f98f74b9962 /NT/src/rotor.h
parentfba8f7cbf38bfa6ecd7bab7cdd5e6d08d53840c6 (diff)
making template connection logic
Diffstat (limited to 'NT/src/rotor.h')
-rw-r--r--NT/src/rotor.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/NT/src/rotor.h b/NT/src/rotor.h
index 49d50a1..93b6865 100644
--- a/NT/src/rotor.h
+++ b/NT/src/rotor.h
@@ -9,6 +9,7 @@
namespace Rotor {
class Node;
+ template <class NT> class Node_type;
class Audio_frame{
public:
@@ -40,8 +41,9 @@ namespace Rotor {
};
class Variable { //base type for variable pointers
public:
- virtual void init(std::string s){};
+ virtual void init(std::string s)=0;
virtual ~Variable(){};
+ virtual bool connect(Node* target)=0;
Node* connection;
bool connectable;
};
@@ -51,6 +53,15 @@ namespace Rotor {
std::istringstream cur(s);
cur >> value;
};
+ bool connect(Node* target){
+ if (connectable){
+ if (dynamic_cast<Node_type<T>*>(target)){
+ connection=target;
+ return true;
+ }
+ }
+ return false;
+ }
T* get(Frame_parameters frame);
T value;
};
@@ -87,6 +98,15 @@ namespace Rotor {
}
};
}
+ bool connect(std::string v,Node *t){
+ auto var=vars.find(v);
+ if (var!=vars.end()){
+ if ((*var).second->connect(t)){
+ return true;
+ }
+ }
+ return false;
+ }
template <class IT> IT* create_inlet(std::string name){
vars[name]=new Variable_type<IT>();
return &((dynamic_cast<Variable_type<IT>*>(vars[name]))->value);
@@ -101,17 +121,20 @@ namespace Rotor {
private:
double value;
};
- class signal_double: public Node_type<double> {
+ class multiply: public Node_type<double> {
public:
- signal_double(){
+ multiply(){
+ inlet=create_inlet<double>("inlet");
value=create_inlet<double>("value");
}
double* get_output(const Frame_parameters &frame){
- (*value)*=2.0;
- return value;
+ result=(*inlet)*(*value);
+ return &result;
}
private:
+ double *inlet;
double *value;
+ double result;
};
}