// Path: leotask/src/core/org/leores/net/Link.java
// public static class Flag implements Serializable {
// 	private static final long serialVersionUID = 1600634581856522821L;
// 	public static final int IN = 1; // Binary 00001
// 	public static final int OUT = 2; // Binary 00010
// 	public static final int UNDIRECTED = 4; // Binary 00100
// }
// 
// Path: leotask/src/core/org/leores/util/able/NewInstanceable.java
// public interface NewInstanceable<E> {
// 	public E newInstance();
// }
// 
// Path: leotask/src/core/org/leores/util/able/Processable1.java
// public interface Processable1<R, A> {
// 	public R process(A a);
// 
// 	public static class MaxListOutSize<A> implements Processable1<String, A> {
// 		protected Integer mSize;// null means do no limit list out size
// 
// 		public MaxListOutSize(Integer mSize) {
// 			this.mSize = mSize;
// 		}
// 
// 		public String process(A a) {
// 			String rtn = null;
// 			if (a != null && U.bAssignable(List.class, a.getClass())) {
// 				List lObj = (List) a;
// 				if (mSize != null && mSize >= 0 && mSize < lObj.size()) {
// 					List lOut = lObj.subList(0, mSize);
// 					rtn = lOut + "...";
// 				} else {
// 					rtn = lObj + "";
// 				}
// 			}
// 			return rtn;
// 		}
// 	}
// 
// 	public static class ArrayToString<A> implements Processable1<String, A> {
// 		public String process(A a) {
// 			String rtn = a + "";
// 			if (a != null && a instanceof Object[]) {
// 				rtn = "[";
// 				Object[] aa = (Object[]) a;
// 				for (int i = 0; i < aa.length; i++) {
// 					rtn += aa[i];
// 					if (i + 1 < aa.length) {
// 						rtn += ",";
// 					}
// 				}
// 				rtn += "]";
// 			}
// 			return rtn;
// 		}
// 	}
// 
// 	public static class Expression<A> implements Processable1<A, A> {
// 		public String sElement, sExpression;
// 
// 		public Expression(String sElement, String sExpression) {
// 			this.sElement = sElement;
// 			this.sExpression = sExpression;
// 		}
// 
// 		public Expression(String sExpression) {
// 			this("%", sExpression);
// 		}
// 
// 		public A process(A a) {
// 			A rtn = a;
// 			if (a != null) {
// 				String sExpToEval = sExpression.replace(sElement, a + "");
// 				BigDecimal bdEvalRtn = U.eval1Expression(sExpToEval);
// 				if (bdEvalRtn != null) {
// 					rtn = (A) U.newInstance(a.getClass(), bdEvalRtn + "");
// 				} else {
// 					rtn = null;
// 				}
// 			}
// 			return rtn;
// 		}
// 
// 	}
// }


import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.leores.net.Link.Flag;
import org.leores.util.able.NewInstanceable;
import org.leores.util.able.Processable1;

	 * (tNode could be either From or To node of a link)
	 * 
	 * @param lLink
	 * @param tNode
	 * @return
	 */
	protected boolean bLinked(List<Link> lLink, Node tNode) {
		boolean rtn = false;

		if (lLink != null) {
			for (int i = 0, size = lLink.size(); i < size; i++) {
				Link link = lLink.get(i);
				Node node = link.getOtherNode(this);
				if (node == tNode) {
					rtn = true;
					break;
				}
			}
		}

		return rtn;
	}

	protected boolean bLinked(NodeLinks nLinks, Node tNode, int flags) {
		boolean rtn = false;

		if (nLinks != null) {
			if ((!rtn) && (flags & Flag.IN) > 0) {
				rtn = bLinked(nLinks.in, tNode);
			}

// Path: leotask/src/core/org/leores/net/Link.java
// public static class Flag implements Serializable {
// 	private static final long serialVersionUID = 1600634581856522821L;
// 	public static final int IN = 1; // Binary 00001
// 	public static final int OUT = 2; // Binary 00010
// 	public static final int UNDIRECTED = 4; // Binary 00100
// }
// 
// Path: leotask/src/core/org/leores/util/able/NewInstanceable.java
// public interface NewInstanceable<E> {
// 	public E newInstance();
// }
// 
// Path: leotask/src/core/org/leores/util/able/Processable1.java
// public interface Processable1<R, A> {
// 	public R process(A a);
// 
// 	public static class MaxListOutSize<A> implements Processable1<String, A> {
// 		protected Integer mSize;// null means do no limit list out size
// 
// 		public MaxListOutSize(Integer mSize) {
// 			this.mSize = mSize;
// 		}
// 
// 		public String process(A a) {
// 			String rtn = null;
// 			if (a != null && U.bAssignable(List.class, a.getClass())) {
// 				List lObj = (List) a;
// 				if (mSize != null && mSize >= 0 && mSize < lObj.size()) {
// 					List lOut = lObj.subList(0, mSize);
// 					rtn = lOut + "...";
// 				} else {
// 					rtn = lObj + "";
// 				}
// 			}
// 			return rtn;
// 		}
// 	}
// 
// 	public static class ArrayToString<A> implements Processable1<String, A> {
// 		public String process(A a) {
// 			String rtn = a + "";
// 			if (a != null && a instanceof Object[]) {
// 				rtn = "[";
// 				Object[] aa = (Object[]) a;
// 				for (int i = 0; i < aa.length; i++) {
// 					rtn += aa[i];
// 					if (i + 1 < aa.length) {
// 						rtn += ",";
// 					}
// 				}
// 				rtn += "]";
// 			}
// 			return rtn;
// 		}
// 	}
// 
// 	public static class Expression<A> implements Processable1<A, A> {
// 		public String sElement, sExpression;
// 
// 		public Expression(String sElement, String sExpression) {
// 			this.sElement = sElement;
// 			this.sExpression = sExpression;
// 		}
// 
// 		public Expression(String sExpression) {
// 			this("%", sExpression);
// 		}
// 
// 		public A process(A a) {
// 			A rtn = a;
// 			if (a != null) {
// 				String sExpToEval = sExpression.replace(sElement, a + "");
// 				BigDecimal bdEvalRtn = U.eval1Expression(sExpToEval);
// 				if (bdEvalRtn != null) {
// 					rtn = (A) U.newInstance(a.getClass(), bdEvalRtn + "");
// 				} else {
// 					rtn = null;
// 				}
// 			}
// 			return rtn;
// 		}
// 
// 	}
// }


// Path: leotask/src/core/org/leores/net/Node.java
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.leores.net.Link.Flag;
import org.leores.util.able.NewInstanceable;
import org.leores.util.able.Processable1;

	 * (tNode could be either From or To node of a link)
	 * 
	 * @param lLink
	 * @param tNode
	 * @return
	 */
	protected boolean bLinked(List<Link> lLink, Node tNode) {
		boolean rtn = false;

		if (lLink != null) {
			for (int i = 0, size = lLink.size(); i < size; i++) {
				Link link = lLink.get(i);
				Node node = link.getOtherNode(this);
				if (node == tNode) {
					rtn = true;
					break;
				}
			}
		}

		return rtn;
	}

	protected boolean bLinked(NodeLinks nLinks, Node tNode, int flags) {
		boolean rtn = false;

		if (nLinks != null) {
			if ((!rtn) && (flags & Flag.IN) > 0) {
				rtn = bLinked(nLinks.in, tNode);
			}

			if ((!rtn) && (flags & Flag.OUT) > 0) {
