layout_builders: Unified interface for TypingLayoutBuilder
authorAlexandre Terrasa <alexandre@moz-code.org>
Tue, 5 Mar 2013 22:36:02 +0000 (17:36 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Tue, 5 Mar 2013 22:36:02 +0000 (17:36 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/layout_builders.nit
src/separate_compiler.nit
src/separate_erasure_compiler.nit

index 105c52c..7c7ec06 100644 (file)
@@ -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)
index 474a27c..2d13031 100644 (file)
@@ -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
index 4590348..585b5ef 100644 (file)
@@ -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)