001/**
002 *   Copyright (C) 2015 Typesafe Inc. <http://typesafe.com>
003 */
004package com.typesafe.config;
005
006/**
007 * An immutable class representing an amount of memory.  Use
008 * static factory methods such as {@link
009 * ConfigMemorySize#ofBytes(long)} to create instances.
010 *
011 * @since 1.3.0
012 */
013public final class ConfigMemorySize {
014    private final long bytes;
015
016    private ConfigMemorySize(long bytes) {
017        if (bytes < 0)
018            throw new IllegalArgumentException("Attempt to construct ConfigMemorySize with negative number: " + bytes);
019        this.bytes = bytes;
020    }
021
022    /**
023     * Constructs a ConfigMemorySize representing the given
024     * number of bytes.
025     * @since 1.3.0
026     * @param bytes a number of bytes
027     * @return an instance representing the number of bytes
028     */
029    public static ConfigMemorySize ofBytes(long bytes) {
030        return new ConfigMemorySize(bytes);
031    }
032
033    /**
034     * Gets the size in bytes.
035     * @since 1.3.0
036     * @return how many bytes
037     */
038    public long toBytes() {
039        return bytes;
040    }
041
042    @Override
043    public String toString() {
044        return "ConfigMemorySize(" + bytes + ")";
045    }
046
047    @Override
048    public boolean equals(Object other) {
049        if (other instanceof ConfigMemorySize) {
050            return ((ConfigMemorySize)other).bytes == this.bytes;
051        } else {
052            return false;
053        }
054    }
055
056    @Override
057    public int hashCode() {
058        // in Java 8 this can become Long.hashCode(bytes)
059        return Long.valueOf(bytes).hashCode();
060    }
061
062}
063