[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