[Dcmlib] [Fwd: patch]

Mathieu Malaterre mathieu.malaterre at kitware.com
Mon Jun 21 23:46:45 CEST 2004


Ok Brad me confirme que c++ choisit la methode en fonction de la 
complexite. Dans notre cas il est beaucoup plus simple de caster un 
pointer (const char) en bool que de construire une std::string.

Donc ok j'appliquerais un patch des que j'ai le feu vert de JP.

Mathieu


Mathieu Malaterre wrote:
> ca marche avec mon g++ 3.3, qu'est ce que ca dis chez toi ?
> 
> #include <iostream>
> #include <string>
> 
> class foo {
> public:
> 
>   foo(bool bar);
>   foo(const char* bar, bool bar1=false, bool bar2 = false);
> };
> 
> foo::foo(bool bar)
> {
>   (void)bar;
>   std::cout << "bool constructor" << std::endl;
> }
> 
> foo::foo(const char* bar, bool bar1, bool bar2)
> {
>   (void)bar;
>   (void)bar1;
>   (void)bar2;
>   std::cout << "const char constructor" << std::endl;
> }
> 
> int main(int argc, char* argv[])
> {
>   std::string s = "hello";
>   foo* f = new foo( s.c_str() );
> 
>   return 1;
> }
> 
> 
> Eric Boix wrote:
> 
>>     Salut Mathieu,
>>
>> Quoting Mathieu Malaterre <mathieu.malaterre at kitware.com>:
>>
>>>  je suppose que vous avez vu passer les logs, donc voila je vous faire
>>> du décès prematuré de gdcmHeaderHelper.
>>
>>
>> Well done ! RIP gdcmHeaderHelper.
>>
>>
>>> Tout ca pour dire que mon dernier bout de patch ne marche pas
>>> (cf gdcm2.patch). Je peux pas 'string constifier' gdcmDicomDir.
>>> Est-ce que le constructeur est cense modiifer cette chaine de 
>>> caractere ?
>>> En tout cas j'aimerais bien qu'on m'explique ce qui ne va pas
>>
>>
>> Je presume que ce qui te fait dire que cela ne va pas, c'est que ctest
>> rapporte que PrintDicomDir (entre autres) echoue. Supposons que c'est 
>> cela.
>>
>> cd gdcmbin (la ou tu a compile' gdcm)
>> nm --demangle --print-file-name Test/*.o | grep 
>> gdcmDicomDir::gdcmDicomDir
>>   Test/PrintDicomDir.o:         U gdcmDicomDir::gdcmDicomDir(bool)
>>   ...
>> Moralite', c'est le "mauvais" constructeur qui est appele' i.e.
>> gdcmDicomDir(bool) au lieu de gdcmDicomDir(std::string&, bool, bool).
>> A l'invocation dans Test/PrintDicomDir.cxx, on a:
>>    std::string file;
>>    e1 = new gdcmDicomDir(file.c_str());
>> Si tu remplaces la deuxieme ligne par
>>    e1 = new gdcmDicomDir(file);
>> alors c'est le "bon" constructeur qui est appele', et Test/PrintDicomDir
>> fonctionne a nouveau.
>> Moralite', il y a conversion implicite de
>> gdcmDicomDir(char*) en gdcmDicomDir(bool) au lieu de ce que l'on
>> pourrait attendre i.e. gdcmDicomDir(std::string&, bool, bool).
>> J'ai essaye' de declarer gdcmDicomDir(bool) en explicit dans
>> src/gdcmDicomDir.h mais, etonnament, cela ne regle pas le pb.
>> In fine, il faut changer tout les appels au constructeur 
>> gdcmDicomDir(char*)
>> en des gdcmDicomDir(std::string&, bool, bool), et la liste t'es 
>> donne'e par
>> la commande nm ci-dessus, en l'occurence
>>   Test/BuildUpDicomDir.cxx
>>   Test/makeDicomDir.cxx
>>   Test/PrintDicomDir.cxx
>>   Test/TestDicomDir.cxx
>> et ton patch devrait fonctionner. Je n'ai pas integre' ton patch, mais
>> dis moi si souhaites que je le fasse ou si tu t'en charge.
>>
>> Remarque amusante: en cherchant la cause de tes deboires, j'ai decouvert
>> le flag -felide-constructor de g++ qui evite une double copie du string
>> dans le cas semblables au cas suivant:
>> string foo()
>> {
>>    string bozo;
>>    ...do some shit with bozo...
>>    return bozo;
>> }
>>
>> main(){
>>   string a = foo();    /// <== double copy
>> }
>> Je regarde si cela ameliore mes pb de fuite memoire, bien que la solution
>> ne soit pas portable...
>>
>>
>>> (surtout qu'il est tard et que j'arrive pas a reflechir).
>>
>>
>> Cafeine is your friend ;-] Amphetamine is your enemy.
>>
>>
>>> Ps: Good job, mes test ITK marchent au poil merci a tout le monde.
>>
>>
>> Hummm, il faut vraiment que l'on fasse une vrai test suite inte'gre'e
>> a ctest. Apres ton commit, ctest passait droit devant, mais pourtant
>> ./bin/gdcmTest Test/WriteSimple $(GDCM_DATA)/dicom-sc_cs-1.dcm foo.dcm
>> se plantait lamentablement (pour les memes raisons qui font que ton
>> patch gdcm2.patch ne fonctionne pas). Or ctest ne voit pas de pb...
>>    Il m'ai deja arrive' deux fois de faire des commit recents en me
>> basant sur ctest, avant de decouvrir des conneries. Hummm, nicht good.
>>    Je regarde cela d'un peu plus pres, a commencer par la conversion
>> de la test suite python...
>>
>>     Merci a toi.
>>     Eric.
>>
> 
> 
> 
> _______________________________________________
> Dcmlib mailing list
> Dcmlib at creatis.insa-lyon.fr
> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
> 






More information about the Dcmlib mailing list