|
@@ -5,663 +5,230 @@
|
|
|
namespace mdd {
|
|
|
ModuleMath::ModuleMath(MathOperation operation) {
|
|
|
_operation = operation;
|
|
|
- json default_val;
|
|
|
- default_val["value"] = { 1 };
|
|
|
+ std::vector<double> default_val = {1};
|
|
|
addInput("Value", default_val);
|
|
|
addInput("Value", default_val);
|
|
|
addOutput("Value", default_val);
|
|
|
setType("Math");
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::add(const json &val1, const json &val2) {
|
|
|
- json ret; //= json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(add(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(add(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(add(val1[i], val2[1]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ret.push_back(add(val1[i],val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::add(const std::vector<double>&val1, const std::vector<double>&val2) {
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length= std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(val1[i] + val2[i]);
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(add(val1,val2[i]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<double>() + val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<float>() + val2.get<int>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<int>() + val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<int>() + val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(val1[0] + val2[i]);
|
|
|
+ }
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(val1[i] + val2[0]);
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::subtract(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(subtract(val1[i],val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(subtract(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(subtract(val1[i], val2[1]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ret.push_back(subtract(val1[i],val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::subtract(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(val1[i] - val2[i]);
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(subtract(val1,val2[i]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<double>() - val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<double>() - val2.get<int>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<int>() - val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<int>() - val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(val1[0] - val2[i]);
|
|
|
+ }
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(val1[i] - val2[0]);
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::multiply(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(multiply(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(multiply(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(multiply(val1[i], val2[1]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ret.push_back(multiply(val1[i],val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::multiply(const std::vector<double>&val1, const std::vector<double> &val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(val1[i] * val2[i]);
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(multiply(val1,val2[i]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<double>() * val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<double>() * val2.get<int>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<int>() * val2.get<float>();
|
|
|
- } else {
|
|
|
- ret = val1.get<int>() * val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(val1[0] * val2[i]);
|
|
|
+ }
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(val1[i] * val2[0]);
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::divide(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(divide(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(divide(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(divide(val1[i], val2[1]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ret.push_back(divide(val1[i],val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::divide(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(val1[i] / val2[i]);
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(divide(val1,val2[i]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<double>() / val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<double>() / val2.get<int>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = val1.get<int>() / val2.get<double>();
|
|
|
- } else {
|
|
|
- ret = val1.get<int>()*1.0 / val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(val1[0] / val2[i]);
|
|
|
+ }
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(val1[i] / val2[0]);
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::power(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(power(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(power(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(power(val1[i], val2[1]));
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- ret.push_back(power(val1[i], val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::power(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(pow(val1[i] , val2[i]));
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(power(val1, val2[i]));
|
|
|
- }
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(pow(val1[0] , val2[i]));
|
|
|
}
|
|
|
- else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = pow(val1.get<double>(), val2.get<double>());
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = pow(val1.get<double>(), val2.get<int>());
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = pow(val1.get<int>(), val2.get<double>());
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = pow(val1.get<int>(), val2.get<int>());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(pow(val1[i] , val2[0]));
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::logarithm(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(logarithm(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(logarithm(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(logarithm(val1[i], val2[1]));
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- ret.push_back(logarithm(val1[i], val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::logarithm(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+
|
|
|
+ ret.push_back(log(val2[i]) / log(val1[i]));
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(logarithm(val1, val2[i]));
|
|
|
- }
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(log(val2[i]) / log(val1[0]));
|
|
|
}
|
|
|
- else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = log(val2.get<double>())/log(val2.get<double>());
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = log(val2.get<int>()) / log(val1.get<double>());
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- ret = log(val2.get<double>()) / log(val1.get<int>());
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = log(val2.get<int>()) / log(val1.get<int>());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(log(val2[0]) / log(val1[i]));
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::minimum(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(minimum(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(minimum(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(minimum(val1[i], val2[1]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ret.push_back(minimum(val1[i],val2));
|
|
|
+ std::vector<double> ModuleMath::minimum(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(std::min(val1[i], val2[i]));
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(minimum(val1,val2[i]));
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(std::min(val1[0], val2[i]));
|
|
|
}
|
|
|
- } else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if(val1.get<double>()<= val2.get<double>()){
|
|
|
- ret = val1.get<double>();
|
|
|
- } else{
|
|
|
- ret = val2.get<double>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if(val1.get<double>()<= val2.get<int>()*1.0){
|
|
|
- ret = val1.get<double>();
|
|
|
- } else{
|
|
|
- ret = val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if(val1.get<int>()*1.0 <= val2.get<double>()){
|
|
|
- ret = val1.get<int>();
|
|
|
- } else{
|
|
|
- ret = val2.get<double>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if(val1.get<int>()<= val2.get<int>()){
|
|
|
- ret = val1.get<int>();
|
|
|
- } else{
|
|
|
- ret = val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(std::min(val1[i], val2[0]));
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- }
|
|
|
- return ret;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::maximum(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(maximum(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(maximum(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(maximum(val1[i], val2[1]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ret.push_back(maximum(val1[i],val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::maximum(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(std::max(val1[i], val2[i]));
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(maximum(val1,val2[i]));
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if(val1.get<double>()>= val2.get<double>()){
|
|
|
- ret = val1.get<double>();
|
|
|
- } else{
|
|
|
- ret = val2.get<double>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if(val1.get<float>()>= val2.get<int>()*1.0){
|
|
|
- ret = val1.get<double>();
|
|
|
- } else{
|
|
|
- ret = val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if(val1.get<int>()*1.0 >= val2.get<double>()){
|
|
|
- ret = val1.get<int>();
|
|
|
- } else{
|
|
|
- ret = val2.get<double>();
|
|
|
- }
|
|
|
- } else {
|
|
|
- if(val1.get<int>()>= val2.get<int>()){
|
|
|
- ret = val1.get<int>();
|
|
|
- } else{
|
|
|
- ret = val2.get<int>();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(std::max(val1[0], val2[i]));
|
|
|
+ }
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(std::max(val1[i], val2[0]));
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::less(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(less(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(less(val1[1], val2[i]));
|
|
|
- }
|
|
|
- if (1 == val2.size()) {
|
|
|
- ret.push_back(less(val1[i], val2[1]));
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- ret.push_back(less(val1[i], val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::less(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(val1[i] > val2[i]);
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(less(val1, val2[i]));
|
|
|
- }
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(val1[0] > val2[i]);
|
|
|
}
|
|
|
- else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if (val1.get<double>() < val2.get<double>()) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val1.get<float>() < val2.get<int>() * 1.0) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if (val1.get<int>() * 1.0 < val2.get<double>()) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val1.get<int>() < val2.get<int>()) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(val1[i] > val2[0]);
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- json ModuleMath::greater(const json &val1, const json &val2){
|
|
|
- json ret = json::array();
|
|
|
- if (val1.is_array()) {
|
|
|
- size_t size = std::max(val1.size(), val2.size());
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- if (val2.is_array()) {
|
|
|
- if (val1.size() == val2.size()) {
|
|
|
- ret.push_back(greater(val1[i], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val1.size()) {
|
|
|
- ret.push_back(greater(val1[1], val2[i]));
|
|
|
- }
|
|
|
- else if (1 == val2.size()) {
|
|
|
- ret.push_back(greater(val1[i], val2[1]));
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- ret.push_back(greater(val1[i], val2));
|
|
|
- }
|
|
|
+ std::vector<double> ModuleMath::greater(const std::vector<double>&val1, const std::vector<double>&val2){
|
|
|
+ std::vector<double> ret; //= json::array();
|
|
|
+ size_t length = std::max(val1.size(), val2.size());
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (val1.size() == val2.size()) {
|
|
|
+ ret.push_back(val1[i] < val2[i]);
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_array()) {
|
|
|
- for (int i = 0; i < val2.size(); i++) {
|
|
|
- ret.push_back(greater(val1, val2[i]));
|
|
|
- }
|
|
|
+ else if (1 == val1.size()) {
|
|
|
+ ret.push_back(val1[0] < val2[i]);
|
|
|
}
|
|
|
- else {
|
|
|
- if (val1.is_number() && val2.is_number()) {
|
|
|
- if (val1.is_number_float()) {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if (val1.get<double>() > val2.get<double>()) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val1.get<float>() > val2.get<int>() * 1.0) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val2.is_number_float()) {
|
|
|
- if (val1.get<int>() * 1.0 > val2.get<double>()) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (val1.get<int>() > val2.get<int>()) {
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ else if (1 == val2.size()) {
|
|
|
+ ret.push_back(val1[i] < val2[0]);
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
state ModuleMath::update() {
|
|
|
- json ret = getOutput(0)->getValue()["value"];
|
|
|
+ std::vector<double> ret = getOutput(0)->getValue();
|
|
|
|
|
|
switch (_operation) {
|
|
|
case MathOperation::ADD:
|
|
|
- ret = add(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = add(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::SUBTRACT:
|
|
|
- ret = subtract(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = subtract(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::MULTIPLY:
|
|
|
- ret = multiply(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = multiply(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::DIVIDE:
|
|
|
- ret = divide(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = divide(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::POWER:
|
|
|
- ret = power(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = power(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::LOGARITHM:
|
|
|
- ret = logarithm(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = logarithm(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::MINIMUM:
|
|
|
- ret = minimum(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = minimum(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::MAXIMUM:
|
|
|
- ret = maximum(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = maximum(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::LESS_THAN:
|
|
|
- ret = less(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = less(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
|
|
|
case MathOperation::GREATER_THAN:
|
|
|
- ret = greater(getInput(0)->getValue()["value"], getInput(1)->getValue()["value"]);
|
|
|
+ ret = greater(getInput(0)->getValue(), getInput(1)->getValue());
|
|
|
break;
|
|
|
}
|
|
|
- getOutput(0)->resetState();
|
|
|
- if (ret.dump() != getOutput(0)->getValue()["value"].dump()) {
|
|
|
- getOutput(0)->getValueInternal()["value"] = ret ;
|
|
|
- }
|
|
|
- return getOutput(0)->getState();
|
|
|
+
|
|
|
+ return getOutput(0)->setValue(ret);
|
|
|
}
|
|
|
|
|
|
|