# Builders
-abstract class TypingLayoutBuilder[E: Object]
-
- type LAYOUT: Layout[E]
-
- # Compute elements ids and position
- fun build_layout(elements: Set[E]): LAYOUT is abstract
-end
-
-# Typing Layout builder using binary matrix (BM)
-class BMTypingLayoutBuilder[E: Object]
- super TypingLayoutBuilder[E]
-
- private var bmizer: TypingBMizer[E]
-
- init(bmizer: TypingBMizer[E]) do self.bmizer = bmizer
-
- redef fun build_layout(elements) do return bmizer.build_layout(elements)
-end
-
-# Typing Layout builder using Coloring (CL)
-class CLTypingLayoutBuilder[E: Object]
- super TypingLayoutBuilder[E]
-
- private var colorer: TypingColorer[E]
-
- init(colorer: TypingColorer[E]) do self.colorer = colorer
-
- redef fun build_layout(elements) do return colorer.build_layout(elements)
-end
-
-# Typing Layout builder using Perfect Hashing (PH)
-class PHTypingLayoutBuilder[E: Object]
- super TypingLayoutBuilder[E]
-
- private var hasher: TypingHasher[E]
-
- init(hasher: TypingHasher[E]) do self.hasher = hasher
-
- redef fun build_layout(elements) do return hasher.build_layout(elements)
+interface TypingLayoutBuilder[E: Object]
+ # Build typing table layout
+ fun build_layout(elements: Set[E]): Layout[E] is abstract
end
abstract class PropertyLayoutBuilder[E: MProperty]
# Matrice computers
abstract class TypingBMizer[E: Object]
+ super TypingLayoutBuilder[E]
var mmodule: MModule
end
# Compute mtypes ids and position using BM
- fun build_layout(elements: Set[E]): Layout[E] do
+ redef fun build_layout(elements: Set[E]): Layout[E] do
var result = new Layout[E]
var ids = new HashMap[E, Int]
var lin = self.reverse_linearize(elements)
# Colorers
abstract class TypingColorer[E: Object]
+ super TypingLayoutBuilder[E]
private var core: Set[E] = new HashSet[E]
private var crown: Set[E] = new HashSet[E]
init do end
# Compute the layout with coloring
- fun build_layout(elements: Set[E]): Layout[E] do
+ redef fun build_layout(elements: Set[E]): Layout[E] do
var result = new Layout[E]
result.ids = compute_ids(elements)
result.pos = colorize(elements)
class TypingHasher[E: Object]
super PerfectHasher[E, E]
+ super TypingLayoutBuilder[E]
var mmodule: MModule
self.mmodule = mmodule
end
- fun build_layout(elements: Set[E]): PHLayout[E, E] do
+ redef fun build_layout(elements: Set[E]): PHLayout[E, E] do
var result = new PHLayout[E, E]
var conflicts = self.build_conflicts(elements)
result.ids = self.compute_ids(elements)
# Typing Layout
var layout_builder: TypingLayoutBuilder[MType]
if modelbuilder.toolcontext.opt_bm_typing.value then
- layout_builder = new BMTypingLayoutBuilder[MType](new MTypeBMizer(self.mainmodule))
+ layout_builder = new MTypeBMizer(self.mainmodule)
else if modelbuilder.toolcontext.opt_phmod_typing.value then
- layout_builder = new PHTypingLayoutBuilder[MType](new MTypeHasher(new PHModOperator, self.mainmodule))
+ layout_builder = new MTypeHasher(new PHModOperator, self.mainmodule)
else if modelbuilder.toolcontext.opt_phand_typing.value then
- layout_builder = new PHTypingLayoutBuilder[MType](new MTypeHasher(new PHAndOperator, self.mainmodule))
+ layout_builder = new MTypeHasher(new PHAndOperator, self.mainmodule)
else
- layout_builder = new CLTypingLayoutBuilder[MType](new MTypeColorer(self.mainmodule))
+ layout_builder = new MTypeColorer(self.mainmodule)
end
# colorize types
var layout_builder: TypingLayoutBuilder[MClass]
if modelbuilder.toolcontext.opt_phmod_typing.value then
- layout_builder = new PHTypingLayoutBuilder[MClass](new MClassHasher(new PHModOperator, mainmodule))
+ layout_builder = new MClassHasher(new PHModOperator, mainmodule)
else if modelbuilder.toolcontext.opt_phand_typing.value then
- layout_builder = new PHTypingLayoutBuilder[MClass](new MClassHasher(new PHAndOperator, mainmodule))
+ layout_builder = new MClassHasher(new PHAndOperator, mainmodule)
else if modelbuilder.toolcontext.opt_bm_typing.value then
- layout_builder = new BMTypingLayoutBuilder[MClass](new MClassBMizer(mainmodule))
+ layout_builder = new MClassBMizer(mainmodule)
else
- layout_builder = new CLTypingLayoutBuilder[MClass](new MClassColorer(mainmodule))
+ layout_builder = new MClassColorer(mainmodule)
end
self.class_layout = layout_builder.build_layout(mclasses)
self.class_tables = self.build_class_typing_tables(mclasses)