package org.zwobble.hobgoblin.compiler.util; import java.util.*; public class ManyToMany { private final Map> leftToRight = new HashMap<>(); private final Map> rightToLeft = new HashMap<>(); public ManyToMany() {} public List leftToRight(TLeft left) { var rights = this.leftToRight.get(left); if (rights == null) { return List.of(); } else { return Collections.unmodifiableList(rights); } } public List rightToLeft(TRight right) { var lefts = this.rightToLeft.get(right); if (lefts == null) { return List.of(); } else { return Collections.unmodifiableList(lefts); } } public void add(TLeft left, TRight right) { this.leftToRight.putIfAbsent(left, new ArrayList<>()); this.leftToRight.get(left).add(right); this.rightToLeft.putIfAbsent(right, new ArrayList<>()); this.rightToLeft.get(right).add(left); } }