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

io.vertx.sqlclient.impl.HexSequence Maven / Gradle / Ivy

There is a newer version: 5.0.0.CR3
Show newest version
/*
 * Copyright (c) 2021 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 * which is available at https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 */

package io.vertx.sqlclient.impl;

/**
 * A sequence of hex values, each terminated by a zero byte.
 *
 * 

The hex number is left padded to start with at least three 0 * and to have at least seven digits. * *

After 000FFFFFFFFFFFFFFFF it will restart with 0000000. * *

The generated sequence: *

 * 0000000
 * 0000001
 * 0000002
 * ...
 * 000FFFF
 * 00010000
 * ...
 * 000FFFFF
 * 000100000
 * ...
 * 000FFFFFF
 * 0001000000
 * ...
 * 000FFFFFFFFFFFFFFFF
 * 
*/ public class HexSequence { private long i; /** * Start the sequence with 0000000. */ public HexSequence() { i = 0; } /** * @param startValue unsigned long for the first value returned by {@link #next()} */ public HexSequence(long startValue) { i = startValue; } private static byte toHex(long c) { if (c < 10) { return (byte)('0' + c); } else { return (byte)('A' + c - 10); } } /** * A copy of the next hex value, terminated by a zero byte. */ public byte[] next() { int len = 3 // 3 leading zeroes + (64 - Long.numberOfLeadingZeros(i) + 3) / 4 // hex characters + 1; // tailing null byte len = Math.max(8, len); // at least 7 hex digits plus null byte byte [] hex = new byte [len]; int pos = len - 1; hex[pos--] = '\0'; long n = i; while (n != 0) { hex[pos--] = toHex(n & 0xf); n >>>= 4; } while (pos >= 0) { hex[pos--] = '0'; } i++; return hex; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy