/* CSPP 50101 * garray.c */ #include #include"garray.h" GArray * init(unsigned int init_size) { GArray * pa = (GArray *)malloc(sizeof(GArray)); if(pa==NULL) return NULL; if ((pa->data = (int*)malloc(init_size*(sizeof(int))))==NULL) return NULL; pa->sz=init_size; int i; for(i=0;idata[i]=0; return pa; }; int set_val(GArray * pa, unsigned int idx, int val) { if(idx>=pa->sz) { int * tmp; if((tmp=(int*)realloc(pa->data,(idx+1)*sizeof(int)))==NULL) return GA_ERR; pa->data=tmp; for(int i=pa->sz;idata[i]=0; pa->sz=idx+1; } pa->data[idx]=val; return GA_OK; } int get_val(const GArray * pa, unsigned int idx) { if(idx>=pa->sz) return 0; else return pa->data[idx]; } int increment(GArray * pa, unsigned int idx) { if(idx>=pa->sz) { int * tmp; if((tmp=(int*)realloc(pa->data,(idx+1)*sizeof(int)))==NULL) return GA_ERR; pa->data=tmp; for(int i=pa->sz;i<=idx;i++) //set pa->data[idx] to zero pa->data[i]=0; pa->sz=idx+1; } ++(pa->data[idx]); return GA_OK; }; int ga_size(GArray * pa) { return pa->sz; } void dispose(GArray * pa) { free(pa->data); free(pa); }