All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.datatorrent.lib.util.BaseNumberKeyValueOperator Maven / Gradle / Ivy

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.datatorrent.lib.util;

import javax.validation.constraints.NotNull;

/**
 * This is an abstract operator,
 * which provides a base implementation for operators which work with key value pairs,
 * where the values are numbers.
 * 

* Provides basic methods for value conversion

*
* Benchmarks: Not done as emit is done by sub-classes
*

* @displayName Base Number Key Value * @category Algorithmic * @tags numeric, key value * @since 0.3.2 */ public class BaseNumberKeyValueOperator extends BaseFilteredKeyValueOperator { public enum V_TYPE { DOUBLE, INTEGER, FLOAT, LONG, SHORT, UNKNOWN } @NotNull V_TYPE type = V_TYPE.DOUBLE; /** * This call ensures that type enum is set at setup time. At run time a switch statement suffices * If you derive your * @param ctype the type to set the operator to */ public void setType(Class ctype) { if (ctype == Double.class) { type = V_TYPE.DOUBLE; } else if (ctype == Integer.class) { type = V_TYPE.INTEGER; } else if (ctype == Float.class) { type = V_TYPE.FLOAT; } else if (ctype == Long.class) { type = V_TYPE.LONG; } else if (ctype == Short.class) { type = V_TYPE.SHORT; } else { type = V_TYPE.UNKNOWN; } } /** * This is a constructor provided to clone Number. Since V is instantiation time and not known during module creation, a copy * is needed. Currently only the following are supported: Double, Integer, Float, Long, and Short. If you derive your own class from Number * then you need to override getValue to help make a correct copy. * @param num to clone from * @return value as a correct sub-class (V) object */ @SuppressWarnings("unchecked") public V getValue(Number num) { Number val; switch (type) { case DOUBLE: val = num.doubleValue(); break; case INTEGER: val = num.intValue(); break; case FLOAT: val = num.floatValue(); break; case LONG: val = num.longValue(); break; case SHORT: val = num.shortValue(); break; default: val = num.doubleValue(); break; } return (V)val; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy