[Dcmlib] Loading twice the same File

Mathieu Malaterre mathieu.malaterre at kitware.com
Thu Jul 7 15:50:38 CEST 2005


JP,

	Excellent analysis !
	Now maybe you don't remember but you ask me -long time ago- why we need 
to define accessor to set member variables of a class. Here are some 
more examples, the goal is to know when the file is supposed to be read 
(which line du the actual reading):

#1

gdcm::File file("bla");
file.SetLoadMode(NO_SEQ);

#2
gdcm::File file();
file.Load("bla");
file.SetLoadMode(NO_SEQ);

#3
gdcm::File file();
file.SetLoadMode(NO_SEQ);
file.Load("bla");
file.Load("bla2");
file.Load("bla23");
file.Load("bla2");
file.Load("bla");

#1 and #2 are pretty straigforward to understand, the load mode is never 
taken into account.
#3 Is a completely degenerate case where the user don't know exactly 
what he is doing. But anyway gdcm will read 5 files... and at the end we 
would only need to read one. So far it is ok since the reading a file is 
fast enough not to be troublesome.

But a good (far better) design is to decouple operations: Load is doing 
both setting of the filename AND doing the reading of the file. Now 
consider #3 rewriten this way:

gdcm::File file();
file.SetLoadMode(NO_SEQ);
file.SetFileName("bla");
file.SetFileName("bla2");
file.SetFileName("bla23");
file.SetFileName("bla2");
file.SetFileName("bla");
file.Load();


-> how many time do we read a file now...



Ok you get the picture. But my point was that gdcm is really confusing 
because it is written -mostly- like a C interface with function approach 
instead of object with state.


So to answer your question, SetLoadMode, SetFileName, anythings that 
changes the state is doing two things:
#1 if the arg is equal to the previous one -> do nothing
#2 if the arg is different from the previous one -> mark the object as 
'modified'. So that later 'Load' will realize the state has change and 
should reread the file.

2 cents,
Mathieu


Jean-Pierre Roux wrote:
> Hi, gdcm users.
> 
> According to Mathieu's requirement, I make a modif, yesternight, but I'm 
> not sure it was such a rich idea :
> If someone loads twice the same File
> f1->Load("myFileName.dcm");
> ...
> f1->Load("myFileName.dcm");
> the second Load is effectless.
> (File already loaded, do nothing)
> 
> Well ...
> If the user made a programing mistake, this new solution is OK.
> 
> If, for some reason of its own, he removed, say the Sequences (or 
> anything else), and wants load them again, I guess he'll feel 
> desapointed by the result.
> (The previous solution was to clear all the 'Entries' from the H Table, 
> and Load again).
> 
> Any opinion ?
> Thx
> JP
> 
> 
> _______________________________________________
> 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