-
- private fun properties(mclass: MClass): Set[E] do
- var properties = new HashSet[E]
- for mprop in self.mmodule.properties(mclass) do
- if mprop isa MPROP then properties.add(mprop)
- end
- return properties
- end
-
- private fun linearize_mclasses(mclasses: Set[MClass]): Array[MClass] is abstract
-end
-
-# Perfect hashing for MMethods
-class MMethodHasher
- super MPropertyHasher[MMethod]
-
- redef type MPROP: MMethod
- init(operator: PHOperator, mmodule: MModule) do super(operator, mmodule)
- redef fun linearize_mclasses(mclasses) do return self.mmodule.reverse_linearize_mclasses(mclasses)
-end
-
-# Perfect hashing for MMAttributes
-class MAttributeHasher
- super MPropertyHasher[MAttribute]
-
- redef type MPROP: MAttribute
- init(operator: PHOperator, mmodule: MModule) do super(operator, mmodule)
- redef fun linearize_mclasses(mclasses) do return self.mmodule.linearize_mclasses_2(mclasses)
-end
-
-# Perfect hashing for MVirtualTypeProps
-class MVirtualTypePropHasher
- super MPropertyHasher[MVirtualTypeProp]
-
- redef type MPROP: MVirtualTypeProp
- init(operator: PHOperator, mmodule: MModule) do super(operator, mmodule)
- redef fun linearize_mclasses(mclasses) do return self.mmodule.reverse_linearize_mclasses(mclasses)