use librtti for worker/queue/resource
This commit is contained in:
parent
532c68e6e1
commit
2ee87d4ee6
23 changed files with 1078 additions and 396 deletions
100
src/lib/jobj.c
100
src/lib/jobj.c
|
|
@ -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, ¶ms);
|
||||
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, ¶ms);
|
||||
if (startinfo_table.startinfo_table == NULL) {
|
||||
return -errno;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue