From 03f574d5d1ee736c95ed68f331de1cd1c1e13a67 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Wed, 6 Feb 2013 09:37:30 -0500 Subject: [PATCH] nitg-s: removed OrderedSet replaced it by refinements in Array and HashSet Signed-off-by: Alexandre Terrasa --- src/coloring.nit | 47 +++++++++++++++++++-------------------------- src/separate_compiler.nit | 5 +++-- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/coloring.nit b/src/coloring.nit index 57ca211..a0ce0bb 100644 --- a/src/coloring.nit +++ b/src/coloring.nit @@ -22,9 +22,9 @@ abstract class AbstractColoring[E: Object] private var sorter: AbstractSorter[E] private var reverse_sorter: AbstractSorter[E] - private var core: OrderedSet[E] = new OrderedSet[E] - private var crown: OrderedSet[E] = new OrderedSet[E] - private var border: OrderedSet[E] = new OrderedSet[E] + private var core: Set[E] = new HashSet[E] + private var crown: Set[E] = new HashSet[E] + private var border: Set[E] = new HashSet[E] private var coloration_result: Map[E, Int] = new HashMap[E, Int] private var conflicts_graph_cache: nullable HashMap[E, Set[E]] @@ -45,8 +45,11 @@ abstract class AbstractColoring[E: Object] #print "crown: {crown.join(", ")}" # sort by reverse linearization order + var core = new Array[E].from(self.core) reverse_sorter.sort(core) + var border = new Array[E].from(self.border) reverse_sorter.sort(border) + var crown = new Array[E].from(self.crown) reverse_sorter.sort(crown) #print "conflicts" @@ -152,12 +155,12 @@ abstract class AbstractColoring[E: Object] end # cache for linear_extensions - private var linear_extensions_cache: Map[E, OrderedSet[E]] = new HashMap[E, OrderedSet[E]] + private var linear_extensions_cache: Map[E, Array[E]] = new HashMap[E, Array[E]] # Return a linear_extension of super_elements of the element - private fun linear_extension(element: E): OrderedSet[E] do + private fun linear_extension(element: E): Array[E] do if not self.linear_extensions_cache.has_key(element) then - var lin = new OrderedSet[E] + var lin = new Array[E] lin.add(element) lin.add_all(self.super_elements(element)) self.sorter.sort(lin) @@ -627,7 +630,7 @@ class PropertyColoring for mclass in self.class_coloring.coloration_result.keys do var table = new Array[nullable MPROPDEF] # first, fill table from parents by reverse linearization order - var parents = new OrderedSet[MClass] + var parents = new Array[MClass] parents.add_all(self.class_coloring.super_elements(mclass)) self.class_coloring.reverse_sorter.sort(parents) for parent in parents do @@ -848,7 +851,7 @@ abstract class VTPerfectHashing for mclass in self.class_coloring.coloration_result.keys do var table = new Array[nullable MPROPDEF] # first, fill table from parents by reverse linearization order - var parents = new OrderedSet[MClass] + var parents = new Array[MClass] parents.add_all(self.class_coloring.super_elements(mclass)) self.class_coloring.reverse_sorter.sort(parents) for parent in parents do @@ -1491,31 +1494,21 @@ end # Utils -# An ordered set -class OrderedSet[E: Object] - super Array[E] - - init do end - - init from(elements: Set[E]) do +redef class HashSet[E] + init from(elements: Collection[E]) do self.add_all(elements) end +end - redef fun add(e) do - if not self.has(e) then - super(e) - end +redef class Array[E] + init from(elements: Collection[E]) do + self.add_all(elements) end - # Return a new OrderedSet with the elements only contened in 'self' and not in 'o' - fun -(o: OrderedSet[E]): OrderedSet[E] do - var res = new OrderedSet[E] + # Return a new Array with the elements only contened in 'self' and not in 'o' + fun -(o: Array[E]): Array[E] do + var res = new Array[E] for e in self do if not o.has(e) then res.add(e) return res end - - # Linearize a set of elements - fun linearize(sorter: AbstractSorter[E]) do - sorter.sort(self) - end end diff --git a/src/separate_compiler.nit b/src/separate_compiler.nit index 30435d1..4dfc38e 100644 --- a/src/separate_compiler.nit +++ b/src/separate_compiler.nit @@ -282,8 +282,9 @@ class SeparateCompiler # set type unique id if modelbuilder.toolcontext.opt_phmod_typing.value or modelbuilder.toolcontext.opt_phand_typing.value then - var sorted_mtypes = new OrderedSet[MType].from(mtypes) - sorted_mtypes.linearize(new ReverseTypeSorter(self.mainmodule)) + var sorted_mtypes = new Array[MType].from(mtypes) + var sorter = new ReverseTypeSorter(self.mainmodule) + sorter.sort(sorted_mtypes) for mtype in sorted_mtypes do self.typeids[mtype] = self.typeids.length + 1 end -- 1.7.9.5