| [310] | 1 |  | 
|---|
|  | 2 | /************************************************************************/ | 
|---|
|  | 3 | /*******                                                        *********/ | 
|---|
|  | 4 | /*******        compresseur de données rangées en ligne         *********/ | 
|---|
|  | 5 | /*******                                                        *********/ | 
|---|
|  | 6 | /************************************************************************/ | 
|---|
|  | 7 |  | 
|---|
| [315] | 8 | #ifndef int4 | 
|---|
|  | 9 | #ifdef __alpha | 
|---|
|  | 10 | #define int4 int | 
|---|
|  | 11 | #else | 
|---|
|  | 12 | #define int4 long | 
|---|
|  | 13 | #endif | 
|---|
|  | 14 | #endif | 
|---|
| [310] | 15 |  | 
|---|
|  | 16 |  | 
|---|
|  | 17 |  | 
|---|
|  | 18 | /*      comprime une suite de n valeures  (dans des mots de 32 bit)     */ | 
|---|
|  | 19 | /*              valeures  codées sur 22 bit maximum                     */ | 
|---|
|  | 20 | /*      resultat de la compression codé sur 7 bit + exposant            */ | 
|---|
|  | 21 | /*      n doit etre multiple de  4                                      */ | 
|---|
|  | 22 | /*      le fichier resultat a pour longueur   n/4 + 1 mot de 32 bit     */ | 
|---|
|  | 23 | /*              4 * n  octets   ==>     n + 4 octets                    */ | 
|---|
|  | 24 | /*      pour    n = 72    en sortie     19 mots = 76 octets             */ | 
|---|
|  | 25 |  | 
|---|
| [315] | 26 | void compress_7_1(int4* in,int4*out,int n,int pasin); | 
|---|
|  | 27 | void decompress_7_1(int4* in,int4*out,int n); | 
|---|
| [310] | 28 |  | 
|---|
|  | 29 |  | 
|---|
|  | 30 | /*      comprime une suite de n valeures  (dans des mots de 32 bit)     */ | 
|---|
|  | 31 | /*              valeures  codées sur 16 bit maximum                     */ | 
|---|
|  | 32 | /*      resultat de la compression codé sur 4 bit + exposant            */ | 
|---|
|  | 33 | /*      n doit etre  ( multiple de  7 )  + 2                            */ | 
|---|
|  | 34 | /*      le fichier resultat a pour longueur   (n-2)/7 + 1 mot de 32 bit */ | 
|---|
|  | 35 | /*              4 * n  octets   ==>     4 * (n-2) / 7 + 4  octets       */ | 
|---|
|  | 36 | /*      pour    n = 72    en sortie     11 mots = 44 octets             */ | 
|---|
|  | 37 |  | 
|---|
| [315] | 38 | void compress_4_1(int4* in,int4*out,int n,int pasin); | 
|---|
|  | 39 | void decompress_4_1(int4* in,int4*out,int n); | 
|---|
| [310] | 40 |  | 
|---|
|  | 41 |  | 
|---|
|  | 42 | /*      comprime une suite de n valeures  (dans des mots de 32 bit)     */ | 
|---|
|  | 43 | /*              valeures  codées sur 16 bit maximum                     */ | 
|---|
|  | 44 | /*      resultat de la compression codé sur 3 bit + exposant            */ | 
|---|
|  | 45 | /*      n doit etre  ( multiple de  9 )                                 */ | 
|---|
|  | 46 | /*      le fichier resultat a pour longueur   n/9 + 1 mot de 32 bit     */ | 
|---|
|  | 47 | /*              4 * n  octets   ==>     4 * n / 9 + 4  octets           */ | 
|---|
|  | 48 | /*      pour    n = 72    en sortie     9 mots = 36 octets              */ | 
|---|
|  | 49 |  | 
|---|
|  | 50 |  | 
|---|
| [315] | 51 | void compress_3_1(int4* in,int4*out,int n,int pasin); | 
|---|
|  | 52 | void decompress_3_1(int4* in,int4*out,int n); | 
|---|
| [310] | 53 |  | 
|---|
|  | 54 | /************************************************************************/ | 
|---|
|  | 55 | /***********                                                    *********/ | 
|---|
|  | 56 | /***********   compresseur de données rangées par paires        *********/ | 
|---|
|  | 57 | /***********            (data bolo par exemple)                 *********/ | 
|---|
|  | 58 | /***********                                                    *********/ | 
|---|
|  | 59 | /************************************************************************/ | 
|---|
|  | 60 |  | 
|---|
|  | 61 |  | 
|---|
|  | 62 |  | 
|---|
|  | 63 | /*      comprime une suite de n valeures  (dans des mots de 32 bit)     */ | 
|---|
|  | 64 | /*              valeures  codées sur 21 bit maximum                     */ | 
|---|
|  | 65 | /*      resultat de la compression codé sur 7 bit + exposant            */ | 
|---|
|  | 66 | /*      n doit etre multiple de  4                                      */ | 
|---|
|  | 67 | /*      le fichier resultat a pour longueur   n/4 + 1 mot de 32 bit     */ | 
|---|
|  | 68 | /*              4 * n  octets   ==>     n + 4 octets                    */ | 
|---|
|  | 69 | /*      pour    n = 72    en sortie     19 mots = 76 octets             */ | 
|---|
|  | 70 |  | 
|---|
|  | 71 |  | 
|---|
| [315] | 72 | void compress_7_2(int4* in,int4*out,int n,int pasin); | 
|---|
|  | 73 | void decompress_7_2(int4* in,int4*out,int n); | 
|---|
| [310] | 74 |  | 
|---|
|  | 75 |  | 
|---|
|  | 76 |  | 
|---|
|  | 77 | /*      comprime une suite de n valeures  (dans des mots de 32 bit)     */ | 
|---|
|  | 78 | /*              valeures  codées sur 32 bit maximum                     */ | 
|---|
|  | 79 | /*      resultat de la compression codé sur 4 bit + exposant            */ | 
|---|
|  | 80 | /*      n doit etre  ( multiple de  7 )  + 2                            */ | 
|---|
|  | 81 | /*      le fichier resultat a pour longueur   (n-2)/7 + 2 mot de 32 bit */ | 
|---|
|  | 82 | /*              4 * n  octets   ==>     4 * (n-2) / 7 + 8  octets       */ | 
|---|
|  | 83 | /*      pour    n = 72    en sortie     12 mots = 48 octets             */ | 
|---|
|  | 84 |  | 
|---|
|  | 85 |  | 
|---|
|  | 86 |  | 
|---|
| [315] | 87 | void compress_4_2(int4* in,int4*out,int n,int pasin); | 
|---|
|  | 88 | void decompress_4_2(int4* in,int4*out,int n); | 
|---|
| [310] | 89 |  | 
|---|
|  | 90 |  | 
|---|
|  | 91 |  | 
|---|
|  | 92 | /************************************************************************/ | 
|---|
|  | 93 | /***********                                                    *********/ | 
|---|
|  | 94 | /***********    definitions communes pour les compresseurs      *********/ | 
|---|
|  | 95 | /***********                                                    *********/ | 
|---|
|  | 96 | /************************************************************************/ | 
|---|
|  | 97 |  | 
|---|
|  | 98 | /*Les valeures de la table d'entree sont consideres comme toujopurs positives   */ | 
|---|
|  | 99 | /* les ecarts sont calculés signés sur 32 bit avant d'etre tronconnés           */ | 
|---|
|  | 100 |  | 
|---|
|  | 101 | #define shif(ec,k,q)    {while(ec>q)if(k<kmax_){k++;q<<=1;}else ec=q;while(ec<-q)if(k<kmax_){k++;q<<=1;}else ec=-q;} | 
|---|
|  | 102 | #define recup(ec,sss,k) {ec=((R>>sss)&emak_);if(ec & sgbi_ ) ec|= sign_ ; ec<<=k;} | 
|---|
|  | 103 | #define arrondi(ec,k)   ((ec &  filtre[k]) +( (ec & test[k]) <<1 ) ) | 
|---|
|  | 104 |  | 
|---|