From e6eed0cf4669911682a94ff8a3d2faf6be62c027 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Tue, 5 Mar 2013 17:36:02 -0500 Subject: [PATCH] layout_builders: Unified interface for TypingLayoutBuilder Signed-off-by: Alexandre Terrasa --- src/layout_builders.nit | 51 +++++++------------------------------ src/separate_compiler.nit | 8 +++--- src/separate_erasure_compiler.nit | 8 +++--- 3 files changed, 17 insertions(+), 50 deletions(-) diff --git a/src/layout_builders.nit b/src/layout_builders.nit index 105c52c..7c7ec06 100644 --- a/src/layout_builders.nit +++ b/src/layout_builders.nit @@ -41,45 +41,9 @@ end # 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] @@ -205,6 +169,7 @@ end # Matrice computers abstract class TypingBMizer[E: Object] + super TypingLayoutBuilder[E] var mmodule: MModule @@ -213,7 +178,7 @@ abstract class TypingBMizer[E: Object] 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) @@ -251,6 +216,7 @@ end # 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] @@ -261,7 +227,7 @@ abstract class TypingColorer[E: Object] 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) @@ -683,6 +649,7 @@ end class TypingHasher[E: Object] super PerfectHasher[E, E] + super TypingLayoutBuilder[E] var mmodule: MModule @@ -691,7 +658,7 @@ class TypingHasher[E: Object] 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) diff --git a/src/separate_compiler.nit b/src/separate_compiler.nit index 474a27c..2d13031 100644 --- a/src/separate_compiler.nit +++ b/src/separate_compiler.nit @@ -331,13 +331,13 @@ class SeparateCompiler # 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 diff --git a/src/separate_erasure_compiler.nit b/src/separate_erasure_compiler.nit index 4590348..585b5ef 100644 --- a/src/separate_erasure_compiler.nit +++ b/src/separate_erasure_compiler.nit @@ -77,13 +77,13 @@ class SeparateErasureCompiler 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) -- 1.7.9.5