[Insight-developers] Integrating the New Statistics framework into ITK

Bradley Lowekamp blowekamp at mail.nih.gov
Sat Apr 4 15:46:56 EDT 2009


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>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20090404/5a1e51a1/attachment.htm>


More information about the Insight-developers mailing list