Record Class LinearDataSlice<T>

java.lang.Object
java.lang.Record
velox.api.layer1.dynamichistory.LinearDataSlice<T>
Type Parameters:
T - decoded block payload type, as defined by the structure's descriptor

public record LinearDataSlice<T>(List<LinearDataSlice.Entry<T>> entries) extends Record
The finalized blocks of one interval of a linear data structure intersecting a requested time range, clamped to what the server has recorded.

Entries tile the time axis: consecutive entries always touch (start[i] = end[i-1]) and their index ranges are consecutive. Two kinds of entry exist:

  • LinearDataSlice.Block — one recorded block. Periods with no market activity are still recorded, as a block whose payload says so (e.g. a candle with zero volume), so quiet markets do not produce gaps.
  • LinearDataSlice.Gap — a run of blocks the server does not have at all: a hole between merged recordings, or blocks removed by retention. It carries the missing index range and the time it spans, so a consumer can render or skip it without arithmetic.

A gap is only ever reported between two blocks. Where the recorded data simply ends before the requested range does (the server's finalized edge, or blocks missing at the very start of the range), the slice is shorter rather than ending in a gap — there is no second block to bound the hole in time. An unavailable structure or interval yields an empty slice rather than an error.

Consumers that only want data can use blocks(); those that render the time axis should walk entries() and switch over the sealed LinearDataSlice.Entry.

  • Constructor Details

    • LinearDataSlice

      public LinearDataSlice(List<LinearDataSlice.Entry<T>> entries)
      Creates an instance of a LinearDataSlice record class.
      Parameters:
      entries - the value for the entries record component
  • Method Details

    • empty

      public static <T> LinearDataSlice<T> empty()
    • isEmpty

      public boolean isEmpty()
      True if there is neither a block nor a gap — nothing recorded intersects the request.
    • hasGaps

      public boolean hasGaps()
      True if at least one LinearDataSlice.Gap separates the blocks.
    • blocks

      public List<LinearDataSlice.Block<T>> blocks()
      The recorded blocks only, ascending by index. Gaps are skipped, so indices may jump.
    • gaps

      public List<LinearDataSlice.Gap<T>> gaps()
      The holes only, ascending by index.
    • toString

      public final String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with Objects::equals(Object,Object).
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • entries

      public List<LinearDataSlice.Entry<T>> entries()
      Returns the value of the entries record component.
      Returns:
      the value of the entries record component