Package org.ggp.base.util.gdl.model

Source Code of org.ggp.base.util.gdl.model.AbstractSentenceForm

package org.ggp.base.util.gdl.model;

import java.util.List;

import org.ggp.base.util.gdl.grammar.GdlConstant;
import org.ggp.base.util.gdl.grammar.GdlPool;
import org.ggp.base.util.gdl.grammar.GdlSentence;

import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.collect.Lists;

/**
* Defines the hashCode, equals, and toString methods for SentenceForms so
* different SentenceForms can be compatible in terms of how they treat these
* methods. SentenceForm implementations should extend this class and should
* not reimplement hashCode, equals, or toString.
*/
public abstract class AbstractSentenceForm implements SentenceForm {
  private final Supplier<GdlSentence> underscoreSentence =
      Suppliers.memoize(new Supplier<GdlSentence>() {
        @Override
        public GdlSentence get() {
          List<GdlConstant> underscores = getNUnderscores(getTupleSize());
          return getSentenceFromTuple(underscores);
        }
      });

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (!(obj instanceof SentenceForm)) {
      return false;
    }
    SentenceForm o = (SentenceForm) obj;
    if (this.getName() != o.getName()) {
      return false;
    }
    if (this.getTupleSize() != o.getTupleSize()) {
      return false;
    }
    return o.matches(underscoreSentence.get());
  }

  private static List<GdlConstant> getNUnderscores(int numTerms) {
    GdlConstant underscore = GdlPool.UNDERSCORE;
    List<GdlConstant> terms = Lists.newArrayListWithCapacity(numTerms);
    for (int i = 0; i < numTerms; i++) {
      terms.add(underscore);
    }
    return terms;
  }

  private volatile int hashCode = 0;
  @Override
  public int hashCode() {
    if (hashCode == 0) {
      hashCode = toString().hashCode();
    }
    return hashCode;
  }

  @Override
  public String toString() {
    return underscoreSentence.get().toString();
  }
}
TOP

Related Classes of org.ggp.base.util.gdl.model.AbstractSentenceForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.