001package com.hammurapi.extract;
002
003import java.util.concurrent.TimeUnit;
004
005
006/**
007 * Numeric add.
008 * @author Pavel Vlasov
009 *
010 * @param <T>
011 * @param <C>
012 */
013public class Add<T, C> extends ArithmeticExtractor<T, Object, C> {
014
015        public Add(double initialCost, TimeUnit costUnit, Extractor<T, Object, C> leftExtractor, Extractor<T, Object, C> rightExtractor) {
016                super(initialCost, costUnit, leftExtractor, rightExtractor, false);
017        }
018
019        @Override
020        protected Object doOp(Object o1, Object o2) {
021                if (o1 instanceof String || o2 instanceof String) {
022                        return ""+o1+o2;
023                }
024                throw new IllegalArgumentException("Can't add "+o1+" and "+o2);
025        }
026
027        @Override
028        protected Object doOp(int n1, int n2) {
029                return n1+n2;
030        }
031
032        @Override
033        protected Object doOp(long n1, long n2) {
034                return n1+n2;
035        }
036
037        @Override
038        protected Object doOp(float n1, float n2) {
039                return n1+n2;
040        }
041
042        @Override
043        protected Object doOp(double n1, double n2) {
044                return n1+n2;
045        }
046
047        @Override
048        protected Extractor<T, Object, C> newInstance(Extractor<T, Object, C> leftExtractor, Extractor<T, Object, C> rightExtractor) {
049                return new Add<T,C>(initialCost, costUnit, leftExtractor, rightExtractor);
050        }
051}