FileSystemTileStore

class FileSystemTileStore(baseDirectory: String, contentKey: String, val cachePolicy: CachePolicy) : TileStore, CachedSourceInfoProvider

Filesystem-backed TileStore for iOS. One root directory per content key under baseDirectory; tiles live at ${baseDirectory}/${contentKey}/${z}/${x}/${y}.bin.

ETag / Last-Modified ride alongside in a ${y}.meta companion file written only when at least one of them is set on the blob — most XYZ servers don't supply either, so the common case stays one-file-per-tile.

No locking — concurrent writes to the same tile are last-writer-wins. Acceptable for the LRU-driven tile-pyramid pipeline where double-write means double-network and not data corruption.

evict honors a bounded CachePolicy by dropping the oldest tile files (by mtime); an unbounded policy is a no-op.

Constructors

Link copied to clipboard
constructor(baseDirectory: String, contentKey: String, cachePolicy: CachePolicy)

Properties

Link copied to clipboard
open override val cacheInfo: CachedSourceInfo
Link copied to clipboard
open override val cachePolicy: CachePolicy

Functions

Link copied to clipboard
open suspend override fun bumpValidatedAt(z: Int, x: Int, y: Int)

Refresh a tile's freshness timestamp WITHOUT rewriting its bytes — the conditional-GET 304 Not Modified path. Restarts the stale-while-revalidate window so a still-current tile isn't re-requested every frame. Default no-op for stores that don't track freshness.

Link copied to clipboard
open suspend fun bumpValidatedAtBatch(keys: Collection<Long>)

bumpValidatedAt for many tiles at once — keys packed by tileKey. Stores that commit per call should override this with a single-transaction implementation so a coalesced restamp burst costs one commit instead of one per tile.

Link copied to clipboard
open suspend override fun deleteTile(z: Int, x: Int, y: Int)

Drop a tile from the store (after a server-side delete, manual eviction, etc.).

Link copied to clipboard
open suspend override fun evict()

Capacity eviction: drop tile files oldest-first (by mtime) until within CachePolicy.maxEntries (tile count), removing each .meta sidecar with its .bin. staleAfter never deletes.

Link copied to clipboard
open suspend override fun readTile(z: Int, x: Int, y: Int): TileBlob?

Returns the cached blob, or null if the tile isn't present. Treat TileBlob.EMPTY as "the server confirmed no tile here" — distinct from null cache miss.

Link copied to clipboard
open suspend fun setBoundingSector(sector: Sector)

Persist sector as the store's content bounding box — the data-availability extent a bulk download records (e.g. gpkg_contents). Default no-op for stores without one.

Link copied to clipboard
open suspend override fun sizeBytes(): Long

Approximate byte size of all tiles in the store.

Link copied to clipboard
open suspend override fun writeTile(z: Int, x: Int, y: Int, blob: TileBlob)

Persist a tile. TileBlob.EMPTY is allowed (and recommended) for "no tile here".