SCViewer/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/BitValue.java

125 lines
2.1 KiB
Java
Raw Normal View History

/*******************************************************************************
* Copyright (c) 2020 MINRES Technologies GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.database;
/**
* The Enum BitValue.
*/
public enum BitValue {
/** The zero. */
ZERO,
/** The one. */
ONE,
/** The x. */
X,
/** The z. */
Z;
/** The Constant ORDINAL_TABLE. */
private static final BitValue[] ORDINAL_TABLE = BitValue.values();
/**
* From char.
*
* @param c the c
* @return the bit value
*/
public static BitValue fromChar(char c) {
switch (c) {
case '0':
return ZERO;
case '1':
return ONE;
case 'x':
case 'X':
return X;
case 'z':
case 'Z':
return Z;
default:
throw new NumberFormatException("unknown digit " + c);
}
}
/**
* To char.
*
* @return the char
*/
public char toChar() {
switch (this) {
case ZERO:
return '0';
case ONE:
return '1';
case X:
return 'x';
case Z:
return 'z';
}
return ' '; // Unreachable?
}
/**
* From int.
*
* @param i the i
* @return the bit value
*/
public static BitValue fromInt(int i) {
if (i == 0) {
return ZERO;
} else {
return ONE;
}
}
/**
* To int.
*
* @return the int
*/
public int toInt() {
return (this == ONE) ? 1 : 0;
}
/**
* From ordinal.
*
* @param ord the ord
* @return the bit value
*/
public static BitValue fromOrdinal(int ord) {
return ORDINAL_TABLE[ord];
}
/**
* Compare.
*
* @param other the other
* @return the int
*/
public int compare(BitValue other) {
if (this == ONE && other == ZERO) {
return 1;
} else if (this == ZERO && other == ONE) {
return -1;
} else {
// Either these are equal, or there is an X and Z, which match everything.
return 0;
}
}
}