package ch.wlkl.shell;

import java.util.WeakHashMap;

public class Top {

	public static boolean trace = false;
	private static int nameCnt = 1;
	private final static WeakHashMap<Object, String> nameOf = new WeakHashMap<Object, String>(); 
	public final static String [] emptyStrings = new String [0]; 

	public Top() {
	}

	public String toString() {
		return name(this);
	}

	public static String name(Object obj) {
		String name = nameOf.get(obj);
		if (name == null) 
			nameOf.put(obj, name = obj.getClass().getName() + '@' + nameCnt++);
		return name;
	}
	
	public static void nameCnt(int nc) {
		nameCnt = nc;
	}

	public void say(String t) {
		System.out.println("say " + this + ": " + t);
	}

	public static void sSay(Object rec, String t) {
		System.out.println("say " + rec + ": " + t);
	}
	
	public static void sSay(String t) {
		System.out.println("say: " + t);
	}

	public void trc(String txt) {
		if (trace)
			System.out.println("trc " + this +  ": " + txt);
	}
	
	public static void sTrc(String txt) {
		if (trace)
			System.out.println("trc: " + txt);
	}
	
	public static void sTrc(Object rec, String txt) {
		if (trace)
			System.out.println("trc " + rec +  ": " + txt);
	}
	
	public void fail(String t) {
		sFail(this, t);
	}

	public static void sFail(Object rec, String t) {
		EnvMan.env().write("fatal fail " + rec + ": " + t);
		throw new AssertionError(t);
	}

	public static void sFail(String t) {
		EnvMan.env().write("fatal fail: " + t);
		throw new AssertionError(t);
	}
	

}

