All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.g2forge.alexandria.expression.numeric.NumericEnvironment Maven / Gradle / Ivy

Go to download

A library for expressions and their evaluation. Includes a basic implementation for math.

There is a newer version: 0.0.18
Show newest version
package com.g2forge.alexandria.expression.numeric;

import java.util.function.BiPredicate;
import java.util.function.Function;
import java.util.function.Predicate;

import com.g2forge.alexandria.expression.IEnvironment;
import com.g2forge.alexandria.java.core.helpers.HObject;
import com.g2forge.alexandria.java.fluent.optional.IOptional;
import com.g2forge.alexandria.java.fluent.optional.NonNullOptional;
import com.g2forge.alexandria.java.fluent.optional.factory.IOptionalFactory;
import com.g2forge.alexandria.java.fluent.optional.function.IOptionalFunction;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class NumericEnvironment implements IEnvironment {
	public static final IFactory FACTORY = new IFactory() {
		@Override
		public NumericEnvironment wrap(IOptionalFunction function) {
			return new NumericEnvironment(function);
		}
	};

	protected final IOptionalFunction function;

	@Override
	public Function fallback(Function fallback) {
		return function.fallback(fallback);
	}

	@Override
	public IOptional lookup(NumericVariable variable) {
		return NonNullOptional.FACTORY.upcast(function.apply(variable));
	}

	@Override
	public NumericEnvironment override(NumericEnvironment override) {
		return new NumericEnvironment(function.override(override.function));
	}

	@Override
	public NumericEnvironment recursive(BiPredicate terminate) {
		return recursive(terminate, true, NumericVariable.class);
	}

	@Override
	public NumericEnvironment recursive(BiPredicate terminate, boolean prior, Class type) {
		return new NumericEnvironment(function.recursive(terminate, prior, type));
	}

	@Override
	public NumericEnvironment restrict(Predicate predicate, IOptionalFactory factory) {
		if ((factory != null) && (factory != FACTORY.getOptionalFactory())) throw new IllegalArgumentException("Wrong optional factory was specified");
		return new NumericEnvironment(function.restrict(predicate, FACTORY.getOptionalFactory()));
	}

	@Override
	public String toString() {
		return HObject.toString(this, function);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy