Skip to content
Snippets Groups Projects
Select Git revision
  • 73cea19601f63ec2cab425ba6c8b27edf3159421
  • master default protected
  • johannes
  • partial_parser
  • Aloui_Dary
  • ignore_punct
  • AC
  • classifier
  • fixhelp
  • libmacaon2
  • error_predictor
  • morpho
  • ssrnn
  • tfparsing
  • silvio
  • tagger_options
  • maca_trans_frame_parser
  • alexis
  • new_config
  • tagparse
  • maca_graph_parser
21 results

dico_vec.c

Blame
  • dico_vec.c 1.84 KiB
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"dico_vec.h"
    #include"util.h"
    
    
    dico_vec *dico_vec_new(void)
    {
      dico_vec *dv = (dico_vec *)memalloc(sizeof(dico_vec));
      dv->nb = 0;
      dv->t = NULL;
      dv->ht = hash_new(20);
      return dv;
    }
    
    
    void dico_vec_free(dico_vec *dv)
    {
      if(dv){
          if (dv->ht)
    	  hash_free(dv->ht);
    
          if(dv->t)
    	  free(dv->t);
          free(dv);
      }
    }
    
    dico *dico_vec_get_dico(dico_vec *dv, char *dico_name)
    {
      int dico_nb = hash_get_val(dv->ht, dico_name);
      if(dico_nb == HASH_INVALID_VAL) return NULL;
      return dv->t[dico_nb];
    }
    
    int dico_vec_add(dico_vec *dv, dico *d)
    {
      char *dico_name = NULL;
      int dico_nb = dv->nb;
      dv->nb++;
      dv->t = (dico **)realloc(dv->t, dv->nb * sizeof(dico *));
      dv->t[dico_nb] = d;
      if(d->name) dico_name = strdup(d->name);
    
      hash_add(dv->ht, dico_name, dico_nb);
    
      return dv->nb;
    }
    
    void dico_vec_empty(dico_vec *dv)
    {
      dv->nb = 0;
    }
    
    
    void dico_vec_print(char *filename, dico_vec *dv){
      int i;
      FILE  *f;
      if(filename == NULL){
        f = stdout;
      }
      else{
        f= fopen(filename, "w");
        if(f == NULL){
          fprintf(stderr, "cannot open file %s\n", filename);
          exit(1);
        }
      }
      for(i=0; i < dv->nb; i++){
        dico_print_fh(f, dv->t[i]);
        if(i != dv->nb - 1){
          fprintf(f, DICO_END_STR);
          fprintf(f, "\n");
        }
    
      }
      fclose(f);
    }
    
    dico_vec *dico_vec_replace_dico(dico_vec *dv, dico *old_dico, dico *new_dico)
    {
      int dico_nb = hash_get_val(dv->ht, old_dico->name);
      if(dico_nb == HASH_INVALID_VAL) return dv;
    
      dv->t[dico_nb] = new_dico;
      return dv;
    }
    
    dico_vec *dico_vec_read(char *filename, float ratio)
    {
      FILE *f;
      dico_vec *dv = dico_vec_new();
    
      f= fopen(filename, "r");
      if(f == NULL){
        fprintf(stderr, "cannot open file %s\n", filename);
        exit(1);
      }
    
      while(!feof(f)){
        dico_vec_add(dv, dico_read_fh(f, ratio));
      }
      fclose(f);
      return dv;
    }