use librtti for worker/queue/resource

This commit is contained in:
Rongsong Shen 2026-02-25 16:56:42 +08:00
parent 532c68e6e1
commit 2ee87d4ee6
23 changed files with 1078 additions and 396 deletions

View file

@ -23,6 +23,47 @@ static struct {
static typeinfo_t job_submit_type;
static uint32_t submit_data_key_hash(job_submit_data_t* key)
{
return hash_block((char*)key, sizeof(*key));
}
static int submit_data_key_assign(job_submit_data_t** dst,
job_submit_data_t* src)
{
job_submit_data_t* p = calloc(1, sizeof(*p));
if (p == NULL) {
return -ENOMEM;
}
memcpy(p, src, sizeof(*p));
*dst = p;
return 1;
}
static int submit_data_key_cmp(job_submit_data_t* key1, job_submit_data_t* key2)
{
return memcmp((void*)key1, (void*)key2, sizeof(*key1));
}
static void submit_data_key_destroy(job_submit_data_t* key)
{
if (key == NULL) {
return;
}
FREEUP(key);
}
static kv_key_ops_t submit_data_key_ops
= { .hash = (kv_key_hash_fn_t)submit_data_key_hash,
.assign = (kv_key_assign_fn_t)submit_data_key_assign,
.cmp = (kv_key_cmp_fn_t)submit_data_key_cmp,
.destroy = (kv_key_destroy_fn_t)submit_data_key_destroy };
static void jobsub_destroy(meta_obj_t*);
static void jobsub_killer(var s)
@ -36,14 +77,18 @@ static void jobsub_killer(var s)
static int jobsub_table_init(int nslots)
{
kv_params_t params;
if (nslots <= 1) {
return -EINVAL;
}
params.nslots = nslots;
params.keyops = &submit_data_key_ops;
params.datakiller = jobsub_killer;
mylock_init(&(jobsub_table.lock));
jobsub_table.sub_table
= makeInstance(&kvtab_generic_type, nslots, jobsub_killer,
sizeof(job_submit_data_t), key_cmp_default);
jobsub_table.sub_table = makeInstance(&kvtab_type, &params);
if (jobsub_table.sub_table == NULL) {
return -errno;
}
@ -417,16 +462,59 @@ static void startinfo_killer(var s)
destroy_(s, (obj_destroy_fn_t)startinfo_destroy);
}
static uint32_t startinfo_key_hash(job_startinfo_t* key)
{
return hash_block((void*)key, sizeof(*key));
}
static int startinfo_key_assign(job_startinfo_t** dst, job_startinfo_t* src)
{
job_startinfo_t* p = calloc(1, sizeof(*p));
if (p == NULL) {
return -ENOMEM;
}
memcpy(p, src, sizeof(*p));
*dst = p;
return 1;
}
static int startinfo_key_cmp(job_startinfo_t* k1, job_startinfo_t* k2)
{
return memcmp((void*)k1, (void*)k2, sizeof(*k1));
}
static void startinfo_key_destroy(job_startinfo_t* key)
{
if (key == NULL) {
return;
}
FREEUP(key);
}
static kv_key_ops_t startinfo_key_ops
= { .hash = (kv_key_hash_fn_t)startinfo_key_hash,
.assign = (kv_key_assign_fn_t)startinfo_key_assign,
.cmp = (kv_key_cmp_fn_t)startinfo_key_cmp,
.destroy = (kv_key_destroy_fn_t)startinfo_key_destroy };
static int startinfo_table_init(int nslots)
{
kv_params_t params;
if (nslots <= 1) {
return -EINVAL;
}
params.nslots = nslots;
params.keyops = &startinfo_key_ops;
params.datakiller = startinfo_killer;
mylock_init(&(startinfo_table.lock));
startinfo_table.startinfo_table
= makeInstance(&kvtab_generic_type, nslots, startinfo_killer,
sizeof(job_startinfo_t), key_cmp_default);
startinfo_table.startinfo_table = makeInstance(&kvtab_type, &params);
if (startinfo_table.startinfo_table == NULL) {
return -errno;
}