private void _iter(IArgumentType arg) { if (arg.isEnumType()) { for (INameValuePair nvp : arg.getValues()) { iterate(arg, nvp.getArgTypes(), nvp.getName()); } } else if (arg.isIndexedType()) { iterateIndexedChildren(arg.getChildren()); } }
private void iterateIndexedChildren(IArgumentType[] args) { for (IArgumentType subArg : args) { if (!subArg.isIndexedType()) { iter(subArg); } else { iterateIndexedChildren(subArg.getChildren()); } } }
private void iterate(IArgumentType parent, IArgumentType[] args, String value) { // Recurse with bredth first, not depth for (IArgumentType arg : args) { if (isValidArg(parent, value) && !arg.isIndexedType()) { boolean result = iter(arg); if (!result) return; } } for (IArgumentType arg : args) { if (isValidArg(parent, value)) { _iter(arg); } } }
@Override INameValuePair decodeToNV(final IArgumentType argType) { if (!isInt(argType)) return null; int result = 0; int[] data = protocol.getDataAsInts(); if (argType.getSizeInBytes() >= 4 && protocol.isMsbFirst()) { for (int i = 0; i < Math.min(4, argType.getSizeInBytes()); i++) { result += data[argType.getStartByteIndex() + i] << ((argType.getSizeInBytes() - 1 - i) * 8); } } else { for (int i = 0; i < argType.getSizeInBytes(); i++) { result += data[argType.getStartByteIndex() + i] << (i * 8); } } if (argType.isEnumType()) { return argType.nvpOf(result); } return new NameValuePair(argType.nameOf(result), result); }