[Insight-developers] Integrating the New Statistics framework into ITK
Luis Ibanez
luis.ibanez at kitware.com
Sat Apr 4 17:03:01 EDT 2009
Just to better organize this discussion we are gathering these options
in the following Wiki page:
http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007_Transition_Plan
This page is linked from
http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007
Please feel free to edit and correct if I missed anything,
Thanks
Luis
----------------------------------------------------------------------------------------------------
On Sat, Apr 4, 2009 at 3:46 PM, Bradley Lowekamp <blowekamp at mail.nih.gov> wrote:
> I am not sure how you will be using an anonymous name space such as the
> following with what you suggested:
> namespace
> {
> }
> I would think you would just need something similar to:
> namespace itk
> namespace Statistics
> {
> #ifdef ITK_USE_DEPRECATED_STATISTICS_FRAMEWORK
> using namespace ::itk::StatisticsDeprecated;
> #else
> using namespace ::itk::StatisticsNew;
> #endif
> }
> }
> If this using is done in a common header file, it might never be known that
> the current Statistics name space was renames, no messy anonymous names
> spaces would be used.
> I am just not clear of the downside to option B yet.
>
> On Apr 4, 2009, at 3:05 PM, Karthik Krishnan wrote:
>
> I forgot to mention the reason for giving you 2 options. I've tried to weigh
> both the options below :
>
> Option A vs B
> ---------------------
>
> 1. Code duplication:
>
> With A, if a file remains unchanged, it has to be duplicated
> (and maintained, at least as long as Bill is around) in both
> directories.
>
> With B, we have to worry only about the classes which need
> refactoring. Even refactoried files, where changes are minimal,
> you can even code of the form:
>
> namespace Statistics{
> class Blah {
> #ifdef ITK_USE_DEPRECATED_STAT
> void SetInputSample( ListSampleType * );
> #else
> void SetInput( ListSampleType * );
> #endif
> }
> }
>
>
> 2. Code separation and readability
>
> A separates the classes clearly in two directories. The statistics
> library will be devoid of ugly ifdefs. If we decide to drop the
> deprecated version at some point, we simply have to terminate
> a directory.
>
> We can do the same with Option B, in a less obvious way, by
> separating the classes in two files, for instance :
>
> File StatistiitkSample.h:
> #include "StatisticsDeprecated/itkSample.h"
> #include "StatisticsNew/itkSample.h"
>
> File StatisticsDeprecated/itkSample.h
> namespace StatisticsDeprecated
> {
> class Sample : public Object { ... }
> }
>
> File StatisticsNew/itkSample.h
> namespace StatisticsNew
> {
> class Sample : public DataObject { ... }
> }
>
>
> 3. Surprises
>
> With A there are no surprises. I suspect that with B, using
> anonymized namespaces etc, in several translation units,
> some compiler might scream ? I tried to verify it with minimal
> C++ code on gcc4.3, but I feel uneasy about it.
>
>
> Please let us know your thoughts.
> Regards
> --
> karthik
>
> On Sat, Apr 4, 2009 at 11:57 AM, Karthik Krishnan
> <karthik.krishnan at kitware.com> wrote:
>>
>> Hello:
>>
>> As you may know, the ITK statistics framework have been revamped. The new
>> framework follows ITK pipeline mechanics, removes redundant classes and
>> provides a consistent API. The new classes are not backwards compatible. For
>> details, please visit
>>
>>
>> http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007_Migration_Users_Guide
>>
>> We would like to integrate the new statistics framework into ITK. Given
>> that there are numerous API changes, to keep things backward compatible, we
>> are considering taking one of the following approaches :
>>
>>
>> --------------
>> Option A
>>
>> - Rename the existing Statistics/ directory in ITK to
>> StatisticsDeprecated/
>>
>> - Create a parallel directory Statistics/ containing the new classes.
>>
>> - Add an ITK_USE_DEPRECATED_STATITSTICS_FRAMEWORK option at configure time
>> to toggle between the usage of the deprecated and the new framework. The
>> option will cause (a) the right directory to be compiled (b) headers from
>> there right directory to be installed (c) the right directory to be added to
>> the include dirs.
>>
>> - All existing code in the toolkit using the statistics framework will be
>> ifdef'ed to work with both the new and the old framework. For instance :
>>
>> #ifdef ITK_USE_DEPRECATED_STATISTICS_FRAMEWORK
>> calculator = Statistics::CovarianceCalculator< ListSampleType >::New();
>> calculator->SetInputSample(sample);
>> calculator->Update();
>> #else
>> filter = Statistics::CovarianceFilter< ListSampleType >::New();
>> filter->SetInput( sampleGenerator->GetOutput() );
>> filter->Update();
>> #endif
>>
>>
>> --------------------------------------------------
>>
>> Option B
>>
>> - Keep all files in a single directory but use two different namespaces.
>>
>> For instance the file itkSample.h would look like :
>>
>> namespace itk
>> {
>> namespace StatisticsDeprecated
>> {
>> class Sample : public Object { ... }
>> }
>>
>> namespace StatisticsNew
>> {
>> class Sample : public DataObject { ... }
>> }
>> }
>>
>> - The ITK_USE_DEPRECATED_STATITSTICS_FRAMEWORK option redefines the unused
>> namespace to be an anonymous namespace. The used namespace to "Statistics".
>> For instance :
>>
>> #ifdef ITK_USE_DEPRECATED_STATITSTICS_FRAMEWORK
>> #define StatisticsDeprecated Statistics
>> #define StatisticsNew
>> #else
>> #define StatisticsNew Statistics
>> #define StatisticsDeprecated
>> #endif
>>
>> User code still looks the same :
>>
>> #ifdef ITK_USE_DEPRECATED_STATISTICS_FRAMEWORK
>> calculator = Statistics::CovarianceCalculator< ListSampleType >::New();
>> calculator->SetInputSample(sample);
>> calculator->Update();
>> #else
>> filter = Statistics::CovarianceFilter< ListSampleType >::New();
>> filter->SetInput( sampleGenerator->GetOutput() );
>> filter->Update();
>> #endif
>>
>> -----------------------------------------
>>
>> Any thoughts the developers have on this issue.
>>
>> We have gathered a wikipage to assemble ideas:
>> http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007
>>
>> The refactored code is in the NAMIC sandbox.
>>
>>
>>
>> Thanks
>> Regards
>>
>> --
>> Karthik Krishnan
>> R&D Engineer,
>> Kitware Inc.
>> Ph: 518 881 4919
>> Fax: 518 371 4573
>
>
>
> --
> Karthik Krishnan
> R&D Engineer,
> Kitware Inc.
> Ph: 518 881 4919
> Fax: 518 371 4573
> <ATT00001.txt>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
>
>
More information about the Insight-developers
mailing list