Proposals:Refactoring Statistics Framework 2007 Iterators
Review of Iterators from the Statistics Framework
Summary Table
The ITK Statistics Framework has a collection of data containers many of which have Iterators associated with them.
This page presents a review of issues that have been identified with some iterators in the Statistics Framework and describes proposed actions intended to fix those issues.
List of Issues
- Decrement operator was not implemented correctly in itkListSample.h (Fixed)
- Testing coverage of iterators is not complete, allowing problems like the one above to go unnoticed.
- Functionality was not available to create (or assign) a const iterator from a non-const iterator in itkSubsample.h (Fixed). This problem was found in a number of classes (Not yet fixed).
- In general a consistent set of iterator operations is not present.
- MembershipSample iterator does not allow for nested subsamples.
Proposed Solutions
- Propose a set of core iterator functionality for sample containers.
- Update containers to include this core functionality where necessary.
- Write tests that cover all iterator operations.
- Fix iterator implementation bugs as uncovered by tests.
Timetable
This task is straightforward and does not require a large amount of effort. Planned completion: Monday 9 April.
List of Sample containers with iterators
- ListSample
- ImageToListAdaptor
- PointSetToListAdaptor
- Histogram
- MembershipSample
- Subsample
- VariableDimensionHistogram
Common iterator interface for Sample containers
[Under construction]
In the statistics library algorithms are intended to be used for any type of sample. This generality is provided by templating algorithms over the sample type. Therefore, it is important to define a common interface for sample iterators.
Iterators API CheckList
- ConstIterator
- Const Iterator API
- Constructor with Const container argument
- Copy constructor(ConstIterator argument)
- Copy constructor(Iterator argument)
- operator= (ConstIterator argument)
- operator= (Iterator argument)
- operator==
- operator!=
- operator++ (pre-increment)
- GetFrequency()
- GetMeasurementVector()
- GetInstanceIdentifier()
- Iterator API
- Iterator must derive from ConstIterator
- Constructor with non-const container
- SetFrequency()
- SetMeasurementVector()
Compliance verification table
This table indicates the level of compliance of the refactored classes comply with the checklist of iterators API defined above
The symbols in the table represent
- X : Implemented and Tested
- NA : Not applicable
- ? : Wondering if we really need it
Iterator API | ListSample | Histogram | Subsample | MembershipSample |
---|---|---|---|---|
ConstIterator | ||||
Default Constructor must be protected and not implemented | X | |||
Constructor with Const container argument | X | X | ||
Constructor with initial Id and Const container argument | NA | X | ||
Copy constructor(ConstIterator argument) | X | X | ||
operator= (ConstIterator argument) | X | X | ||
operator== | X | X | ||
operator!= | X | X | ||
operator++ (pre-increment) | X | X | ||
operator-- (pre-decrement) | X? | ? | ||
GetFrequency() | X | X | ||
GetMeasurementVector() | X | X | ||
GetInstanceIdentifier() | X | X | ||
non-Const Iterator | ||||
Iterator must derive from ConstIterator | X | X | ||
Default Constructor | X | X | ||
Constructor with non-const container | X | X | ||
Constructor with initial Id and non-const container | NA | X | ||
Constructor with Const container must be protected | X | X | ||
Constructor with initial Id and Const container must be protected | NA | X | ||
Copy constructor(ConstIterator argument) must be protected | X | X | ||
operator= (ConstIterator argument) must be protected | X | X | ||
Copy constructor(Iterator argument) must be public | X | X | ||
operator= (Iterator argument) must be public | X | X | ||
SetFrequency() | NA | X | ||
SetMeasurementVector() | NA | NA |
All Sample containers
SampleType:
- ConstIterator Begin() const
- ConstIterator End() const
SampleType::ConstIterator
- ConstIterator()
- ConstIterator(const ConstIterator& rhs)
- FrequencyType GetFrequency() const
- const MeasurementVector& GetMeasurementVector() const
- InstanceIdentifier GetInstanceIdentifier() const
- ConstIterator& operator++()
- bool operator==(const ConstIterator& rhs)
- bool operator!=(const ConstIterator& rhs)
- ConstIterator operator=(const ConstIterator& rhs)