SDDL
May. 8th, 2026 11:48 amНовый язычок появляется для описания структуры файлов. Применяется для всяких сжатий данных. Вот пример.
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/

