/** * Define the place of the speedBits in the edge flags for car. */ @Override public int defineWayBits(int index, int shift) { // first two bits are reserved for route handling in superclass shift = super.defineWayBits(index, shift); speedEncoder = new EncodedDoubleValue("Speed", shift, speedBits, speedFactor, defaultSpeedMap.get("secondary"), maxPossibleSpeed); return shift + speedEncoder.getBits(); }
@Override public double getReverseSpeed(long flags) { return reverseSpeedEncoder.getDoubleValue(flags); }
@Override public double getMaxSpeed() { return speedEncoder.getMaxValue(); }
@Test public void testSetDoubleValue() { EncodedDoubleValue instance = new EncodedDoubleValue("test", 6, 10, 0.01, 5, 10); assertEquals(10.12, instance.getDoubleValue(instance.setDoubleValue(0, 10.12)), 1e-4); }
@Test public void testUnsignedRightShift_issue417() { EncodedDoubleValue speedEncoder = new EncodedDoubleValue("Speed", 56, 8, 1, 30, 255); Long flags = -72057594037927936L; assertEquals(255, speedEncoder.getDoubleValue(flags), 0.01); } }
@Override public long setDefaultValue(long flags) { return setDoubleValue(flags, defaultValue); }
@Test public void testMaxValue() { EncodedDoubleValue instance1 = new EncodedDoubleValue("test1", 0, 8, 0.5, 60, 100); long flags = instance1.setDoubleValue(0, instance1.getMaxValue()); assertEquals(100, instance1.getDoubleValue(flags), 1e-1); CarFlagEncoder carEncoder = new CarFlagEncoder(10, 0.5, 0); new EncodingManager(carEncoder); ReaderWay way = new ReaderWay(1); way.setTag("highway", "motorway_link"); way.setTag("maxspeed", "70 mph"); flags = carEncoder.handleWayTags(way, 1, 0); // double speed = AbstractFlagEncoder.parseSpeed("70 mph"); flags = carEncoder.reverseFlags(flags); assertEquals(101.5, carEncoder.getSpeed(flags), 1e-1); }
@Override public long flagsDefault(boolean forward, boolean backward) { long flags = super.flagsDefault(forward, backward); if (backward) return reverseSpeedEncoder.setDefaultValue(flags); return flags; }
/** * Swap the contents controlled by this value encoder with the given value. * <p> * @return the new flags */ public long swap( long flags, EncodedDoubleValue otherEncoder ) { double otherValue = otherEncoder.getDoubleValue(flags); flags = otherEncoder.setDoubleValue(flags, getDoubleValue(flags)); return setDoubleValue(flags, otherValue); } }
@Test(expected = IllegalStateException.class) public void testIllegalFactorMaxValueCombination() { new EncodedDoubleValue("illegalcombination", 6, 2, 2, 0, 3); }
public long setDoubleValue(long flags, double value) { if (Double.isNaN(value)) throw new IllegalArgumentException("Value cannot be NaN"); // scale value long tmpValue = Math.round(value / factor); checkValue((long) (tmpValue * factor)); tmpValue <<= shift; // clear value bits flags &= ~mask; // set value return flags | tmpValue; }
@Override protected long setLowSpeed(long flags, double speed, boolean reverse) { if (reverse) return setBool(reverseSpeedEncoder.setDoubleValue(flags, 0), K_BACKWARD, false); return setBool(speedEncoder.setDoubleValue(flags, 0), K_FORWARD, false); }
/** * Sets default flags with specified access. */ public long flagsDefault(boolean forward, boolean backward) { long flags = speedEncoder.setDefaultValue(0); return setAccess(flags, forward, backward); }
public long setDoubleValue(long flags, double value) { if (Double.isNaN(value)) throw new IllegalArgumentException("Value cannot be NaN"); // scale value long tmpValue = Math.round(value / factor); checkValue((long) (tmpValue * factor)); tmpValue <<= shift; // clear value bits flags &= ~mask; // set value return flags | tmpValue; }
@Override public int defineWayBits(int index, int shift) { shift = super.defineWayBits(index, shift); reverseSpeedEncoder = new EncodedDoubleValue("Reverse Speed", shift, speedBits, speedFactor, getHighwaySpeed("cycleway"), maxPossibleSpeed); shift += reverseSpeedEncoder.getBits(); return shift; }
@Override protected long setLowSpeed(long flags, double speed, boolean reverse) { if (reverse) return setBool(reverseSpeedEncoder.setDoubleValue(flags, 0), K_BACKWARD, false); return setBool(speedEncoder.setDoubleValue(flags, 0), K_FORWARD, false); }
@Override public double getReverseSpeed(long flags) { return reverseSpeedEncoder.getDoubleValue(flags); }
@Override public long flagsDefault(boolean forward, boolean backward) { long flags = super.flagsDefault(forward, backward); if (backward) return reverseSpeedEncoder.setDefaultValue(flags); return flags; }
@Override public double getMaxSpeed() { return speedEncoder.getMaxValue(); }
public long setDoubleValue(long flags, double value) { if (Double.isNaN(value)) throw new IllegalArgumentException("Value cannot be NaN"); // scale value long tmpValue = Math.round(value / factor); checkValue((long) (tmpValue * factor)); tmpValue <<= shift; // clear value bits flags &= ~mask; // set value return flags | tmpValue; }