/* * Copyright 2025 Intel Corporation * SPDX-License-Identifier: MIT */ #ifndef MDA_SLICE_H #define MDA_SLICE_H #include #include #include "util/hash_table.h" #ifdef __cplusplus extern "C" { #endif /* Non-owning string slice. Makes convenient to refer to parts of an existing * buffer instead of duplicating into new strings. */ typedef struct slice { const char *data; int len; } slice; /* To be used when printf formatting pattern "%.*s". */ #define SLICE_FMT(s) (s).len, (s).data slice slice_from_cstr(const char *str); bool slice_is_empty(slice s); bool slice_equal(slice a, slice b); bool slice_equal_cstr(slice s, const char *cstr); bool slice_contains_str(slice s, slice needle); bool slice_starts_with(slice s, slice prefix); bool slice_ends_with(slice s, slice suffix); char *slice_to_cstr(void *mem_ctx, slice s); slice slice_find_char(slice s, char c); slice slice_find_str(slice s, slice needle); slice slice_strip_prefix(slice s, slice prefix); slice slice_substr_from(slice s, int start); slice slice_substr_to(slice s, int end); slice slice_substr(slice s, int start, int end); typedef struct slice_cut_result { slice before; slice after; bool found; } slice_cut_result; slice_cut_result slice_cut(slice s, char c); slice_cut_result slice_cut_n(slice s, char c, int n); /* Hash table support. * * Mesa src/util/hash_table.h has support for keys up to pointer * size, so a slice by itself can't be stored directly in the * same way a number would. So the functions below will use * pointers to slices, but ensure that when _stored_ as keys, * a copy of the slice itself will be made and owned by the * hash table. * * Note that the contents of the slices themselves are not * owned by the slices, so also not by the hash table. */ struct hash_table *slice_hash_table_create(void *mem_ctx); struct hash_entry *slice_hash_table_insert(struct hash_table *ht, slice key, void *data); static inline struct hash_entry *slice_hash_table_search(struct hash_table *ht, slice key) { return _mesa_hash_table_search(ht, &key); } #ifdef __cplusplus } #endif #endif /* MDA_SLICE_H */