00001 #ifndef ALREADY_workspace 00002 #define ALREADY_workspace 00003 long min(long a,long b) 00004 { 00005 return ((a<b)?a:b); 00006 } 00007 template<typename T> 00008 void MAC_REV_FREE(void *,int); 00009 00010 template<typename coeff> 00011 struct workspace{ 00012 coeff *tabcoeff; 00013 unsigned char *tabnf; 00014 int size; 00015 int sizenf; 00016 }; 00017 00018 template<typename coeff> 00019 void increase_space(workspace<coeff> *w) 00020 { 00021 w->tabcoeff=(coeff*)MAC_REV_REALLOC<coeff>(w->tabcoeff,w->size*sizeof(coeff) 00022 ,w->size*2*sizeof(coeff)); 00023 w->size*=2; 00024 for(int i=w->size/2;i<w->size;i++) 00025 w->tabcoeff[i]=0; 00026 00027 w->tabnf=(unsigned char*)realloc(w->tabnf,w->size/8+1); 00028 for(int i=w->sizenf;i<w->size/8+1;i++) 00029 w->tabnf[i]=0; 00030 w->sizenf=w->size/8+1; 00031 } 00032 00033 template<typename coeff> 00034 void destroy_space(workspace<coeff> *w) 00035 { 00036 MAC_REV_FREE<coeff>(w->tabcoeff,w->size*sizeof(coeff)); 00037 free(w->tabnf); 00038 w->size=0; 00039 w->sizenf=0; 00040 } 00041 00042 template<typename coeff> 00043 void init_space(workspace<coeff> *w) 00044 { 00045 w->tabcoeff=(coeff*)MAC_REV_MALLOC<coeff>(80*sizeof(coeff)); 00046 for(int i=0;i<80;i++) 00047 w->tabcoeff[i]=0; 00048 00049 w->size=80; 00050 w->tabnf=(unsigned char*)malloc(10); 00051 for(int i=0;i<10;i++) 00052 w->tabnf[i]=0; 00053 w->sizenf=10; 00054 00055 } 00056 #endif //ALREADY_workspace