102 lines
2.3 KiB
C
102 lines
2.3 KiB
C
#ifndef AMDUAT_ENC_ASL_CORE_INDEX_H
|
|
#define AMDUAT_ENC_ASL_CORE_INDEX_H
|
|
|
|
#include "amduat/asl/core.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
enum {
|
|
AMDUAT_ASL_CORE_INDEX_VERSION = 3,
|
|
AMDUAT_ASL_CORE_INDEX_HEADER_SIZE = 112,
|
|
AMDUAT_ASL_CORE_INDEX_RECORD_SIZE = 48,
|
|
AMDUAT_ASL_CORE_INDEX_EXTENT_SIZE = 16,
|
|
AMDUAT_ASL_CORE_INDEX_FOOTER_SIZE = 24
|
|
};
|
|
|
|
enum {
|
|
AMDUAT_ASL_INDEX_FLAG_TOMBSTONE = 0x00000001u
|
|
};
|
|
|
|
typedef struct {
|
|
uint64_t magic;
|
|
uint16_t version;
|
|
uint16_t shard_id;
|
|
uint32_t header_size;
|
|
uint64_t snapshot_min;
|
|
uint64_t snapshot_max;
|
|
uint64_t record_count;
|
|
uint64_t records_offset;
|
|
uint64_t bloom_offset;
|
|
uint64_t bloom_size;
|
|
uint64_t digests_offset;
|
|
uint64_t digests_size;
|
|
uint64_t extents_offset;
|
|
uint64_t extent_count;
|
|
uint32_t segment_domain_id;
|
|
uint8_t segment_visibility;
|
|
uint8_t federation_version;
|
|
uint16_t reserved0;
|
|
uint64_t flags;
|
|
} amduat_asl_segment_header_t;
|
|
|
|
typedef struct {
|
|
uint32_t hash_id;
|
|
uint16_t digest_len;
|
|
uint16_t reserved0;
|
|
uint64_t digest_offset;
|
|
uint64_t extents_offset;
|
|
uint32_t extent_count;
|
|
uint32_t total_length;
|
|
uint32_t domain_id;
|
|
uint8_t visibility;
|
|
uint8_t has_cross_domain_source;
|
|
uint16_t reserved1;
|
|
uint32_t cross_domain_source;
|
|
uint32_t flags;
|
|
} amduat_asl_index_record_t;
|
|
|
|
typedef struct {
|
|
uint64_t block_id;
|
|
uint32_t offset;
|
|
uint32_t length;
|
|
} amduat_asl_extent_record_t;
|
|
|
|
typedef struct {
|
|
uint64_t crc64;
|
|
uint64_t seal_snapshot;
|
|
uint64_t seal_time_ns;
|
|
} amduat_asl_segment_footer_t;
|
|
|
|
typedef struct {
|
|
amduat_asl_segment_header_t header;
|
|
amduat_octets_t bloom;
|
|
amduat_asl_index_record_t *records;
|
|
size_t record_count;
|
|
amduat_octets_t digests;
|
|
amduat_asl_extent_record_t *extents;
|
|
size_t extent_count;
|
|
amduat_asl_segment_footer_t footer;
|
|
} amduat_asl_core_index_segment_t;
|
|
|
|
bool amduat_enc_asl_core_index_encode_v1(
|
|
const amduat_asl_core_index_segment_t *segment,
|
|
amduat_octets_t *out_bytes);
|
|
|
|
bool amduat_enc_asl_core_index_decode_v1(
|
|
amduat_octets_t bytes,
|
|
amduat_asl_core_index_segment_t *out_segment);
|
|
|
|
void amduat_enc_asl_core_index_free(amduat_asl_core_index_segment_t *segment);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* AMDUAT_ENC_ASL_CORE_INDEX_H */
|