synchronized int decodevs_add(float[] a, int offset, Buffer b, int n){
    int step=n/dim;
    int entry;
    int i, j, o;

    if(t.length<step){
      t=new int[step];
    }

    for(i=0; i<step; i++){
      entry=decode(b);
      if(entry==-1)
        return (-1);
      t[i]=entry*dim;
    }
    for(i=0, o=0; i<dim; i++, o+=step){
      for(j=0; j<step; j++){
        a[offset+o+j]+=valuelist[t[j]+i];
      }
    }

    return (0);
  }