[IGSTK-Developers] Get method possibilities

David Gobbi dgobbi at atamai.com
Mon Oct 24 17:37:23 EDT 2005


Hi Luis,

My preference in this case is #1.

I actually think that exceptions are the
better solution, but I don't want to see
any exceptions added just before
a release.

 - David

Luis Ibanez wrote:

>
> Hi David,
>
> Thanks for posting the alternative options
> for implementing the unsafe Get() methods.
>
> -- 
>
> What would be your preference between the
> options:
>
>
>     1) Adding FileSuccessfullyRead()
>        removing the booleans and adding
>        the [const std::strings &] on return.
>
> or
>
>
>     3) Throwing Exceptions when the
>        values are not available.
>
>
>
> [ Option (2) is the current one,
>   so I would guess it is not int the list.
>   The purpose of having the boolean to be
>   returned by the same Get method was to
>   ensure that the precondition and the action
>   were performed as an atomic operation, but
>   I agree with you in that we should not use
>   any code that resembles FORTRAN. ]
>
>
> -- 
>
> Given that the Get() methods are now tagged and
> recorded in the Logger, we could easily go with
> any of the three proposed alternatives, since
> none of those is quite fit for a State Machine
> architecture anyways.
>
>
> We just need to pick up the one that will reduce
> the developer's effort to a bare minimum, make
> them feel more comfortable, and provide them with
> the maximum of flexibility.
>
>
> Please let us know what would be your preference
> so we can make these changes today before moving
> the code to the main IGSTK library.
>
>
>   Thanks
>
>
>      Luis
>
>
> -------------------
> David Gobbi wrote:
>
>> Hi All,
>>
>> The ImageReader Get methods that were just added to CVS are a
>> bit clunkier than I would like,  due to the boolean return value.  In
>> VTK and ITK, the methods would return the string (or a const
>> reference to the string) and forgo the boolean return value.
>>
>> Typical VTK/ITK code looks like this:
>>
>> if (reader->FileSuccessfullyRead())
>> {
>> std::string   patientName = reader->GetPatientName();
>> std::string   patientID = reader->GetPatientID();
>> std::string   modality = reader->GetModality();
>>
>> .. plus additional code to process the information
>> }
>> ... at this point in the code, the patientName, patientID, and modality
>>   variables are no longer in scope, so there is no danger of them being
>>   used if the file hasn't been read yet.
>>
>> With the methods that were just added (with the boolean return value),
>> the code will look like this:
>>
>> std::string patientName;
>> if (reader->GetPatientName(patientName))
>>  {
>>   ... use the patient name
>>  }
>> std::string patientID;
>> if (reader->GetPatientID(patientID))
>>  {
>>  ... use the patient ID
>>  }
>> ... and so on for modality
>>
>> ... at this point in the code, the "patientName", "patientID", and 
>> "modality"
>>   variables are all still in scope, even if the Get() methods 
>> failed.  This sort
>>   of a programming pattern reminds me of FORTRAN.
>>
>> Just my two cents.
>>
>> - David
>>
>> P.S. I can't resist adding an example that uses exceptions:
>>
>> try
>>   {
>>   std::string   patientName = reader->RequestPatientName();
>>   std::string   patientID = reader->RequestPatientID();
>>   std::string   modality = reader->RequestModality();
>>   .. plus additional code to use the information, not executed if an 
>> exception occurs
>>   }
>>  catch (InvalidRequest)
>>   {
>>   ... send debug info to logger
>>   }
>>
>> _______________________________________________
>> IGSTK-Developers mailing list
>> IGSTK-Developers at public.kitware.com
>> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers
>>
>>
>
>




More information about the IGSTK-Developers mailing list