DisplayFormManager.java

// FILE. . . . . /home/hak/hlt/src/hlt/osfv1/io/DisplayFormManager.java
// EDIT BY . . . Hassan Ait-Kaci
// ON MACHINE. . Hak-Laptop
// STARTED ON. . Mon Sep 02 15:36:33 2013



Author:  Hassan Aït-Kaci
Copyright:  © by the author
Version:  Last modified on Mon Sep 16 10:13:20 2013 by hak



package hlt.osf.io;

import hlt.osf.base.Sort;
import hlt.osf.util.BitCode;
import hlt.osf.util.Decoded;
import hlt.osf.exec.Taxonomy;

import hlt.language.util.ArrayList;
import hlt.language.util.IntIterator;

import java.util.HashSet;
import java.util.HashMap;
import java.util.Iterator;



This class defines methods that format various OSF constructs to enable them to be legibly displayed.


public class DisplayFormManager
{
  public String displayBottomForm ()
    {
      return Sort.bottom().toString();
    }

  public String displayTopForm ()
    {
      return Sort.top().toString();
    }

  public final String displaySortForm (Sort sort)
  {
    return sort.toString();
  }

  public final String displayForm (Sort sort)
  {
    if (sort.isTop())
      return displayTopForm();

    if (sort.isBottom())
      return displayBottomForm();

    return displaySortForm(sort);    
  }

  

This is the display form of an array of sorts.


  public final String displaySortsForm (Sort[] sorts)
    {
      if (sorts == null)	// This should never happen!
	return "*null sort array*";

      if (sorts.length == 0)	// This should happen only for the UP of @ or the LB of {}
	return "*no sort*";

      if (sorts.length == 1)
	return sorts[0].toString();      
      
      StringBuilder buf = new StringBuilder("{");
      for (int i=sorts.length; i-->0;)
        buf.append(sorts[i] + (i>0 ? "; ":""));
      return buf.append("}").toString();
    }      

  

This is the display form of disjunctive sorts which are represented as ArrayLists.


  public final String displaySortsForm (ArrayList sorts)  
    {
      if (sorts == null)	// This should never happen!
	return "*null disjunctive sort*";

      if (sorts.isEmpty())
	return displayBottomForm();

      if (sorts.size() == 1)
	return sorts.get(0).toString();
      
      StringBuilder buf = new StringBuilder("{");
      for (Iterator i=sorts.iterator(); i.hasNext();)
        buf.append(i.next() + (i.hasNext() ? "; " : ""));
      return buf.append("}").toString();
    }

  

This is the display form of disjunctive sorts which are represented as a BitCode.


  public final String displayForm (BitCode sorts, Taxonomy taxonomy)
    {
      if (sorts == null)	// This should never happen!
	return "*null disjunctive sort*";

      if (sorts.isEmpty())
	return displayBottomForm();

      if (sorts.cardinality() == 1)
	return taxonomy.get(sorts.nextSetBit(0)).toString();
      
      StringBuilder buf = new StringBuilder("{");
      for (IntIterator i=sorts.iterator(); i.hasNext();)
        buf.append(taxonomy.get(i.next()) + (i.hasNext() ? "; " : ""));
      return buf.append("}").toString();
    }

  

This is the display form of a HashSet of sorts. If the boolean argument is true, a null or empty set will be printed as top otherwise as false. If the set has more than one element, top is not printed.


  public final String displayForm (HashSet sorts, boolean upper)
    {
      if (sorts == null || sorts.isEmpty())
	return upper ? "*EVERYTHING*" : "*NOTHING*";

      if (sorts.size() == 1)
	return sorts.iterator().next().toString();

      StringBuffer buf = new StringBuffer();

      int size = sorts.contains(Sort.top()) ? sorts.size()-1 : sorts.size();
      int count = 0;

      for (Iterator it = sorts.iterator(); it.hasNext();)
	{
	  Sort sort = (Sort)it.next();
	  
	  if (sort.isTop())
	    continue;

	  if (count++ > Decoded.enumSize())
	    {
	      buf.append("... ("+size+" elements in total)");
	      break;
	    }
	  
	  buf.append(sort+" ");
	}

      return buf.toString();
    }

  public String quotedDisplayForm (double x)
    {
      return String.valueOf(x);
    }

  public String unquotedDisplayForm (double x)
    {
      return quotedDisplayForm(x);
    }

  // /**
  //  * The following is a table to keep a record of tags labelling
  //  * psi-terms that have already been displayed and thus need not be
  //  * redisplayed beyond their tag.  This allows printing circular
  //  * objects, and saves on the display form of objects that are
  //  * shared. A tag is of the form <tt>Classname#n</tt>, where
  //  * <tt>Classname</tt> is the name of the class of the tagged object
  //  * and <tt>n</tt> is a number. Therefore, the table <tt>_tags</tt> is
  //  * a table of tables: it maps a classname to a table that maps a
  //  * number to the object it designates.
  //  */
  private final HashMap _tags = new HashMap();

  public DisplayFormManager clearTags ()
    {
      _tags.clear();
      return this;
    }

  // private final String _getTag (ObjectInstance o)
  //   {
  //     HashMap typeTags = (HashMap)_tags.get(o.type());

  //     if (typeTags == null)
  //       {
  //         _tags.put(o.type(),typeTags = new HashMap());
  //         return null;
  //       }

  //     return (String)typeTags.get(o);
  //   }

  // private final String _putTag (ObjectInstance o)
  //   {
  //     HashMap typeTags = (HashMap)_tags.get(o.type());

  //     if (typeTags == null)
  //       _tags.put(o.type(),typeTags = new HashMap());

  //     String tag = "#"+typeTags.size();
  //     typeTags.put(o,tag);

  //     return tag;
  //   }

}


This file was generated on Thu Oct 03 16:37:26 CEST 2013 from file DisplayFormManager.java
by the hlt.language.tools.Hilite Java tool written by Hassan Aït-Kaci