1
- /*
2
- ==============================================================================
3
-
4
- NumberComparators.cpp
5
- Created: 2 Nov 2016 8:57:34pm
6
- Author: bkupe
7
-
8
- ==============================================================================
9
- */
10
-
11
- NumberComparator::NumberComparator (Parameter* sourceParam, Multiplex* multiplex) :
12
- BaseComparator(multiplex),
13
- isFloat(dynamic_cast <FloatParameter*>(sourceParam) != nullptr)
14
- {
15
-
16
- sourceRange.append (sourceParam->minimumValue );
17
- sourceRange.append (sourceParam->maximumValue );
18
-
19
- setupReferenceParam ();
20
- reference->setValue (sourceParam->floatValue (), false , true , true );
21
- if (isFloat)((FloatParameter*)reference)->defaultUI = ((FloatParameter*)sourceParam)->defaultUI ;
22
-
23
- addCompareOption (" =" , equalsId);
24
- addCompareOption (" !=" , differentId);
25
- addCompareOption (" >" , greaterId);
26
- addCompareOption (" <" , lessId);
27
- addCompareOption (" >=" , greaterOrEqualId);
28
- addCompareOption (" <=" , lessOrEqualId);
29
- addCompareOption (" Modulo =" , moduloEqualId);
30
- addCompareOption (" Modulo >" , moduloGreaterId);
31
- addCompareOption (" Modulo <" , moduloLessId);
32
- addCompareOption (" Floor =" , floorEqualId);
33
- addCompareOption (" Floor >" , floorGreaterId);
34
- addCompareOption (" Floor <" , floorLessId);
35
- addCompareOption (" Diff >" , diffGreaterId);
36
- addCompareOption (" Diff <" , diffLessId);
37
- addCompareOption (" Range" , inRangeId);
38
- addCompareOption (" Change" , changeId);
39
- }
40
-
41
- NumberComparator::~NumberComparator ()
42
- {
43
- }
44
-
45
- void NumberComparator::compareFunctionChanged ()
46
- {
47
- setupReferenceParam ();
48
- }
49
-
50
- void NumberComparator::setupReferenceParam ()
51
- {
52
- if (currentFunctionId == inRangeId || currentFunctionId.toString ().contains (" %" ) || currentFunctionId.toString ().contains (" f" ))
53
- {
54
- Point2DParameter* p2d = new Point2DParameter (" Reference" , " Comparison Reference to check against source value" );
55
- p2d->setBounds (sourceRange[0 ], sourceRange[0 ], sourceRange[1 ], sourceRange[1 ]);
56
- if (currentFunctionId != inRangeId) p2d->setPoint (2 , 0 );
57
- setReferenceParam (p2d);
58
- }
59
- else
60
- {
61
- if (isFloat)
62
- {
63
- if (reference == nullptr || reference->type != Parameter::FLOAT)
64
- {
65
- setReferenceParam (new FloatParameter (" Reference" , " Comparison Reference to check against source value" , 0 , sourceRange[0 ], sourceRange[1 ]));
66
- }
67
- }
68
- else if (reference == nullptr || reference->type != Parameter::INT)
69
- {
70
- setReferenceParam (new IntParameter (" Reference" , " Comparison Reference to check against source value" , 0 , sourceRange[0 ], sourceRange[1 ]));
71
- }
72
- }
73
- }
74
-
75
- bool NumberComparator::compareInternal (Parameter* sourceParam, int multiplexIndex)
76
- {
77
- var value = isMultiplexed () ? refLink->getLinkedValue (multiplexIndex) : reference->getValue ();
78
-
79
- if (currentFunctionId == equalsId) return sourceParam->floatValue () == (float )value;
80
- else if (currentFunctionId == differentId) return sourceParam->floatValue () != (float )value;
81
- else if (currentFunctionId == greaterId) return sourceParam->floatValue () > (float )value;
82
- else if (currentFunctionId == lessId) return sourceParam->floatValue () < (float )value;
83
- else if (currentFunctionId == greaterOrEqualId) return sourceParam->floatValue () >= (float )value;
84
- else if (currentFunctionId == lessOrEqualId) return sourceParam->floatValue () <= (float )value;
85
- else if (currentFunctionId == moduloEqualId) return (float )value[0 ] == 0 ? false : fmodf (sourceParam->floatValue (), (float )value[0 ]) == (float )value[1 ];
86
- else if (currentFunctionId == moduloGreaterId) return (float )value[0 ] == 0 ? false : fmodf (sourceParam->floatValue (), (float )value[0 ]) > (float )value[1 ];
87
- else if (currentFunctionId == moduloLessId) return (float )value[0 ] == 0 ? false : fmodf (sourceParam->floatValue (), (float )value[0 ]) < (float )value[1 ];
88
- else if (currentFunctionId == floorEqualId) return (float )value[0 ] == 0 ? false : floorf (sourceParam->floatValue () / (float )value[0 ]) == (float )value[1 ];
89
- else if (currentFunctionId == floorGreaterId) return (float )value[0 ] == 0 ? false : floorf (sourceParam->floatValue () / (float )value[0 ]) >(float )value[1 ];
90
- else if (currentFunctionId == floorLessId) return (float )value[0 ] == 0 ? false : floorf (sourceParam->floatValue () / (float )value[0 ]) < (float )value[1 ];
91
- else if (currentFunctionId == inRangeId) return sourceParam->floatValue () >= (float )value[0 ] && sourceParam->floatValue () <= (float )value[1 ];
92
- else if (currentFunctionId == diffGreaterId || currentFunctionId == diffLessId)
93
- {
94
- prevValues.ensureStorageAllocated (multiplexIndex + 1 );
95
- float diff = fabsf (sourceParam->floatValue () - prevValues[multiplexIndex]);
96
- bool result = currentFunctionId == diffGreaterId ? diff > (float )value : diff < (float )value;
97
- prevValues.set (multiplexIndex, sourceParam->floatValue ());
98
- return result;
99
- }
100
- return false ;
1
+ /*
2
+ ==============================================================================
3
+
4
+ NumberComparators.cpp
5
+ Created: 2 Nov 2016 8:57:34pm
6
+ Author: bkupe
7
+
8
+ ==============================================================================
9
+ */
10
+
11
+ NumberComparator::NumberComparator (Parameter* sourceParam, Multiplex* multiplex) :
12
+ BaseComparator(multiplex),
13
+ isFloat(dynamic_cast <FloatParameter*>(sourceParam) != nullptr)
14
+ {
15
+
16
+ sourceRange.append (sourceParam->minimumValue );
17
+ sourceRange.append (sourceParam->maximumValue );
18
+
19
+ setupReferenceParam ();
20
+ reference->setValue (sourceParam->floatValue (), false , true , true );
21
+ if (isFloat)((FloatParameter*)reference)->defaultUI = ((FloatParameter*)sourceParam)->defaultUI ;
22
+
23
+ addCompareOption (" =" , equalsId);
24
+ addCompareOption (" !=" , differentId);
25
+ addCompareOption (" >" , greaterId);
26
+ addCompareOption (" <" , lessId);
27
+ addCompareOption (" >=" , greaterOrEqualId);
28
+ addCompareOption (" <=" , lessOrEqualId);
29
+ addCompareOption (" Modulo =" , moduloEqualId);
30
+ addCompareOption (" Modulo >" , moduloGreaterId);
31
+ addCompareOption (" Modulo <" , moduloLessId);
32
+ addCompareOption (" Floor =" , floorEqualId);
33
+ addCompareOption (" Floor >" , floorGreaterId);
34
+ addCompareOption (" Floor <" , floorLessId);
35
+ addCompareOption (" Diff >" , diffGreaterId);
36
+ addCompareOption (" Diff <" , diffLessId);
37
+ addCompareOption (" Dist >" , distGreaterId);
38
+ addCompareOption (" Dist <" , distLessId);
39
+ addCompareOption (" Range" , inRangeId);
40
+ addCompareOption (" Change" , changeId);
41
+ }
42
+
43
+ NumberComparator::~NumberComparator ()
44
+ {
45
+ }
46
+
47
+ void NumberComparator::compareFunctionChanged ()
48
+ {
49
+ setupReferenceParam ();
50
+ }
51
+
52
+ void NumberComparator::setupReferenceParam ()
53
+ {
54
+ if (currentFunctionId == inRangeId || currentFunctionId.toString ().contains (" %" ) || currentFunctionId.toString ().contains (" f" ))
55
+ {
56
+ Point2DParameter* p2d = new Point2DParameter (" Reference" , " Comparison Reference to check against source value" );
57
+ p2d->setBounds (sourceRange[0 ], sourceRange[0 ], sourceRange[1 ], sourceRange[1 ]);
58
+ if (currentFunctionId != inRangeId) p2d->setPoint (2 , 0 );
59
+ setReferenceParam (p2d);
60
+ }
61
+ else
62
+ {
63
+ if (isFloat)
64
+ {
65
+ if (reference == nullptr || reference->type != Parameter::FLOAT)
66
+ {
67
+ setReferenceParam (new FloatParameter (" Reference" , " Comparison Reference to check against source value" , 0 , sourceRange[0 ], sourceRange[1 ]));
68
+ }
69
+ }
70
+ else if (reference == nullptr || reference->type != Parameter::INT)
71
+ {
72
+ setReferenceParam (new IntParameter (" Reference" , " Comparison Reference to check against source value" , 0 , sourceRange[0 ], sourceRange[1 ]));
73
+ }
74
+ }
75
+ }
76
+
77
+ bool NumberComparator::compareInternal (Parameter* sourceParam, int multiplexIndex)
78
+ {
79
+ var value = isMultiplexed () ? refLink->getLinkedValue (multiplexIndex) : reference->getValue ();
80
+
81
+ if (currentFunctionId == equalsId) return sourceParam->floatValue () == (float )value;
82
+ else if (currentFunctionId == differentId) return sourceParam->floatValue () != (float )value;
83
+ else if (currentFunctionId == greaterId) return sourceParam->floatValue () > (float )value;
84
+ else if (currentFunctionId == lessId) return sourceParam->floatValue () < (float )value;
85
+ else if (currentFunctionId == greaterOrEqualId) return sourceParam->floatValue () >= (float )value;
86
+ else if (currentFunctionId == lessOrEqualId) return sourceParam->floatValue () <= (float )value;
87
+ else if (currentFunctionId == moduloEqualId) return (float )value[0 ] == 0 ? false : fmodf (sourceParam->floatValue (), (float )value[0 ]) == (float )value[1 ];
88
+ else if (currentFunctionId == moduloGreaterId) return (float )value[0 ] == 0 ? false : fmodf (sourceParam->floatValue (), (float )value[0 ]) > (float )value[1 ];
89
+ else if (currentFunctionId == moduloLessId) return (float )value[0 ] == 0 ? false : fmodf (sourceParam->floatValue (), (float )value[0 ]) < (float )value[1 ];
90
+ else if (currentFunctionId == floorEqualId) return (float )value[0 ] == 0 ? false : floorf (sourceParam->floatValue () / (float )value[0 ]) == (float )value[1 ];
91
+ else if (currentFunctionId == floorGreaterId) return (float )value[0 ] == 0 ? false : floorf (sourceParam->floatValue () / (float )value[0 ]) >(float )value[1 ];
92
+ else if (currentFunctionId == floorLessId) return (float )value[0 ] == 0 ? false : floorf (sourceParam->floatValue () / (float )value[0 ]) < (float )value[1 ];
93
+ else if (currentFunctionId == inRangeId) return sourceParam->floatValue () >= (float )value[0 ] && sourceParam->floatValue () <= (float )value[1 ];
94
+ else if (currentFunctionId == distGreaterId || currentFunctionId == distLessId
95
+ || currentFunctionId == diffGreaterId || currentFunctionId == diffLessId)
96
+ {
97
+ prevValues.ensureStorageAllocated (multiplexIndex + 1 );
98
+ float diff = sourceParam->floatValue () - prevValues[multiplexIndex];
99
+ if (currentFunctionId == distGreaterId || currentFunctionId == distLessId) diff = fabsf (diff);
100
+ bool result = (currentFunctionId == distGreaterId || currentFunctionId == diffGreaterId) ? diff > (float )value : diff < (float )value;
101
+ prevValues.set (multiplexIndex, sourceParam->floatValue ());
102
+ return result;
103
+ }
104
+ return false ;
101
105
}
0 commit comments