@Override public boolean hasNext() { return cursor < collection.size() && iterator.hasNext(); } }
@Override public BValue getNext() { if (cursor++ == collection.size()) { return null; } List<BType> types = new LinkedList<>(); types.add(BTypes.typeString); types.add(BTypes.typeAny); BTupleType tupleType = new BTupleType(types); Map.Entry<K, V> next = iterator.next(); BValueArray tuple = new BValueArray(tupleType); BString key = new BString((String) next.getKey()); tuple.add(0, key); BRefType value = (BRefType<?>) next.getValue(); tuple.add(1, value); return tuple; }
/** * Deep equality check for a map. * * @param lhsMap Map on the left hand side * @param rhsMap Map on the right hand side * @param checkedValues Structured value pairs already compared or being compared * @return True if the map values are equal, else false. */ private static boolean isEqual(BMap lhsMap, BMap rhsMap, List<ValuePair> checkedValues) { ValuePair compValuePair = new ValuePair(lhsMap, rhsMap); if (checkedValues.contains(compValuePair)) { return true; } checkedValues.add(compValuePair); if (lhsMap.size() != rhsMap.size()) { return false; } if (!lhsMap.getMap().keySet().containsAll(rhsMap.getMap().keySet())) { return false; } Iterator<Map.Entry<String, BValue>> mapIterator = lhsMap.getMap().entrySet().iterator(); while (mapIterator.hasNext()) { Map.Entry<String, BValue> lhsMapEntry = mapIterator.next(); if (!isEqual(lhsMapEntry.getValue(), rhsMap.get(lhsMapEntry.getKey()), checkedValues)) { return false; } } return true; }
return; } else if (entity instanceof BMap) { sf.longRegs[j] = ((BMap) entity).size(); return; } else if (entity instanceof BNewArray) {
private String getStringValue(BValue bValue) { String bValueString; if (bValue == null) { bValueString = null; } else if (bValue instanceof BValueType || bValue instanceof BXML || bValue.getType().getTag() == TypeTags.JSON) { bValueString = bValue.stringValue(); } else if (bValue instanceof BNewArray) { BNewArray bArray = (BNewArray) bValue; bValueString = "Array[" + bArray.size() + "] "; bValueString = bValueString + bArray.stringValue(); } else if (bValue.getType().getTag() == TypeTags.MAP) { BMap bmap = (BMap) bValue; bValueString = "Map[" + bmap.size() + "] "; bValueString = bValueString + bmap.stringValue(); } else if (bValue.getType().getTag() == TypeTags.RECORD) { bValueString = "Record " + bValue.getType().getName() + " "; bValueString = bValueString + bValue.stringValue(); } else if (bValue.getType().getTag() == TypeTags.OBJECT) { bValueString = "Object " + bValue.getType().getName() + " "; bValueString = bValueString + ((BMap) bValue).absoluteStringValue(); } else { bValueString = "<Complex_Value>"; } return bValueString; }