BasicMachine.java

package neureka.devices.host.machine;

/**
 * How much memory, and how many threads share that memory.
 * This is used to describe either total system resources
 * (system RAM and total number of threads handled by the processors) or a cache (processor's L1, L2 or L3
 * cache).
 *
 */
public class BasicMachine
{
    private static final String BYTES   = "bytes/";
    private static final String GIGA    = "GB/";
    private static final String KILO    = "kB/";
    private static final String MEGA    = "MB/";
    private static final String THREAD  = "thread";
    private static final String THREADS = "threads";

    public final long memory;
    public final int  threads;

    public BasicMachine(final long memory, final int threads)
    {
        super();
        this.memory = memory;
        this.threads = threads;
    }

    @SuppressWarnings("unused")
    private BasicMachine() { this(0L, 0); }

    @Override
    public boolean equals(final Object obj)
    {
        if ( this == obj ) return true;
        if ( obj == null ) return false;
        if ( !(obj instanceof BasicMachine) ) return false;
        final BasicMachine other = (BasicMachine) obj;
        if ( memory != other.memory )
            return false;
        else
            return threads == other.threads;
    }

    @Override
    public int hashCode()
    {
        final int prime = 31;
        int result = 1;
        result = (prime * result) + (int) (memory ^ (memory >>> 32));
        result = (prime * result) + threads;
        return result;
    }

    @Override
    public String toString()
    {
        int prefix = 1;
        long measure = memory / CommonMachine.K;

        while ((measure / CommonMachine.K) > 0) {
            prefix++;
            measure /= CommonMachine.K;
        }

        switch ( prefix ) {
            case 1:  return measure + KILO + threads + ((threads == 1) ? THREAD : THREADS);
            case 2:  return measure + MEGA + threads + ((threads == 1) ? THREAD : THREADS);
            case 3:  return measure + GIGA + threads + ((threads == 1) ? THREAD : THREADS);
            default: return memory + BYTES + threads + ((threads == 1) ? THREAD : THREADS);
        }
    }

}