y16t/lib/y16t_idx.h
2023-01-04 09:17:59 +01:00

56 lines
1.1 KiB
C

// SPDX-License-Identifier: ISC
#pragma once
#include <inttypes.h>
#include <stddef.h>
typedef struct {
int fd;
// offset is in 4KiB units
size_t offset;
} y16t_idx_t;
// try to lookup the given coordinates,
// and return the corresponding location via `result`.
// the file given as `fh` is expected to be at least 256KiB large
// returns a negative errno number in case of failure
__attribute__((nonnull))
int y16t_idx_lookup(
y16t_idx_t idx,
uint8_t x,
uint8_t y,
uint32_t *result
);
// update a table entry.
int y16t_idx_update(
y16t_idx_t idx,
uint8_t x,
uint8_t y,
uint32_t newval
);
// insert a table entry if it doesn't already exist
int y16t_idx_get_or_insert(
y16t_idx_t idx,
uint8_t x,
uint8_t y,
uint32_t *value,
uint32_t (*palloc)(void*),
void *context
);
// iterate over columns or rows
int y16t_idx_foreach_x(
y16t_idx_t idx,
uint8_t y,
int (*callback)(uint8_t, uint32_t, void*),
void *context
);
int y16t_idx_foreach_y(
y16t_idx_t idx,
uint8_t χ,
int (*callback)(uint8_t, uint32_t, void*),
void *context
);