blob: 5c7b437d4b925db353d29a2c9e5613bccff69361 [file] [log] [blame]
package com.googlecode.prolog_cafe.builtin;
import com.googlecode.prolog_cafe.exceptions.ExistenceException;
import com.googlecode.prolog_cafe.exceptions.IllegalDomainException;
import com.googlecode.prolog_cafe.exceptions.InternalException;
import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
import com.googlecode.prolog_cafe.lang.*;
import java.util.Hashtable;
/**
* <code>hash_clear/1</code><br>
* @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
* @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
* @version 1.0
*/
public class PRED_hash_clear_1 extends Predicate.P1 {
public PRED_hash_clear_1(Term a1, Operation cont) {
arg1 = a1;
this.cont = cont;
}
public Operation exec(Prolog engine) {
engine.setB0();
Term a1;
a1 = arg1;
Object hash = null;
a1 = a1.dereference();
if (a1.isVariable()) {
throw new PInstantiationException(this, 1);
} else if (a1.isSymbol()) {
if (! engine.getHashManager().containsKey(a1))
throw new ExistenceException(this, 1, "hash", a1, "");
hash = ((JavaObjectTerm) engine.getHashManager().get(a1)).object();
} else if (a1.isJavaObject()) {
hash = ((JavaObjectTerm) a1).object();
} else {
throw new IllegalDomainException(this, 1, "hash_or_alias", a1);
}
if (! (hash instanceof HashtableOfTerm))
throw new InternalException(this + ": Hash is not HashtableOfTerm");
((HashtableOfTerm) hash).clear();
return cont;
}
}