Пример #1
0
GtNodeVisitor* gt_cds_check_visitor_new(void)
{
  GtNodeVisitor *nv = gt_node_visitor_create(gt_cds_check_visitor_class());
  GtCDSCheckVisitor *v = cds_check_visitor_cast(nv);
  v->cds_features = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL);
  return nv;
}
Пример #2
0
static int cds_check_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn,
                                          GtError *err)
{
  GtCDSCheckVisitor *v = cds_check_visitor_cast(nv);
  GtFeatureNodeIterator *fni;
  GtFeatureNode *node;
  int had_err = 0;
  gt_error_check(err);
  gt_assert(v && fn);
  fni = gt_feature_node_iterator_new(fn);
  while (!had_err && (node = gt_feature_node_iterator_next(fni)))
    had_err = check_cds_phases_if_necessary(node, v, false, err);
  gt_feature_node_iterator_delete(fni);
  gt_hashmap_reset(v->cds_features);
  while (v->splitting_is_necessary) {
    split_cds_features(v->cds_features_to_split, fn);
    gt_hashmap_reset(v->cds_features_to_split);
    v->splitting_is_necessary = false;
    /* perform second pass to correct phases */
    fni = gt_feature_node_iterator_new(fn);
    while (!had_err && (node = gt_feature_node_iterator_next(fni)))
      had_err = check_cds_phases_if_necessary(node, v, false, err);
    gt_feature_node_iterator_delete(fni);
    gt_hashmap_reset(v->cds_features);
  }
  return had_err;
}
Пример #3
0
static int cds_check_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn,
                                          GtError *err)
{
  GtCDSCheckVisitor *v = cds_check_visitor_cast(nv);
  GtFeatureNodeIterator *fni;
  GtFeatureNode *node;
  int had_err = 0;
  gt_error_check(err);
  gt_assert(v && fn);
  fni = gt_feature_node_iterator_new(fn);
  while (!had_err && (node = gt_feature_node_iterator_next(fni)))
    had_err = check_cds_phases_if_necessary(node, v, err);
  gt_feature_node_iterator_delete(fni);
  gt_hashmap_reset(v->cds_features);
  return had_err;
}
Пример #4
0
static void cds_check_visitor_free(GtNodeVisitor *nv)
{
  GtCDSCheckVisitor *v = cds_check_visitor_cast(nv);
  gt_hashmap_delete(v->cds_features_to_split);
  gt_hashmap_delete(v->cds_features);
}