summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/hobgoblin/compiler/util/ManyToMany.java
blob: e5113d946c949db9c4594cfc53199075f983e293 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package org.zwobble.hobgoblin.compiler.util;

import java.util.*;

public class ManyToMany<TLeft, TRight> {
    private final Map<TLeft, List<TRight>> leftToRight = new HashMap<>();
    private final Map<TRight, List<TLeft>> rightToLeft = new HashMap<>();

    public ManyToMany() {}

    public List<TRight> leftToRight(TLeft left) {
        var rights = this.leftToRight.get(left);
        if (rights == null) {
            return List.of();
        } else {
            return Collections.unmodifiableList(rights);
        }
    }

    public List<TLeft> 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);
    }
}