Пример #1
0
 /**
  * Return a conservative estimage on the min/max number of items of a type.
  *
  * @return {@code maxCount << 12 | minCount & 0xFFF}, where a {@code maxCount} of -1 means
  *     unbounded.
  */
 public static int itemCountRange(Type type) {
   if (type instanceof SingletonType) return (1 << 12) | 1;
   if (type instanceof OccurrenceType) {
     OccurrenceType occ = (OccurrenceType) type;
     int min = occ.minOccurs();
     int max = occ.maxOccurs();
     int bnum = itemCountRange(occ.getBase());
     if ((min == 1 && max == 1) || bnum == 0) return bnum;
     if (max > 0xfffff) max = -1;
     if (max == 0) return 0;
     int bmin = bnum & 0xfff;
     int bmax = bnum >> 12;
     if (bnum != 0x1001) {
       if (min > 0xfff) min = 0xfff;
       min = min * bmin;
       if (min > 0xfff) min = 0xfff;
       if (max < 0 || bmax < 0) max = -1;
       else max = max * bmax;
       if (max > 0xfffff) max = -1;
     }
     return (max << 12) | min;
   }
   if (type instanceof PrimType) return type.isVoid() ? 0 : 0x1001;
   if (type instanceof ArrayType) return 0x1001;
   if (type instanceof ObjectType) {
     int cmp = type.compare(Compilation.typeValues);
     if (cmp == -3) return 0x1001;
   }
   return -1 << 12;
 }
Пример #2
0
 public int compare(Type other) {
   if (other instanceof OccurrenceType) {
     OccurrenceType occOther = (OccurrenceType) other;
     if (minOccurs == occOther.minOccurs && maxOccurs == occOther.maxOccurs)
       return base.compare(occOther.getBase());
   }
   /*
   Type primeThis = itemPrimeType(getBase());
   Type primeOther = itemPrimeType(other);
   FIXME: Compare primThis with primOther AND the occurrence numbers.
   */
   return -2;
 }