java/ch/wlkl/wsh/Ut.java

package ch.wlkl.wsh;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Collection;

public class Ut<T> {
    public final static Ut<String> string = new Ut<String>(String.class);

    public static  <C, A extends C> Collection<C> addAll(Collection<C> col, A... arr) {
        if (arr != null)
            for (A a: arr)
                col.add(a);
        return col;
    }

    public static  <C> C[] array(C... eles) {
        return eles;
    }

    public static  <C> C[] put(C[] dest, int from, C... eles) {
        for (int ex=0; ex < eles.length; ex++)
            dest[from+ex] = eles[ex];
        return dest;
    }

    public static  <C> C[] copy(C[] dst, int frDst, C[] src, int frSrc) {
        for (int sx=frSrc; sx < src.length; sx++)
            dst[frDst+sx-frSrc] = src[sx];
        return dst;
    }

    public static  <C, A extends C> void write(Write<C> wri, A... arr) {
        for (A a: arr)
            wri.write(a);        
    }
    
    public static String crLf(String s) {
        int rx = s.indexOf('\r');
        int nx = s.indexOf('\n');
        while (rx >= 0 && nx == rx+1) {
            rx = s.indexOf('\r', nx+1);
            nx = s.indexOf('\n', nx+1);
        }
        if (rx < 0 && nx < 0)
            return s;
        int bx = 0;
        StringBuffer res = new StringBuffer();
        while (true) {
            if (rx >= 0 && nx == rx+1) {
            rx = s.indexOf('\r', nx+1);
            nx = s.indexOf('\n', nx+1);
            } else if (rx >= 0 && (nx < 0 || nx > rx)) {
                res.append(s, bx, nx).append("\r\n");
                rx = s.indexOf('\r', bx=rx+1);
            } else if (nx >= 0) {
                res.append(s, bx, nx).append("\r\n");
                nx = s.indexOf('\n', bx = nx+1);
            } else {
                return res.append(s, bx, s.length()).toString();
            }
        }
    }
    
    public static File canonical(File f) {
        try {
            return f.getCanonicalFile();
        } catch (IOException e) {
            return f.getAbsoluteFile();
        }
    }

    public static String cat(Read<String> rdr, String mid) {
        StringBuffer b = new StringBuffer();
        String line;
        rdr.open("-r");
        while (null != (line = rdr.read()))
            b.append(line).append(mid);
        return b.substring(0, b.length() == 0 ? 0 : b.length() - mid.length());
    }
    
    @SuppressWarnings("unchecked")
    public static <C> C[] asArray(Class<C> cl, Collection<? extends C> col) {
        return col.toArray((C[]) Array.newInstance(cl, col.size()));
    }

    @SuppressWarnings("unchecked")
    public static <C> C[] sArray(Collection<C> col) {
        return col.toArray((C[]) Array.newInstance(col.iterator().next().getClass(), col.size()));
    }

    public static void preSuf(String pre, String suf) {
        String one;
        while (null != (one = Env.env().read()))
            Env.env().write(pre + one + suf);
    }

    Class<T> clazz;
    Ut(Class<T> cl) {
        clazz = cl;
    }
    public T[] asArray(Collection<? extends T> col) {
        return asArray(clazz, col);
    }
}