/** * Creates an instance of {@link ObjectGenerator} which multiplies values of given object generators. * * @param type Type object generator will return. * @param factor1 First object generator for multiplication. * @param factor2 Second object generator for multiplication. * @param <T> Type object generator will return. * @return An instance of {@link ObjectGenerator} which multiplies values of given object generators. */ @SuppressWarnings("unchecked") public static <T> ObjectGenerator<T> multiply(Class<T> type, ObjectGenerator<T> factor1, ObjectGenerator<T> factor2) { if (type.equals(Byte.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueByte(factor1.value, factor2.value)); } else if (type.equals(Short.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueShort(factor1.value, factor2.value)); } else if (type.equals(Integer.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueInteger(factor1.value, factor2.value)); } else if (type.equals(Long.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueLong(factor1.value, factor2.value)); } else if (type.equals(Float.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueFloat(factor1.value, factor2.value)); } else if (type.equals(Double.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueDouble(factor1.value, factor2.value)); } else { throw new RuntimeException("Type: " + type.getName() + " not supported."); } }
/** * Creates an instance of {@link ObjectGenerator} which multiplies values of given object generators. * * @param type Type object generator will return. * @param factor1 First object generator for multiplication. * @param factor2 Second object generator for multiplication. * @param <T> Type object generator will return. * @return An instance of {@link ObjectGenerator} which multiplies values of given object generators. */ @SuppressWarnings("unchecked") public static <T> ObjectGenerator<T> multiply(Class<T> type, ObjectGenerator<T> factor1, ObjectGenerator<T> factor2) { if (type.equals(Byte.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueByte(factor1.value, factor2.value)); } else if (type.equals(Short.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueShort(factor1.value, factor2.value)); } else if (type.equals(Integer.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueInteger(factor1.value, factor2.value)); } else if (type.equals(Long.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueLong(factor1.value, factor2.value)); } else if (type.equals(Float.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueFloat(factor1.value, factor2.value)); } else if (type.equals(Double.class)) { return (ObjectGenerator<T>) wrap(new MultiplicationValueDouble(factor1.value, factor2.value)); } else { throw new RuntimeException("Type: " + type.getName() + " not supported."); } }
/** * Creates multiplication value. * * @return An multiplication value. */ @SuppressWarnings("rawtypes") protected Object createMultiplicationValue() { String type = (String) pop(2); Value factor1 = (Value) pop(1); Value factor2 = (Value) pop(); switch (type) { case "byte": return new MultiplicationValueByte(factor1, factor2); case "short": return new MultiplicationValueShort(factor1, factor2); case "int": return new MultiplicationValueInteger(factor1, factor2); case "long": return new MultiplicationValueLong(factor1, factor2); case "float": return new MultiplicationValueFloat(factor1, factor2); case "double": return new MultiplicationValueDouble(factor1, factor2); default: throw new RuntimeException("Unsupported type for multplication value. Type: " + type); } }
/** * Creates multiplication value. * * @return An multiplication value. */ @SuppressWarnings("rawtypes") protected Object createMultiplicationValue() { String type = (String) pop(2); Value factor1 = (Value) pop(1); Value factor2 = (Value) pop(); switch (type) { case "byte": return new MultiplicationValueByte(factor1, factor2); case "short": return new MultiplicationValueShort(factor1, factor2); case "int": return new MultiplicationValueInteger(factor1, factor2); case "long": return new MultiplicationValueLong(factor1, factor2); case "float": return new MultiplicationValueFloat(factor1, factor2); case "double": return new MultiplicationValueDouble(factor1, factor2); default: throw new RuntimeException("Unsupported type for multplication value. Type: " + type); } }