root/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/UnsignedInt64.java
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 *
 * ident        "%Z%%M% %I%     %E% SMI"
 */

package com.sun.solaris.service.pools;

import java.math.BigInteger;

public class UnsignedInt64 extends BigInteger {
        /**
         * The minimum value is 0.
         */
        public final static BigInteger MIN_VALUE = new BigInteger("0");

        /**
         * The maximum value is 18446744073709551615.
         */
        public final static BigInteger MAX_VALUE = new BigInteger(
            "18446744073709551615");

        /**
         * Constructs a UnsignedInt64 with the same value as the given
         * string, interpreted in base 10.
         *
         * @throws NumberFormatException if the given value is outside
         * the representable range.
         */
        public UnsignedInt64(String string) throws NumberFormatException
        {
                super(string);
                validate(this);
        }

        /**
         * Constructs a UnsignedInt64 with the same value as the given
         * string, interpreted in the given base.
         *
         * @throws NumberFormatException if the given value is outside
         * the representable range.
         */
        public UnsignedInt64(String string, int radix)
            throws NumberFormatException
        {
                super(string, radix);
                validate(this);
        }

        /**
         * Constructs a UnsignedInt64 with the same value as the given
         * byte array, interpreted as a two's-complement number in
         * big-endian byte order (the most significant byte has the
         * lowest index).
         *
         * @throws NumberFormatException if the given value is outside
         * the representable range.
         */
        public UnsignedInt64(byte[] bytes) throws NumberFormatException
        {
                super(bytes);
                validate(this);
        }

        /**
         * Constructs an UnsignedInt64 with the same value as the given
         * BigInteger.
         *
         * @throws NumberFormatException if the given value is outside
         * the representable range.
         */
        public UnsignedInt64(BigInteger value) throws NumberFormatException
        {
                super(value.toByteArray());
                validate(this);
        }

        /**
         * Check that the supplied parameter is a valid value for an
         * UnsignedInt64.
         *
         * @param v A BigInteger to be checked if it's value is legal
         * as an UnsignedInt64.
         * @throws NumberFormatException if the given value is outside
         * the representable range.
         */
        private void validate(BigInteger v)
        {
                if (v.compareTo(MIN_VALUE) < 0 || v.compareTo(MAX_VALUE) > 0)
                        throw(new NumberFormatException());
        }
}