GtFeatureIndex* gt_feature_index_create(const GtFeatureIndexClass *fic) { GtFeatureIndex *fi; gt_assert(fic && fic->size); fi = gt_calloc(1, fic->size); fi->c_class = fic; fi->pvt = gt_calloc(1, sizeof (GtFeatureIndexMembers)); fi->pvt->lock = gt_rwlock_new(); return fi; }
GtLayout* gt_layout_new_with_twc(GtDiagram *diagram, unsigned int width, GtStyle *style, GtTextWidthCalculator *twc, GtError *err) { GtLayout *layout; GtHashmap *blocks; gt_assert(diagram); gt_assert(style); gt_assert(twc); gt_assert(err); if (check_width(width, style, err) < 0) return NULL; layout = gt_calloc(1, sizeof (GtLayout)); layout->twc = twc; layout->style = style; layout->width = width; layout->blocks = NULL; layout->viewrange = gt_diagram_get_range(diagram); layout->nof_tracks = 0; layout->track_ordering_func = NULL; layout->block_ordering_func = gt_block_compare; layout->t_cmp_data = NULL; layout->b_cmp_data = NULL; layout->lock = gt_rwlock_new(); layout->own_twc = false; layout->layout_done = false; layout->custom_tracks = gt_array_ref(gt_diagram_get_custom_tracks(diagram)); /* XXX: use other container type here! */ layout->tracks = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_track_delete); blocks = gt_diagram_get_blocks(diagram, err); if (!blocks) { gt_array_delete(layout->custom_tracks); gt_hashmap_delete(layout->tracks); gt_free(layout); return NULL; } else layout->blocks = gt_hashmap_ref(blocks); return layout; }
static GtDiagram* gt_diagram_new_generic(GtArray *features, const GtRange *range, GtStyle *style, bool ref_features) { GtDiagram *diagram; diagram = gt_calloc(1, sizeof (GtDiagram)); diagram->nodeinfo = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL); diagram->style = style; diagram->lock = gt_rwlock_new(); diagram->range = *range; if (ref_features) diagram->features = gt_array_ref(features); else diagram->features = features; diagram->select_func = default_track_selector; diagram->custom_tracks = gt_array_new(sizeof (GtCustomTrack*)); /* init caches */ diagram->collapsingtypes = gt_hashmap_new(GT_HASH_STRING, NULL, gt_free_func); diagram->groupedtypes = gt_hashmap_new(GT_HASH_STRING, NULL, gt_free_func); diagram->caption_display_status = gt_hashmap_new(GT_HASH_DIRECT, NULL, gt_free_func); return diagram; }