private Iterator<BackendEntry> ltQuery(Id indexLabelId, Object keyMax, boolean keyMaxEq) { NavigableMap<Id, BackendEntry> rs = this.store(); Map<Id, BackendEntry> results = new HashMap<>(); Id min = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, 0L); Id max = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMax); Map.Entry<Id, BackendEntry> entry = keyMaxEq ? rs.floorEntry(max) : rs.lowerEntry(max); while (entry != null) { if (entry.getKey().compareTo(min) < 0) { break; } results.put(entry.getKey(), entry.getValue()); entry = rs.lowerEntry(entry.getKey()); } return results.values().iterator(); }
private Iterator<BackendEntry> gtQuery(Id indexLabelId, Object keyMin, boolean keyMinEq) { NavigableMap<Id, BackendEntry> rs = this.store(); Map<Id, BackendEntry> results = new HashMap<>(); Id min = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMin); indexLabelId = IdGenerator.of(indexLabelId.asLong() + 1L); Id max = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, 0L); Map.Entry<Id, BackendEntry> entry = keyMinEq ? rs.ceilingEntry(min) : rs.higherEntry(min); while (entry != null) { if (entry.getKey().compareTo(max) >= 0) { break; } results.put(entry.getKey(), entry.getValue()); entry = rs.higherEntry(entry.getKey()); } return results.values().iterator(); }
private Iterator<BackendEntry> betweenQuery(Id indexLabelId, Object keyMax, boolean keyMaxEq, Object keyMin, boolean keyMinEq) { NavigableMap<Id, BackendEntry> rs = this.store(); Id min = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMin); Id max = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMax); max = keyMaxEq ? rs.floorKey(max) : rs.lowerKey(max); if (max == null) { return Collections.emptyIterator(); } Map<Id, BackendEntry> results = new HashMap<>(); Map.Entry<Id, BackendEntry> entry = keyMinEq ? rs.ceilingEntry(min) : rs.higherEntry(min); while (entry != null) { if (entry.getKey().compareTo(max) > 0) { break; } results.put(entry.getKey(), entry.getValue()); entry = rs.higherEntry(entry.getKey()); } return results.values().iterator(); } }
private Iterator<BackendEntry> ltQuery(Id indexLabelId, Object keyMax, boolean keyMaxEq) { NavigableMap<Id, BackendEntry> rs = this.store(); Map<Id, BackendEntry> results = new HashMap<>(); Id min = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, 0L); Id max = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMax); Map.Entry<Id, BackendEntry> entry = keyMaxEq ? rs.floorEntry(max) : rs.lowerEntry(max); while (entry != null) { if (entry.getKey().compareTo(min) < 0) { break; } results.put(entry.getKey(), entry.getValue()); entry = rs.lowerEntry(entry.getKey()); } return results.values().iterator(); }
private Iterator<BackendEntry> betweenQuery(Id indexLabelId, Object keyMax, boolean keyMaxEq, Object keyMin, boolean keyMinEq) { NavigableMap<Id, BackendEntry> rs = this.store(); Id min = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMin); Id max = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMax); max = keyMaxEq ? rs.floorKey(max) : rs.lowerKey(max); if (max == null) { return Collections.emptyIterator(); } Map<Id, BackendEntry> results = new HashMap<>(); Map.Entry<Id, BackendEntry> entry = keyMinEq ? rs.ceilingEntry(min) : rs.higherEntry(min); while (entry != null) { if (entry.getKey().compareTo(max) > 0) { break; } results.put(entry.getKey(), entry.getValue()); entry = rs.higherEntry(entry.getKey()); } return results.values().iterator(); } }
private Iterator<BackendEntry> gtQuery(Id indexLabelId, Object keyMin, boolean keyMinEq) { NavigableMap<Id, BackendEntry> rs = this.store(); Map<Id, BackendEntry> results = new HashMap<>(); Id min = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, keyMin); indexLabelId = IdGenerator.of(indexLabelId.asLong() + 1L); Id max = HugeIndex.formatIndexId(HugeType.RANGE_INDEX, indexLabelId, 0L); Map.Entry<Id, BackendEntry> entry = keyMinEq ? rs.ceilingEntry(min) : rs.higherEntry(min); while (entry != null) { if (entry.getKey().compareTo(max) >= 0) { break; } results.put(entry.getKey(), entry.getValue()); entry = rs.higherEntry(entry.getKey()); } return results.values().iterator(); }