2026-05-08

SDDL

2026-05-08 11:48
vak: (Знайка)
Новый язычок появляется для описания структуры файлов. Применяется для всяких сжатий данных. Вот пример.
record CatalogHeader() {
STAR0: Int32LE, # Subtract from star number to get sequence number
STAR1: Int32LE, # First star number in file
STARN: Int32LE, # Number of stars; <0 → coordinates J2000
STNUM: Int32LE, # ID scheme / name flag
MPROP: Int32LE, # Motion info: 0=none, 1=proper, 2=radial
NMAG: Int32LE, # Number of magnitudes (0–10)
NBENT: Int32LE # Bytes per star entry
}

record StarEntry(STNUM, MPROP, NMAG) {
when STNUM > 0 { XNO: Float32LE }, # Catalog number
SRA0: Float64LE, # Right Ascension
SDEC0: Float64LE, # Declination
ISP: Bytes(2), # Spectral type
when abs(NMAG) > 0 { MAG: Int16LE[abs(NMAG)] }, # Magnitudes
when MPROP >= 1 {
XRPM: Float32LE, # R.A. proper motion
XDPM: Float32LE # Dec. proper motion
},
when MPROP == 2 { SVEL: Float64LE }, # Radial velocity
when STNUM < 0 { NAME: Bytes(-STNUM) } # Object name
}

# File structure
header: CatalogHeader

# Parse the header to get the number of stars and entry parameters
STNUM = header.STNUM
MPROP = header.MPROP
NMAG = header.NMAG
NBENT = header.NBENT
record_count = abs(header.STARN)

expect sizeof(StarEntry(STNUM, MPROP, NMAG)) == NBENT

stars: StarEntry(STNUM, MPROP, NMAG)[record_count]
Описание здесь: openzl.org/sddl/getting-started/
vak: (Украина)
Но только в указанном квадрате.

А Трамп решил, что он Путин, и объявил перемирие на три дня между Россией и Украиной. Всем пофигу, конечно, но сам факт смешной.