001package org.clafer.ir;
002
003import gnu.trove.TIntCollection;
004import gnu.trove.iterator.TIntIterator;
005import org.clafer.collection.EmptyIntIterator;
006
007/**
008 * A domain of size 0. Contains nothing.
009 *
010 * @author jimmy
011 */
012public class IrEmptyDomain implements IrDomain {
013
014    /**
015     * {@inheritDoc}
016     */
017    @Override
018    public boolean isBounded() {
019        return false;
020    }
021
022    /**
023     * {@inheritDoc}
024     */
025    @Override
026    public boolean contains(int value) {
027        return false;
028    }
029
030    /**
031     * {@inheritDoc}
032     */
033    @Override
034    public int getLowBound() {
035        throw new IrException("Emtpy domain does not have a low bound.");
036    }
037
038    /**
039     * {@inheritDoc}
040     */
041    @Override
042    public int getHighBound() {
043        throw new IrException("Emtpy domain does not have a high bound.");
044    }
045
046    /**
047     * {@inheritDoc}
048     */
049    @Override
050    public boolean isEmpty() {
051        return true;
052    }
053
054    /**
055     * {@inheritDoc}
056     */
057    @Override
058    public int size() {
059        return 0;
060    }
061
062    /**
063     * {@inheritDoc}
064     */
065    @Override
066    public int[] getValues() {
067        return new int[]{};
068    }
069
070    /**
071     * {@inheritDoc}
072     */
073    @Override
074    public TIntIterator iterator() {
075        return EmptyIntIterator.getIterator();
076    }
077
078    /**
079     * {@inheritDoc}
080     */
081    @Override
082    public TIntIterator iterator(boolean increasing) {
083        return EmptyIntIterator.getIterator();
084    }
085
086    /**
087     * {@inheritDoc}
088     */
089    @Override
090    public void transferTo(TIntCollection collection) {
091    }
092
093    /**
094     * {@inheritDoc}
095     */
096    @Override
097    public boolean equals(Object obj) {
098        return obj instanceof IrEmptyDomain;
099    }
100
101    /**
102     * {@inheritDoc}
103     */
104    @Override
105    public int hashCode() {
106        return 305419896;
107    }
108
109    /**
110     * {@inheritDoc}
111     */
112    @Override
113    public String toString() {
114        return "{}";
115    }
116}