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

org.jenetics.engine.TimedResult Maven / Gradle / Ivy

There is a newer version: 3.6.0
Show newest version
/*
 * Java Genetic Algorithm Library (jenetics-3.0.1).
 * Copyright (c) 2007-2015 Franz Wilhelmstötter
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Author:
 *    Franz Wilhelmstötter ([email protected])
 */
package org.jenetics.engine;

import static java.util.Objects.requireNonNull;

import java.time.Clock;
import java.time.Duration;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * Container class which contains the execution result and the execution time.
 *
 * @author Franz Wilhelmstötter
 * @since 3.0
 * @version 3.0 — $Date: 2014-10-09 $
 */
final class TimedResult {

	final Duration duration;
	final T result;

	TimedResult(final Duration duration, final T result) {
		this.duration = requireNonNull(duration);
		this.result = requireNonNull(result);
	}

	/**
	 * Wraps the given supplier in a supplier which returns a {@code TimedResult}.
	 *
	 * @param supplier the supplier to wrap
	 * @param clock the clock used for measure the execution time
	 * @param  the result type
	 * @return the wrapped supplier which returns a {@code TimedResult}
	 */
	public static  Supplier> of(
		final Supplier supplier,
		final Clock clock
	) {
		return () -> {
			final Timer timer = Timer.of(clock).start();
			final T result = supplier.get();
			return new TimedResult<>(timer.stop().getTime(), result);
		};
	}

	/**
	 * Wraps the given function in a function which returns a
	 * {@code TimedResult}.
	 *
	 * @param function the function to wrap
	 * @param clock the clock used for measure the execution time
	 * @param  the functions parameter type
	 * @param  the functions return type
	 * @return the wrapped function which returns a {@code TimedResult}
	 */
	public static  Function> of(
		final Function function,
		final Clock clock
	) {
		return value -> {
			final Timer timer = Timer.of().start();
			final R result = function.apply(value);
			return new TimedResult<>(timer.stop().getTime(), result);
		};
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy