コード例 #1
0
ファイル: RelTraitSet.java プロジェクト: norrislee/optiq
  /**
   * Replaces an existing RelTrait in the set. Returns a different trait set; does not modify this
   * trait set.
   *
   * @param index 0-based index into ordered RelTraitSet
   * @param trait the new RelTrait
   * @return the old RelTrait at the index
   */
  public RelTraitSet replace(int index, RelTrait trait) {
    assert traits[index].getTraitDef() == trait.getTraitDef()
        : "RelTrait has different RelTraitDef than replacement";

    RelTrait canonizedTrait = canonize(trait);
    if (traits[index] == canonizedTrait) {
      return this;
    }
    RelTrait[] newTraits = traits.clone();
    newTraits[index] = canonizedTrait;
    return cache.getOrAdd(new RelTraitSet(cache, newTraits));
  }
コード例 #2
0
ファイル: RelTraitSet.java プロジェクト: norrislee/optiq
 /**
  * Returns this trait set with a given trait added or overridden. Does not modify this trait set.
  *
  * @param trait Trait
  * @return Trait set with given trait
  */
 public RelTraitSet plus(RelTrait trait) {
   if (contains(trait)) {
     return this;
   }
   int i = findIndex(trait.getTraitDef());
   if (i >= 0) {
     return replace(i, trait);
   }
   final RelTrait canonizedTrait = canonize(trait);
   RelTrait[] newTraits = Arrays.copyOf(traits, traits.length + 1);
   newTraits[newTraits.length - 1] = canonizedTrait;
   return cache.getOrAdd(new RelTraitSet(cache, newTraits));
 }