Concepts ======== - Assignable Has copy constructor and assignment operator - DefaultConstructible has constructor without arguments - EqualityComparable has operator== and operator!= - LessThanComparable has operator< - Dereferenceable has operator* and operator-> (it is not required that these operations yield a well defined value) - MutableIterator non-const methods on dereferenced value may be called - ImmutableIterator only const methods on dereferenced value may be called Application to our specific classes =================================== Class Assignable DefaultCons Equality LessThan Immutable Grid no no no(?) no Entity no no no no GeometryType yes yes yes yes Geometry no no no no EntityPointer yes no yes no yes LevelIterator yes no yes no yes LeafIterator yes no yes no yes HierIterator yes no yes no yes IntersIterator yes no yes no (not dereferenceable!) IndexSet no no no no IdSet no no no no Questions: - If a feature is no, should the corresponding method be explicitely forbidden, i.e. the method is private? - Do we want EntityPointer, LevelIterator, LeafIterator, HierIterator assignable? Is this (in principle) possible with our implementations? (Robert: not for 1.0, but in principle). - An Equality test on grid objects might be useful. Should we include this? (In principle, not now). Notes: - If a type is neither Assignable nor DefaultConstructible this means that a *user* cannot create any object of this class. Of course this was our intention. Only the grid is authorized to create (iterators) to such objects.