package org.argeo.app.api; /** A range of numerical IDs (typically numerical uid or gid). */ public class IdRange { private final long min; private final long max; public IdRange(long min, long max) { this.min = min; this.max = max; } public IdRange(long minPow10) { this(minPow10, maxFromMinPow10(minPow10)); } public long getMin() { return min; } public long getMax() { return max; } private static long maxFromMinPow10(long minPow10) { if ((minPow10 % 100) != 0) { throw new IllegalArgumentException(minPow10 + " must at least ends with two zeroes"); } int exp = 2; exp: for (int i = exp + 1; i < 10; i++) { if ((minPow10 % pow10(i)) != 0) break exp; exp++; } System.out.println(exp); long max = minPow10 + pow10(exp) - 1; return max; } /** Power of 10. */ private static long pow10(int exp) { if (exp == 0) return 1; else return 10 * pow10(exp - 1); } public static void main(String... args) { System.out.println(maxFromMinPow10(100)); System.out.println(maxFromMinPow10(78500)); System.out.println(maxFromMinPow10(716850000)); // System.out.println(pow10(6)); // System.out.println(maxFromMinPow10(12)); // System.out.println(maxFromMinPow10(124)); // System.out.println(maxFromMinPow10(99814565)); } }