y16t/lib/y16t_idx.h

56 lines
1.1 KiB
C
Raw Normal View History

2022-12-18 02:15:58 +00:00
// SPDX-License-Identifier: ISC
#pragma once
#include <inttypes.h>
#include <stddef.h>
2023-01-03 06:55:00 +00:00
typedef struct {
int fd;
2023-01-04 08:08:09 +00:00
// offset is in 4KiB units
2023-01-03 06:55:00 +00:00
size_t offset;
} y16t_idx_t;
2022-12-18 02:15:58 +00:00
// try to lookup the given coordinates,
// and return the corresponding location via `result`.
2023-01-01 00:26:17 +00:00
// 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(
2023-01-03 06:55:00 +00:00
y16t_idx_t idx,
2023-01-01 00:26:17 +00:00
uint8_t x,
uint8_t y,
uint32_t *result
);
2022-12-18 02:15:58 +00:00
2023-01-01 00:26:17 +00:00
// update a table entry.
int y16t_idx_update(
2023-01-03 06:55:00 +00:00
y16t_idx_t idx,
uint8_t x,
uint8_t y,
uint32_t newval
2023-01-01 00:26:17 +00:00
);
2022-12-18 02:15:58 +00:00
// insert a table entry if it doesn't already exist
int y16t_idx_get_or_insert(
2023-01-03 06:55:00 +00:00
y16t_idx_t idx,
uint8_t x,
uint8_t y,
uint32_t *value,
uint32_t (*palloc)(void*),
void *context
);
2023-01-01 00:26:17 +00:00
// iterate over columns or rows
int y16t_idx_foreach_x(
2023-01-03 06:55:00 +00:00
y16t_idx_t idx,
uint8_t y,
2023-01-04 08:17:59 +00:00
int (*callback)(uint8_t, uint32_t, void*),
2023-01-03 06:55:00 +00:00
void *context
2023-01-01 00:26:17 +00:00
);
2022-12-18 02:15:58 +00:00
2023-01-01 00:26:17 +00:00
int y16t_idx_foreach_y(
2023-01-03 06:55:00 +00:00
y16t_idx_t idx,
uint8_t χ,
2023-01-04 08:17:59 +00:00
int (*callback)(uint8_t, uint32_t, void*),
2023-01-03 06:55:00 +00:00
void *context
2022-12-18 02:15:58 +00:00
);