<?xml version="1.0" encoding="UTF-8"?>
<!-- Meta-model for PNML specification -->
<!-- Provided by www.pnml.org -->
<ecore:EPackage xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="finiteEnumerations"
    nsURI="http:///symmetricnet.finiteEnumerations.ecore" nsPrefix="finiteEnumerations">
  <eClassifiers xsi:type="ecore:EClass" name="FiniteEnumeration" eSuperTypes="terms.ecore#//BuiltInSort">
    <eAnnotations source="http://www.pnml.org/models/methods/SORT">
      <details key="signature" value="boolean equalSorts(Sort sort)"/>
      <details key="body" value="boolean isEqual = false;&#xA;&#x9;&#x9;if (this.eClass().getName().equalsIgnoreCase(sort.eClass().getName())) {&#xA;&#x9;&#x9;&#x9;if (this.getContainerNamedSort() != null&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&amp;&amp; sort.getContainerNamedSort() != null) {&#xA;&#x9;&#x9;&#x9;&#x9;isEqual = this.getContainerNamedSort().getName()&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;.equalsIgnoreCase(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;sort.getContainerNamedSort().getName());&#xA;&#x9;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;&#x9;if (&quot;FiniteEnumeration&quot;.equalsIgnoreCase(this.eClass().getName())) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;FiniteEnumeration myFE = (FiniteEnumeration) this;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;FiniteEnumeration thatFE = (FiniteEnumeration) sort;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;List&lt;FEConstant> myConstants = myFE.getElements();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;List&lt;FEConstant> thoseConstants = thatFE.getElements();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;int i = 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;int j = 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;for (; i &lt; myConstants.size() &amp;&amp; j &lt; thoseConstants.size(); i++, j++) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (myConstants&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;.get(i)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;.getName()&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;.equalsIgnoreCase(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;thoseConstants.get(j).getName())) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;isEqual = true;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;isEqual = false;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;break;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return isEqual;"/>
      <details key="documentation" value="/**&#xA; * Returns true if this sort and argument sort are actually &#xA; * semantically the same sort, even in two different objects.&#xA; * Ex: two FiniteEnumerations or two Integers.&#xA; * @return true if so. &#xA; * @param sort the sort to which we compare this one. &#xA; */"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
        eType="#//FEConstant" containment="true" eOpposite="#//FEConstant/sort"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="FEConstant" eSuperTypes="terms.ecore#//OperatorDecl">
    <eStructuralFeatures xsi:type="ecore:EReference" name="sort" ordered="false" lowerBound="1"
        eType="#//FiniteEnumeration" eOpposite="#//FiniteEnumeration/elements"/>
  </eClassifiers>
</ecore:EPackage>

