Files
secondo/Jpl/jsrc/10/jpl/String.java
2026-01-23 17:03:45 +08:00

227 lines
6.4 KiB
Java

//tabstop=4
//*****************************************************************************/
// Project: jpl
//
// File: $Id$
// Date: $Date$
// Author: Fred Dushin <fadushin@syr.edu>
//
//
// 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.
* <pre>
* jpl.String s = new jpl.String( "Haddock's Eyes" );
* </pre>
*
* <hr><i>
* Copyright (C) 1998 Fred Dushin<p>
*
* 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.<p>
*
* 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.<p>
* </i><hr>
* @author Fred Dushin <fadushin@syr.edu>
* @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