| 603 | /* ── Lifecycle ──────────────────────────────────────────────────── */ |
| 604 | |
| 605 | cbm_gbuf_t *cbm_gbuf_new(const char *project, const char *root_path) { |
| 606 | cbm_gbuf_t *gb = cbm_calloc(CBM_MEM_CLASS_OTHER, sizeof(cbm_gbuf_t)); |
| 607 | if (!gb) { |
| 608 | return NULL; |
| 609 | } |
| 610 | |
| 611 | gb->project = cbm_mem_strdup(CBM_MEM_CLASS_GBUF_STRING, project ? project : ""); |
| 612 | gb->root_path = cbm_mem_strdup(CBM_MEM_CLASS_GBUF_STRING, root_path ? root_path : ""); |
| 613 | gb->next_id = SKIP_ONE; |
| 614 | gb->shared_ids = NULL; |
| 615 | |
| 616 | gb->node_by_qn = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_INDEX, CBM_SZ_256); |
| 617 | gb->by_id = NULL; |
| 618 | gb->by_id_cap = 0; |
| 619 | gb->nodes_by_label = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_INDEX, CBM_SZ_32); |
| 620 | gb->nodes_by_name = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_INDEX, CBM_SZ_256); |
| 621 | |
| 622 | gb->edges_by_source_type = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_INDEX, CBM_SZ_256); |
| 623 | gb->edges_by_target_type = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_INDEX, CBM_SZ_256); |
| 624 | gb->edges_by_type = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_INDEX, CBM_SZ_32); |
| 625 | |
| 626 | gb->intern_pool = cbm_ht_create_in(CBM_MEM_CLASS_GBUF_STRING, CBM_SZ_1K); |
| 627 | |
| 628 | return gb; |
| 629 | } |
| 630 | |
| 631 | cbm_gbuf_t *cbm_gbuf_new_shared_ids(const char *project, const char *root_path, |
| 632 | _Atomic int64_t *id_source) { |