GP-1657 - Fixed display of multiple Enum values

Closes #3810
This commit is contained in:
dragonmacher
2022-01-07 12:57:52 -05:00
parent cdc4f4714a
commit 434ec00d17
3 changed files with 13 additions and 36 deletions

View File

@@ -528,7 +528,7 @@ class EnumDB extends DataTypeDB implements Enum {
if (subValue != 0) {
String part = getName(subValue);
if (part == null) {
part = getStringForNoMatchingValue(subValue);
part = Long.toHexString(subValue).toUpperCase() + 'h';
}
if (buf.length() != 0) {
buf.append(" | ");
@@ -546,19 +546,6 @@ class EnumDB extends DataTypeDB implements Enum {
return bitGroups;
}
private String getStringForNoMatchingValue(long value) {
String valueName;
String valueStr;
if (value < 0 || value >= 32) {
valueStr = "0x" + Long.toHexString(value);
}
else {
valueStr = Long.toString(value);
}
valueName = "" + valueStr;
return valueName;
}
@Override
public boolean isEquivalent(DataType dt) {
if (dt == this) {

View File

@@ -333,7 +333,7 @@ public class EnumDataType extends GenericDataType implements Enum {
if (subValue != 0) {
String part = getName(subValue);
if (part == null) {
part = getStringForNoMatchingValue(subValue);
part = Long.toHexString(subValue).toUpperCase() + 'h';
}
if (buf.length() != 0) {
buf.append(" | ");
@@ -351,19 +351,6 @@ public class EnumDataType extends GenericDataType implements Enum {
return bitGroups;
}
private String getStringForNoMatchingValue(long value) {
String valueName;
String valueStr;
if (value < 0 || value >= 32) {
valueStr = "0x" + Long.toHexString(value);
}
else {
valueStr = Long.toString(value);
}
valueName = "" + valueStr;
return valueName;
}
@Override
public boolean isEquivalent(DataType dt) {
if (dt == this) {

View File

@@ -24,12 +24,12 @@ import java.util.*;
public class EnumValuePartitioner {
private static void merge(List<BitGroup> list, BitGroup bitGroup) {
Iterator<BitGroup> iterator = list.iterator();
while (iterator.hasNext()) {
BitGroup next = iterator.next();
Iterator<BitGroup> it = list.iterator();
while (it.hasNext()) {
BitGroup next = it.next();
if (bitGroup.intersects(next)) {
bitGroup.merge(next);
iterator.remove();
it.remove();
}
}
list.add(bitGroup);
@@ -43,15 +43,18 @@ public class EnumValuePartitioner {
*/
public static List<BitGroup> partition(long[] values, int size) {
List<BitGroup> list = new LinkedList<>();
long totalMask = 0;
long usedBits = 0;
for (long value : values) {
totalMask |= value;
usedBits |= value;
BitGroup bitGroup = new BitGroup(value);
merge(list, bitGroup);
}
// now create a BitGroup for all bits not accounted for
long enumMask = ~(-1 << (size * 8));
list.add(new BitGroup(~totalMask & enumMask));
int bits = size * 8;
long allEnumBits = ~(-1L << bits);
long unusedBits = ~usedBits;
list.add(new BitGroup(unusedBits & allEnumBits));
return list;
}