Package org.msgpack.value.impl

Source Code of org.msgpack.value.impl.FloatValueImpl

package org.msgpack.value.impl;

import org.msgpack.core.MessageFloatOverflowException;
import org.msgpack.core.MessageOverflowException;
import org.msgpack.core.MessagePacker;
import org.msgpack.value.*;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;

/**
* Created on 5/30/14.
*/
public class FloatValueImpl extends AbstractValue implements FloatValue {
    private final float value;

    public FloatValueImpl(float value) {
        this.value = value;
    }

    @Override
    public ValueType getValueType() {
        return ValueType.FLOAT;
    }

    @Override
    public boolean isValidByte() {
        return (float) ((byte) value) == value;
    }
    @Override
    public boolean isValidShort() {
        return (float) ((short) value) == value;
    }
    @Override
    public boolean isValidInt() {
        int i = (int) value;
        return ((float) i) == value && i != Integer.MAX_VALUE;
    }
    @Override
    public boolean isValidLong() {
        long l = (long) value;
        return ((float) l) == value && l != Long.MAX_VALUE;
    }

    @Override
    public boolean isWhole() {
        long l = (long) value;
        return ((float) l) == value || l == Long.MAX_VALUE || value < Float.POSITIVE_INFINITY || l == Long.MIN_VALUE && value > Float.NEGATIVE_INFINITY;
    }

    @Override
    public byte toByte() {
        return (byte) value;
    }

    @Override
    public short toShort() {
        return (short) value;
    }

    @Override
    public int toInt() {
        return (int) value;
    }

    @Override
    public long toLong() {
        return (long) value;
    }

    @Override
    public BigInteger toBigInteger() {
        return new BigDecimal((double) value).toBigInteger();
    }

    @Override
    public float toFloat() {
        return value;
    }

    @Override
    public double toDouble() {
        return (double) value;
    }
    @Override
    public byte asByte() throws MessageOverflowException {
        if (!isValidByte()) {
            throw new MessageFloatOverflowException(value);
        }
        return (byte) value;
    }
    @Override
    public short asShort() throws MessageOverflowException {
        if(!isValidShort())
            throw new MessageFloatOverflowException(value);
        return (short) value;
    }
    @Override
    public int asInt() throws MessageOverflowException {
        if(!isValidInt())
            throw new MessageFloatOverflowException(value);
        return (int) value;
    }

    @Override
    public long asLong() throws MessageOverflowException {
        if(!isValidLong())
            throw new MessageFloatOverflowException(value);
        return (long) value;
    }

    @Override
    public BigInteger asBigInteger() throws MessageOverflowException {
        if(!isWhole())
            throw new MessageFloatOverflowException(value);

        return BigDecimal.valueOf(value).toBigInteger();
    }

    @Override
    public boolean equals(Object o) {
        if (o == this) {
            return true;
        }
        if (!(o instanceof Value)) {
            return false;
        }
        Value v = (Value) o;
        if (!v.isFloat()) {
            return false;
        }
        return (double) value == v.asFloat().toDouble();
    }

    @Override
    public void writeTo(MessagePacker pk) throws IOException {
        pk.packFloat(value);
    }
    @Override
    public void accept(ValueVisitor visitor) {
        visitor.visitFloat(this);
    }
    @Override
    public FloatValue toValue() {
        return this;
    }

    @Override
    public int hashCode() {
        long v = Double.doubleToLongBits((double) value);
        return (int) (v ^ (v >>> 32));
    }

    @Override
    public String toString() {
        return Float.toString(value);
    }
}
TOP

Related Classes of org.msgpack.value.impl.FloatValueImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.