1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// Defines \c llcas_functions_t, the table of function pointers that is
11/// populated by looking up the \c llcas_* symbols of a loaded CAS plugin.
12///
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_LIB_CAS_PLUGINAPI_H
16#define LLVM_LIB_CAS_PLUGINAPI_H
17
18#include "llvm-c/CAS/PluginAPI_types.h"
19
20/// See documentation in \c "llvm-c/CAS/PluginAPI_functions.h" for how these
21/// functions are used.
22struct llcas_functions_t {
23 void (*get_plugin_version)(unsigned *major, unsigned *minor);
24
25 void (*string_dispose)(char *);
26
27 void (*cancellable_cancel)(llcas_cancellable_t);
28
29 void (*cancellable_dispose)(llcas_cancellable_t);
30
31 llcas_cas_options_t (*cas_options_create)(void);
32
33 void (*cas_options_dispose)(llcas_cas_options_t);
34
35 void (*cas_options_set_client_version)(llcas_cas_options_t, unsigned major,
36 unsigned minor);
37
38 void (*cas_options_set_ondisk_path)(llcas_cas_options_t, const char *path);
39
40 bool (*cas_options_set_option)(llcas_cas_options_t, const char *name,
41 const char *value, char **error);
42
43 llcas_cas_t (*cas_create)(llcas_cas_options_t, char **error);
44
45 void (*cas_dispose)(llcas_cas_t);
46
47 int64_t (*cas_get_ondisk_size)(llcas_cas_t, char **error);
48
49 bool (*cas_set_ondisk_size_limit)(llcas_cas_t, int64_t size_limit,
50 char **error);
51
52 bool (*cas_prune_ondisk_data)(llcas_cas_t, char **error);
53
54 bool (*cas_validate)(llcas_cas_t, bool check_hash, char **error);
55
56 llcas_validation_result_t (*cas_validate_if_needed)(llcas_cas_options_t,
57 bool check_hash,
58 bool force, char **error);
59
60 llcas_validation_result_t (*cas_recover_ondisk_data)(llcas_cas_options_t,
61 char **error);
62
63 unsigned (*digest_parse)(llcas_cas_t, const char *printed_digest,
64 uint8_t *bytes, size_t bytes_size, char **error);
65
66 bool (*digest_print)(llcas_cas_t, llcas_digest_t, char **printed_id,
67 char **error);
68
69 char *(*cas_get_hash_schema_name)(llcas_cas_t);
70
71 bool (*cas_get_objectid)(llcas_cas_t, llcas_digest_t, llcas_objectid_t *,
72 char **error);
73
74 llcas_digest_t (*objectid_get_digest)(llcas_cas_t, llcas_objectid_t);
75
76 llcas_lookup_result_t (*cas_contains_object)(llcas_cas_t, llcas_objectid_t,
77 bool globally, char **error);
78
79 llcas_lookup_result_t (*cas_load_object)(llcas_cas_t, llcas_objectid_t,
80 llcas_loaded_object_t *,
81 char **error);
82 void (*cas_load_object_async)(llcas_cas_t, llcas_objectid_t, void *ctx_cb,
83 llcas_cas_load_object_cb,
84 llcas_cancellable_t *);
85
86 bool (*cas_store_object)(llcas_cas_t, llcas_data_t,
87 const llcas_objectid_t *refs, size_t refs_count,
88 llcas_objectid_t *, char **error);
89
90 bool (*cas_store_from_filepath)(llcas_cas_t, const char *filepath,
91 llcas_objectid_t *, char **error);
92
93 llcas_data_t (*loaded_object_get_data)(llcas_cas_t, llcas_loaded_object_t);
94
95 llcas_object_refs_t (*loaded_object_get_refs)(llcas_cas_t,
96 llcas_loaded_object_t);
97
98 llcas_data_t (*loaded_object_get_standalone_data)(llcas_cas_t,
99 llcas_loaded_object_t);
100
101 void (*standalone_data_dispose)(llcas_data_t);
102
103 size_t (*object_refs_get_count)(llcas_cas_t, llcas_object_refs_t);
104
105 llcas_objectid_t (*object_refs_get_id)(llcas_cas_t, llcas_object_refs_t,
106 size_t index);
107
108 bool (*loaded_object_export_data_to_filepath)(llcas_cas_t,
109 llcas_loaded_object_t,
110 const char *filepath,
111 char **error);
112
113 /*===--------------------------------------------------------------------===*\
114 |* Action cache API
115 \*===--------------------------------------------------------------------===*/
116
117 llcas_lookup_result_t (*actioncache_get_for_digest)(llcas_cas_t,
118 llcas_digest_t key,
119 llcas_objectid_t *p_value,
120 bool globally,
121 char **error);
122
123 void (*actioncache_get_for_digest_async)(llcas_cas_t, llcas_digest_t key,
124 bool globally, void *ctx_cb,
125 llcas_actioncache_get_cb,
126 llcas_cancellable_t *);
127
128 bool (*actioncache_put_for_digest)(llcas_cas_t, llcas_digest_t key,
129 llcas_objectid_t value, bool globally,
130 char **error);
131
132 void (*actioncache_put_for_digest_async)(llcas_cas_t, llcas_digest_t key,
133 llcas_objectid_t value,
134 bool globally, void *ctx_cb,
135 llcas_actioncache_put_cb,
136 llcas_cancellable_t *);
137
138 bool (*actioncache_validate)(llcas_cas_t, char **error);
139};
140
141#endif // LLVM_LIB_CAS_PLUGINAPI_H
142