Java "Handler"

Admin User, created Mar 04. 2024
         
package nova;
import java.util.ArrayList;
import java.util.concurrent.Semaphore;
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
* <p/>
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
* <p/>
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
* <p/>
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
* <p/>
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
public final class Handler {
/**
* make_special(), flags=MASK_PRED_SPECIAL
*/
public static interface Builtin {
public abstract Object run(Object[] args);
}
/**
* make_check(), flags=MASK_PRED_CHECK
*/
public static interface Check {
public abstract boolean run(Object[] args);
}
/**
* make_arithmetic(), flags=MASK_PRED_ARITHMETIC
* Use german spelling to distinguish from Function
*/
public static interface Funktion {
public abstract Number eval(Object[] obj);
}
/**
* Choice point callback.
*/
public static interface Callback {
public abstract Object run(Object rope, int at, Machine.Choice choice);
}
public static class Problem extends RuntimeException {
public Object term;
Problem(Object term) {
this.term = term;
}
}
public static class Rope<E> extends ArrayList<E> {
public void removeRange(int f, int t) {
super.removeRange(f, t);
}
}
/******************************************************************/
/* Synchronous Streams */
/******************************************************************/
public static interface Sender {
public abstract void perform(Object data, StringBuilder buf);
}
public static interface Receiver {
public abstract String perform(Object data);
}
public static interface Notifier {
public abstract void perform(Object data);
}
public static interface Releaser {
public abstract void perform(Object data);
}
/******************************************************************/
/* Surrogate async/await */
/******************************************************************/
public static Semaphore bouncer = new Semaphore(0, true);
public static class Promise {
Runnable proc;
public Promise(Runnable proc) {
this.proc = proc;
}
public void await() {
bouncer.release();
try {
proc.run();
} finally {
bouncer.acquireUninterruptibly();
}
}
}
public static class Coroutine {
Runnable proc;
public Coroutine(Runnable proc) {
this.proc = proc;
}
public void async() {
bouncer.acquireUninterruptibly();
try {
proc.run();
} finally {
bouncer.release();
}
}
}
/******************************************************************/
/* Asynchronous Streams */
/******************************************************************/
public static interface Factory {
public abstract Promise perform(Object buf, Runtime.Source stream);
}
}