aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2ImmutableTypeLatticeWithEquivalenceCounter.xtend
blob: 251a82f02cc006ffbb2a859a4770c9073b4596d3 (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
package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood

import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
import java.util.Map
import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
import java.util.HashMap

class PartialInterpretation2ImmutableTypeLatticeWithEquivalenceCounter extends
	PartialInterpretation2NeighbourhoodRepresentation<
		Map<? extends AbstractNodeDescriptor,Integer>, // <- Model Descriptor
		AbstractNodeDescriptor> // <- Node Descriptor
	{
		
	protected new() {
		super(true,false)
	}
	
	override protected createLocalRepresentation(Map<DefinedElement, LocalNodeDescriptor> node2Representation, Map<LocalNodeDescriptor, Integer> representation2Amount) {
		return new NeighbourhoodWithTraces(node2Representation.immutableCopy,node2Representation.immutableCopy,null)
	}
	
	override protected createFurtherRepresentation(
		Map<FurtherNodeDescriptor<AbstractNodeDescriptor>, Integer> nodeDescriptors,
		Map<DefinedElement, FurtherNodeDescriptor<AbstractNodeDescriptor>> node2Representation,
		NeighbourhoodWithTraces<Map<? extends AbstractNodeDescriptor, Integer>, AbstractNodeDescriptor> previous,
		boolean deepRepresentation
	) {
		if(deepRepresentation) {
			return new NeighbourhoodWithTraces<Map<? extends AbstractNodeDescriptor, Integer>, AbstractNodeDescriptor>(nodeDescriptors,node2Representation,previous)
		} else {
			return new NeighbourhoodWithTraces<Map<? extends AbstractNodeDescriptor, Integer>, AbstractNodeDescriptor>(nodeDescriptors,node2Representation,null)
		}
	}
	
	public def finalRepresentation(NeighbourhoodWithTraces<Map<? extends AbstractNodeDescriptor, Integer>,AbstractNodeDescriptor> representation) {
		val node2Representation = representation.nodeRepresentations
		val node2LocalRepresentation = new HashMap
		//val localRepresentation2Node = new HashMap
		for(entry: node2Representation.entrySet) {
			val node = entry.key
			val localNodeDescriptor = entry.value.toLocalDescriptor
			node2LocalRepresentation.put(node,localNodeDescriptor)
		}
		
	}
	
	public def LocalNodeDescriptor toLocalDescriptor(AbstractNodeDescriptor descriptor) {
		if(descriptor instanceof LocalNodeDescriptor) {
			return descriptor
		} else if(descriptor instanceof FurtherNodeDescriptor<?>) {
			(descriptor.previousRepresentation as AbstractNodeDescriptor).toLocalDescriptor
		} else throw new IllegalArgumentException('''Unsupported descriptor type: «descriptor.class.simpleName»''')
	}
	
	
}