package jazz.lang;
///////////////////////////////////////////////////////////////////////////////
//
// Infinite precision periodic 2-adic numbers
//
///////////////////////////////////////////////////////////////////////////////
public native class per extends rat implements BooleanAlgebra {
// Slice of bits from "i" to "j" (exclusive)
public native slice(i: int, j: int): int = "%slice";
// "i"-th bit of the 2-adic representation of the periodic number
public native bit(i: int): int = "%bit";
// Length of the prefix of the 2-adic representation of the periodic number
public native prefixLength(): int = "%prefixLength";
// Length of the period of the 2-adic representation of the periodic number
public native periodLength(): int = "%periodLength";
}
///////////////////////////////////////////////////////////////////////////////
//
// Implementation
//
///////////////////////////////////////////////////////////////////////////////
native final Builtin.(&)(x@per, y@per) = "%binary_and";
native final Builtin.(|)(x@per, y@per) = "%binary_or";
native final Builtin.(^)(x@per, y@per) = "%binary_xor";
native final Builtin.(~)(x@per) = "%binary_not";
native final Builtin.cond(x@per, y@per, z@per) = "%mux";