Select Git revision
-
Alexis Nasr authoredAlexis Nasr authored
depset.c 4.22 KiB
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"depset.h"
#include"util.h"
depset *depset_new(void)
{
depset *d = (depset *)memalloc(sizeof(depset));
d->length = 1;
d->array = (dependency *)memalloc(d->length * sizeof(dependency));
d->array[0].gov = NULL;
d->array[0].dep = NULL;
d->array[0].label = -1;
return d;
}
void depset_free(depset *d)
{
/* int i; */
/* for(i=0; i < d->length; i++){
word_free(d->array[i].dep);
}*/
free(d->array);
free(d);
}
depset *depset_copy(depset *d)
{
int i;
if(d == NULL) return NULL;
depset *copy = depset_new();
for(i=0; i < d->length; i++){
depset_add(copy, d->array[i].gov, d->array[i].label, d->array[i].dep);
}
return copy;
}
void depset_add(depset *d, word *gov, int label, word *dep)
{
int i;
int new_length;
if(gov == NULL || dep == NULL) return;
word *max = (word_get_index(gov) > word_get_index(dep)) ? gov : dep;
if(word_get_index(max) >= d->length){
new_length = word_get_index(max) + 1;
d->array = (dependency *)realloc(d->array, new_length * sizeof(dependency));
for(i=d->length; i < new_length; i++){
d->array[i].gov = NULL;
d->array[i].dep = NULL;
d->array[i].label = -1;
}
d->length = new_length;
}
d->array[word_get_index(dep)].gov = gov;
d->array[word_get_index(dep)].dep = dep;
d->array[word_get_index(dep)].label = label;
}
void depset_print(FILE *f, depset *d)
{
int i;
for(i=0; i < d->length; i++){
if((d->array[i].gov) && (d->array[i].dep))
fprintf(f, "(%d, %d, %d) ", word_get_index(d->array[i].dep), d->array[i].label, word_get_index(d->array[i].gov));
}