// FILE. . . . . d:/hak/hlt/src/hlt/fot/fuz/ArgumentMappingData.java
// EDIT BY . . . Hassan Ait-Kaci
// ON MACHINE. . Hak-Laptop
// STARTED ON. . Mon Sep 24 09:59:33 2018

package hlt.fot.fuz;

import hlt.fot.Functor;

import hlt.language.util.IntArrayList;

/**
 * This is a class of objects of quadruples of the form
 * <tt><i>[f,g,&alpha;,pairs]</i></tt> where <tt><i>f</i></tt> and
 * <tt><i>g</i></tt> are two similar functors, <tt><i>&alpha;</i></tt>
 * is their similarity degree, and <tt>pairs</tt> is an
 * <tt>IntArrayList</tt> of even length containing a sequence of natural
 * numbers. It extends a <tt><a
 * href="SignatureSimilarityTriple.html">SignatureSimilarityTriple</a></tt>
 * object with the "raw" data that was read specifying an argument
 * mapping between <tt><i>f</i></tt> and <tt><i>g</i></tt> at degree
 * <tt><i>&alpha;</i></tt>. This data is "raw" since it has not been
 * verified. It is only when actually building the specified <tt><a
 * href="ArgumentPositionMapping.html">ArgumentPositionMapping</a></tt>
 * object out of this data that its contents will be verified to be
 * consistent or not.
 *
 * @see         SignatureSimilarityTriple
 * @see         ArgumentPositionMapping
 *
 * @version     Last modified on Mon Oct 01 04:08:49 2018 by hak
 * @author      <a href="mailto:hak@acm.org">Hassan A&iuml;t-Kaci</a>
 * @copyright   &copy; <a href="http://www.hassan-ait-kaci.net/">by the author</a>
 */

public class ArgumentMappingData extends SignatureSimilarityTriple
{
  private IntArrayList pairs;

  public ArgumentMappingData (Functor left, Functor right, double degree, IntArrayList pairs)
  {
    super(left,right,degree);
    this.pairs = pairs;
  }

  public IntArrayList pairs ()
  {
    return pairs;
  }

  public String toString ()
  {
    return super.toString()+" "+pairsToString(pairs);
  }  

  private String pairsToString ()
  {
    return pairsToString(pairs);
  }

  public static String pairsToString (IntArrayList positions)
  {
    if (positions == null)
      return "";
    
    StringBuffer buf = new StringBuffer();

    for (int i = 0; i < positions.size();)
      buf.append(positions.get(i++))
	 .append(":")
	 .append(positions.get(i++))
	 .append(i == positions.size()-1 ? "" : " ");

    return buf.toString();
  }
}
