[Dcmlib] Proposition de coding style

Eric Boix Eric.Boix at creatis.insa-lyon.fr
Thu Jun 24 15:07:02 CEST 2004


	Yo,

J'ai mis une proposition de coding style a la fin du fichier DEVELOPPER.

Pour tout vous dire, c'etait long et penible, et non, non, non, je n'y ai pris
aucun plaisir de petit ayatolah refoule' (comme il me le fut explicitement
reproche' pour ACR-Libido) ou de dictateur de pacotille: mon psy pense
que tout va bien, et oui j'ai pris mes cachets ce matin ;-]

Il reste quelques incoherences ponctuelles, et je ne suis pas sur
que les exemples soit les meilleurs, mais bon, j'en ai marre...

C'est violament "inspire'" (merci pdftotxt) de la redaction du coding
style d'ITK.
En general, j'ai verifie' dans le Stroustup, que cela etait pas trop
deconnant (virtual override, methodes sans arguments...).
Pour ce qui est des affaires de gout (espaces, doxygen, braces) j'ai
privile'gie' l'existant pour ne pas avoir trop de modifs a faire.

CE N'EST QU'UNE PROPOSITION.

   Discutez entre vous, entendez vous sur les modifications, et
validez une version. Si une preference, qui n'est pas celle adopte'e
pour l'instant s'impose, charge a celui qui a su convaincre les autres
de faire les modifs (eventuellement progressivement).
   Personnelement peu m'importe. Je trouve que l'etat du code s'ameliore
regulierement dans le bon sens (certes je revendique ma part de nettoyage,
mais il faut reconnaitre que notre JPR national se bonifie), meme si il y
encore quelques passages, un peu lourds, du style:
   if ( n == 0xe0dd || ( g==0xb00c && n==0x0eb6 ) ) // for bogus header
         FoundSequenceDelimiter = true;
      else if ( n != 0xe000 )
      {
         char msg[100];  // for sprintf. Sorry
         sprintf(msg,"wrong element (%04x) for an item sequence (%04x,%04x)\n",
                      n, g,n);
         dbg.Verbose(1, "gdcmDocument::FindLengthOB: ",msg);
         errno = 1;
         return 0;
      }
des cast dangeureux du style
    if( ((*i)->GetGroup()==0x0004) && ((*i)->GetElement()==0x1500) )
         os<<((gdcmValEntry *)(*i))->GetValue();
et enfin du code "difficile" comme la methode gdcmFile::ParsePixelData(void)
dans gdcmParsePixels.cxx, [je sais Jean-Pierre, c'est pour du debug,
mais avant que je la nettoie ::Parse7FE0() etait dans le meme etat].
 
  Veuillez m'en excuser, mais je ne resiste pas a l'envie de vous exhiber
un bref extrait de cette fonction, tel que le presente mon editeur i.e.
avec le pb des tabs:

----------------------------------------------------------------------------
// gdcmParsePixels.cc, ligne 190

      while (  ( ItemTagGr == 0xfffe) && (ItemTagEl != 0xe0dd) ) {
      // Parse fragments of the current Fragment (Frame)
         ftellRes=ftell(fp);
         fread(&fragmentLength,4,1,fp);
         if(Header->GetSwapCode())
            fragmentLength=Header->SwapLong(fragmentLength);    // length
         printf("      at %x : 'fragment' length %d x(%08x)\n",
                (unsigned)ftellRes, (unsigned)fragmentLength,(unsigned)fragmentLength);
                                                                                
          //------------------ scanning (not reading) fragment pixels
                                                                                
         fread(&nbRleSegments,4,1,fp);  // Reading : Number of RLE Segments
         if(Header->GetSwapCode())
            nbRleSegments=Header->SwapLong(nbRleSegments);
            printf("   Nb of RLE Segments : %d\n",nbRleSegments);
                                                                                
         for(int k=1; k<=15; k++) { // Reading RLE Segments Offset Table
            ftellRes=ftell(fp);
            fread(&RleSegmentOffsetTable[k],4,1,fp);
            if(Header->GetSwapCode())
               RleSegmentOffsetTable[k]=Header->SwapLong(RleSegmentOffsetTable[k]);
            printf("        at : %x Offset Segment %d : %d (%x)\n",
                    (unsigned)ftellRes,k,RleSegmentOffsetTable[k],
                    RleSegmentOffsetTable[k]);
         }
                                                                                
          if (nbRleSegments>1) { // skipping (not reading) RLE Segments
             for(unsigned int k=1; k<=nbRleSegments-1; k++) {
                RleSegmentLength[k]=   RleSegmentOffsetTable[k+1]
                                     - RleSegmentOffsetTable[k];
                ftellRes=ftell(fp);
                printf ("  Segment %d : Length = %d x(%x) Start at %x\n",
                           k,(unsigned)RleSegmentLength[k],(unsigned)RleSegmentLength[k], (unsigned)ftellRes);
                fseek(fp,RleSegmentLength[k],SEEK_CUR);
             }
          }
          RleSegmentLength[nbRleSegments]= fragmentLength
                                         - RleSegmentOffsetTable[nbRleSegments];          ftellRes=ftell(fp);
          printf ("  Segment %d : Length = %d x(%x) Start at %x\n",
                           nbRleSegments,(unsigned)RleSegmentLength[nbRleSegments],
                           (unsigned)RleSegmentLength[nbRleSegments],(unsigned)ftellRes);
                                                                                
          fseek(fp,RleSegmentLength[nbRleSegments],SEEK_CUR);

----------------------------------------------------------------------------

J'arrete la`, car j'ai la nause'e...

Voila, on ne pourra pas me reprocher de ne pas avoir fait tous les efforts
possibles, pour pouvoir degager le temps necessaire pour faire un peu de
science dans ce labo. Car c'est in-fine mon seul but. Que Creatis produise
du code de pietre qualite' est le cadet de mes soucis. Par contre avoir
frequement dans mon bureau des utilisateurs legitimement frustre's, car ils
ne peuvent pas lire une image Dicom pour leur PFE/DEA/THESE, me plonge
dans un etat de rogne intense.

Desole' d'enfoncer le clou sur cette mailing list, mais sabre-de-bois
le role de Creatis est de produire de la science (on peut rever, non?)
et non pas de vegeter sur des problemes de lecture d'image...

	Bon courage a tous,
   On peut le faire (je suis un eternel optimiste),
   Eric.



More information about the Dcmlib mailing list