[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