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

se.l4.vibe.probes.ValueReaders Maven / Gradle / Ivy

There is a newer version: 0.4.0
Show newest version
package se.l4.vibe.probes;

import se.l4.vibe.timer.TimerSnapshot;

public class ValueReaders
{
	private static final ValueReader SAME = new ValueReader()
	{
		@Override
		public Object read(Object object)
		{
			return object;
		}
	};
	
	private static final ValueReader TIMER_TOTAL_MS = new ValueReader()
	{
		@Override
		public Long read(TimerSnapshot object)
		{
			return object.getTotalTimeInMs();
		}
	};
	
	private static final ValueReader TIMER_TOTAL_NS = new ValueReader()
	{
		@Override
		public Long read(TimerSnapshot object)
		{
			return object.getTotalTimeInNs();
		}
	};
	
	private static final ValueReader TIMER_SAMPLES = new ValueReader()
	{
		@Override
		public Long read(TimerSnapshot object)
		{
			return object.getSamples();
		}
	};
	
	private ValueReaders()
	{
	}
	
	public static  ValueReader same()
	{
		return SAME;
	}
	
	public static ValueReader forTimerSnapshotTotalTimeInMs()
	{
		return TIMER_TOTAL_MS;
	}
	
	public static ValueReader forTimerSnapshotTotalTimeInNs()
	{
		return TIMER_TOTAL_NS;
	}
	
	public static ValueReader forTimerSnapshotSamples()
	{
		return TIMER_SAMPLES;
	}
	
	/**
	 * Get a {@link Probe probe} that reads a value from the given object.
	 * 
	 * @param object
	 * @param reader
	 * @return
	 */
	public static  Probe valueReaderProbe(I object, ValueReader reader)
	{
		return new ValueReadingProbe(object, reader);
	}
	
	/**
	 * Get a {@link Probe probe} that reads a value from the result of the
	 * given probe.
	 * 
	 * @param probe
	 * @param reader
	 * @return
	 */
	public static  Probe valueReaderProbe(Probe probe, ValueReader reader)
	{
		return new ValueReadingProbeViaProbe(probe, reader);
	}
	
	private static class ValueReadingProbe
		implements Probe
	{
		private final Input object;
		private final ValueReader reader;
	
		public ValueReadingProbe(Input object, ValueReader reader)
		{
			this.object = object;
			this.reader = reader;
		}
		
		@Override
		public Output read()
		{
			return reader.read(object);
		}
	}

	private static class ValueReadingProbeViaProbe
		implements Probe
	{
		private final Probe probe;
		private final ValueReader reader;
	
		public ValueReadingProbeViaProbe(Probe probe, ValueReader reader)
		{
			this.probe = probe;
			this.reader = reader;
		}
		
		@Override
		public Output read()
		{
			Input object = probe.read();
			return reader.read(object);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy