aboutsummaryrefslogtreecommitdiffstats
path: root/model-data/src/main/java/org/eclipse/viatra/solver/data/model/Model.java
blob: 18fab2bf88b68c555bc42b4dbac6a6c7b365f24b (plain) (blame)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package org.eclipse.viatra.solver.data.model;

import java.util.Map;
import java.util.Set;

import org.eclipse.viatra.solver.data.map.Versioned;
import org.eclipse.viatra.solver.data.map.VersionedMap;
import org.eclipse.viatra.solver.data.model.symbols.Symbol;

public class Model implements Versioned {
	private final ModelStore store;
	private final Map<Symbol, VersionedMap<Tuple,Object>> maps;

	public Model(ModelStore store, Map<Symbol, VersionedMap<Tuple, Object>> maps) {
		this.store = store;
		this.maps = maps;
	}

	public Set<Symbol> getSymbols() {
		return store.getSymbols();
	}

	public Object get(Symbol symbol, int... key) {
		if (maps.containsKey(symbol)) {
			if (key.length == symbol.getArity()) {
				return maps.get(symbol).get(Tuple.of(key));
			} else {
				throw new IllegalArgumentException("The arity of symbol " + symbol.getName() + "is " + symbol.getArity()
						+ " and not " + key.length);
			}
		} else {
			throw new IllegalArgumentException("Model does define symbol " + symbol.getName());
		}
	}

	public void put(Symbol symbol, Object value, int... key) {
		if (maps.containsKey(symbol)) {
			if (key.length == symbol.getArity()) {
				maps.get(symbol).put(Tuple.of(key),value);
			} else {
				throw new IllegalArgumentException("The arity of symbol " + symbol.getName() + "is " + symbol.getArity()
						+ " and not " + key.length);
			}
		} else {
			throw new IllegalArgumentException("Model does define symbol " + symbol.getName());
		}
	}

	@Override
	public long commit() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void restore(long state) {
		// TODO Auto-generated method stub

	}
}