//tabstop=4 //*****************************************************************************/ // Project: jpl // // File: $Id$ // Date: $Date$ // Author: Fred Dushin // // // Description: // // // ------------------------------------------------------------------------- // Copyright (c) 1998 Fred Dushin // All rights reserved. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Library Public License for more details. // ------------------------------------------------------------------------- // $Id$ //*****************************************************************************/ package jpl; import java.util.Hashtable; import jpl.fli.*; //----------------------------------------------------------------------/ // String /** * A String is a Term with a java.lang.String value. Use this * class to represent Prolog strings. *
 * jpl.String s = new jpl.String( "Haddock's Eyes" );
 * 
* *
* Copyright (C) 1998 Fred Dushin

* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version.

* * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library Public License for more details.

*


* @author Fred Dushin * @version $Revision$ */ // Implementation notes: // //----------------------------------------------------------------------/ public class String extends Term { //==================================================================/ // Attributes //==================================================================/ /** * the String's value */ java.lang.String value_ = null; /** * @return the String's value */ public final java.lang.String value() { return value_; } //==================================================================/ // Contructors and Initialization //==================================================================/ //------------------------------------------------------------------/ // String /** * A String holds a java.lang.String and represents a Prolog String, * whose internal representation may vary across Prolog implementations. * * @param value the java.lang.String value of this String. */ // Implementation notes: // //------------------------------------------------------------------/ public String( java.lang.String value ) { this.value_ = value; } //==================================================================/ // Converting Terms to term_ts //==================================================================/ //------------------------------------------------------------------/ // put /** * To put an String in a term, we put the characters of the * String into the term_t. * * @param var_table A Hashtable containing term_t's that are * bound to (have packed in) Prolog variables as elements. The * Elements are keyed by jpl.Variable instances. Cf. the put() * implementation in the Variable class. * @param term A (previously created) term_t which is to be * packed with a Prolog term-type appropriate to the Term type * (e.g., Atom, Variable, Compound, etc.) on which the method is * invoked.) */ // Implementation notes: // //------------------------------------------------------------------/ protected final void put( Hashtable var_table, term_t term ) { Prolog.put_string_chars( term, value_ ); } //==================================================================/ // Converting term_ts to Terms //==================================================================/ //------------------------------------------------------------------/ // from_term_t /** * Converts a term_t to a String. Assuming the term is an * Prolog String, we just create a new String using the * characters in the Prolog String. * * @param term The term_t to convert * @return A new String */ // Implementation notes: // //------------------------------------------------------------------/ protected static Term from_term_t( Hashtable vars, term_t term ) { StringHolder holder = new StringHolder(); Prolog.get_string( term, holder ); return new String( holder.value ); } //==================================================================/ // Computing Substitutions //==================================================================/ //------------------------------------------------------------------/ // computeSubstitution /** * Nothing needs to be done if the Term is an Atom. * * @param table table holding Term substitutions, keyed on * Variables. */ // Implementation notes: // //------------------------------------------------------------------/ protected final void computeSubstitution( Hashtable bindings, Hashtable vars ) { } //==================================================================/ // //==================================================================/ public java.lang.String toString() { return value_; } public java.lang.String debugString() { return "(String " + toString() + ")"; } //------------------------------------------------------------------/ // equals /** * Two Strings are equal if their values are equal * * @param obj The Object to compare * @return true if the Object satisfies the above condition */ // Implementation notes: // //------------------------------------------------------------------/ public final boolean equals( Object obj ) { if ( this == obj ){ return true; } if ( ! (obj instanceof String) ){ return false; } return value_.equals( ((String)obj).value_ ); }} //345678901234567890123456789012346578901234567890123456789012345678901234567890