Class GenericTimeStampedCache<T extends TimeStamped>
- java.lang.Object
-
- org.orekit.utils.GenericTimeStampedCache<T>
-
- Type Parameters:
T
- Type of the cached data.
- All Implemented Interfaces:
TimeStampedCache<T>
public class GenericTimeStampedCache<T extends TimeStamped> extends Object implements TimeStampedCache<T>
Generic thread-safe cache fortime-stamped
data.- Author:
- Luc Maisonobe
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_CACHED_SLOTS_NUMBER
Default number of independent cached time slots.
-
Constructor Summary
Constructors Constructor Description GenericTimeStampedCache(int neighborsSize, int maxSlots, double maxSpan, double newSlotInterval, TimeStampedGenerator<T> generator)
Simple constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description T
getEarliest()
Get the earliest cached entry.int
getEntries()
Get the total number of entries cached.int
getGenerateCalls()
Get the number of calls to the generate method.TimeStampedGenerator<T>
getGenerator()
Get the generator.int
getGetNeighborsCalls()
Get the number of calls to thegetNeighbors(AbsoluteDate)
method.T
getLatest()
Get the latest cached entry.int
getMaxSlots()
Get the maximum number of independent cached time slots.double
getMaxSpan()
Get the maximum duration span in seconds of one slot.Stream<T>
getNeighbors(AbsoluteDate central)
Get the entries surrounding a central date.int
getNeighborsSize()
Get the fixed size of the arrays to be returned bygetNeighbors(AbsoluteDate)
.double
getNewSlotQuantumGap()
Get quantum gap above which a new slot is created instead of extending an existing one.int
getSlots()
Get the number of slots in use.int
getSlotsEvictions()
Get the number of slots evictions.
-
-
-
Field Detail
-
DEFAULT_CACHED_SLOTS_NUMBER
public static final int DEFAULT_CACHED_SLOTS_NUMBER
Default number of independent cached time slots.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
GenericTimeStampedCache
public GenericTimeStampedCache(int neighborsSize, int maxSlots, double maxSpan, double newSlotInterval, TimeStampedGenerator<T> generator)
Simple constructor.- Parameters:
neighborsSize
- fixed size of the arrays to be returned bygetNeighbors(AbsoluteDate)
, must be at least 2maxSlots
- maximum number of independent cached time slotsmaxSpan
- maximum duration span in seconds of one slot (can be set toDouble.POSITIVE_INFINITY
if desired)newSlotInterval
- time interval above which a new slot is created instead of extending an existing onegenerator
- generator to use for yet non-existent data
-
-
Method Detail
-
getGenerator
public TimeStampedGenerator<T> getGenerator()
Get the generator.- Returns:
- generator
-
getMaxSlots
public int getMaxSlots()
Get the maximum number of independent cached time slots.- Returns:
- maximum number of independent cached time slots
-
getMaxSpan
public double getMaxSpan()
Get the maximum duration span in seconds of one slot.- Returns:
- maximum duration span in seconds of one slot
-
getNewSlotQuantumGap
public double getNewSlotQuantumGap()
Get quantum gap above which a new slot is created instead of extending an existing one.The quantum gap is the
newSlotInterval
value provided at construction rounded to the nearest quantum step used internally by the cache.- Returns:
- quantum gap in seconds
-
getGetNeighborsCalls
public int getGetNeighborsCalls()
Get the number of calls to thegetNeighbors(AbsoluteDate)
method.This number of calls is used as a reference to interpret
getGenerateCalls()
.- Returns:
- number of calls to the
getNeighbors(AbsoluteDate)
method - See Also:
getGenerateCalls()
-
getGenerateCalls
public int getGenerateCalls()
Get the number of calls to the generate method.This number of calls is related to the number of cache misses and may be used to tune the cache configuration. Each cache miss implies at least one call is performed, but may require several calls if the new date is far offset from the existing cache, depending on the number of elements and step between elements in the arrays returned by the generator.
- Returns:
- number of calls to the generate method
- See Also:
getGetNeighborsCalls()
-
getSlotsEvictions
public int getSlotsEvictions()
Get the number of slots evictions.This number should remain small when the max number of slots is sufficient with respect to the number of concurrent requests to the cache. If it increases too much, then the cache configuration is probably bad and cache does not really improve things (in this case, the
number of calls to the generate method
will probably increase too.- Returns:
- number of slots evictions
-
getSlots
public int getSlots()
Get the number of slots in use.- Returns:
- number of slots in use
-
getEntries
public int getEntries()
Get the total number of entries cached.- Returns:
- total number of entries cached
-
getEarliest
public T getEarliest() throws IllegalStateException
Get the earliest cached entry.- Specified by:
getEarliest
in interfaceTimeStampedCache<T extends TimeStamped>
- Returns:
- earliest cached entry
- Throws:
IllegalStateException
- if the cache has no slots at all- See Also:
getSlots()
-
getLatest
public T getLatest() throws IllegalStateException
Get the latest cached entry.- Specified by:
getLatest
in interfaceTimeStampedCache<T extends TimeStamped>
- Returns:
- latest cached entry
- Throws:
IllegalStateException
- if the cache has no slots at all- See Also:
getSlots()
-
getNeighborsSize
public int getNeighborsSize()
Get the fixed size of the arrays to be returned bygetNeighbors(AbsoluteDate)
.- Specified by:
getNeighborsSize
in interfaceTimeStampedCache<T extends TimeStamped>
- Returns:
- size of the array
-
getNeighbors
public Stream<T> getNeighbors(AbsoluteDate central)
Get the entries surrounding a central date.If the central date is well within covered range, the returned array will be balanced with half the points before central date and half the points after it (depending on n parity, of course). If the central date is near the generator range boundary, then the returned array will be unbalanced and will contain only the n earliest (or latest) generated (and cached) entries. A typical example of the later case is leap seconds cache, since the number of leap seconds cannot be arbitrarily increased.
- Specified by:
getNeighbors
in interfaceTimeStampedCache<T extends TimeStamped>
- Parameters:
central
- central date- Returns:
- array of cached entries surrounding specified date (the size
of the array is fixed to the one specified in the
GenericTimeStampedCache(int, int, double, double, TimeStampedGenerator)
- See Also:
getEarliest()
,getLatest()
-
-