diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java index 6ce02cd..4a498b1 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java @@ -1,6 +1,7 @@ package models.dataConstraintModel; import java.util.AbstractMap; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -76,6 +77,8 @@ return new Constant(Long.toString(Long.parseLong(sArg0) + Long.parseLong(sArg1)), typeLong); } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { return new Constant(Integer.toString(Integer.parseInt(sArg0) + Integer.parseInt(sArg1)), typeInt); + } else if (arg0.getType().equals(typeString) || arg1.getType().equals(typeString)) { + return new Constant((String) arg0.getValue() + (String) arg1.getValue(), typeString); } } if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { @@ -595,6 +598,21 @@ keySet.addAll(((JsonTerm) term).keySet()); return new Constant(Integer.toString(keySet.size()), typeInt); } + } else if (typeString.isAncestorOf(type)) { + int len = 0; + ArrayDeque strTerms = new ArrayDeque<>(); + strTerms.add(term); + while (strTerms.size() > 0) { + term = strTerms.poll(); + type = term.getType(); + if (term.getSymbol().equals(DataConstraintModel.add)) { + strTerms.add((Term) term.getChild(0)); + strTerms.add((Term) term.getChild(1)); + } else if (term instanceof Constant && typeString.isAncestorOf(type)) { + len += ((String) ((Constant) term).getValue()).length(); + } + } + return new Constant(Integer.toString(len), typeInt); } } return null;