package com.linkedin.thirdeye.dashboard.views.diffsummary; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.linkedin.thirdeye.client.diffsummary.HierarchyNode; public class DPArray { double targetRatio; List<DPSlot> slots; int size; int shrankSize; public DPArray(int size) { slots = new ArrayList<>(size); for (int i = 0; i < size; ++i) { slots.add(new DPSlot()); } this.size = size; this.shrankSize = size; } public DPSlot slotAt(int index) { return slots.get(index); } public int maxSize() { return this.size; } public int size() { return this.shrankSize; } public void setShrinkSize(int size) { this.shrankSize = size; } public Set<HierarchyNode> getAnswer() { return slots.get(this.shrankSize - 1).ans; } public void reset() { targetRatio = 0.; for (DPSlot slot : slots) { slot.cost = 0.; slot.ans.clear(); } } public void fullReset() { reset(); shrankSize = size; } public String toString() { if (slots != null) { StringBuilder sb = new StringBuilder(); for (DPSlot slot : slots) { sb.append(ToStringBuilder.reflectionToString(slot, ToStringStyle.SHORT_PREFIX_STYLE)); sb.append('\n'); } return sb.toString(); } else return ""; } public static class DPSlot { double cost; Set<HierarchyNode> ans = new HashSet<>(); public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } } }