00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef OLENA_CORE_ABSTRACT_NEIGHBORHOODND_HH
00029 # define OLENA_CORE_ABSTRACT_NEIGHBORHOODND_HH
00030
00031 # include <oln/core/abstract/window_base.hh>
00032
00033 namespace oln {
00034
00035 namespace abstract {
00036 template<class Exact>
00037 struct neighborhoodnd;
00038 }
00039
00043 template<class Exact>
00044 struct struct_elt_traits<abstract::neighborhoodnd<Exact> >: public
00045 struct_elt_traits<abstract::window_base<abstract::neighborhood<Exact>, Exact> >
00046 {
00047
00048 };
00049
00050 namespace abstract {
00051
00062 template<class Exact>
00063 struct neighborhoodnd: public window_base<neighborhood<Exact>, Exact>
00064 {
00065 typedef window_base<neighborhood<Exact>, Exact> super_type;
00067 typedef neighborhoodnd<Exact> self_type;
00068 typedef Exact exact_type;
00069
00075 typedef typename struct_elt_traits<Exact>::dpoint_type dpoint_type;
00076
00077 friend class neighborhood<exact_type>;
00078
00080 static std::string
00081 name()
00082 {
00083 return std::string("neighborhoodnd<") + Exact::name() + ">" ;
00084 }
00085
00086 protected:
00087
00095 exact_type&
00096 add_(const dpoint_type& dp)
00097 {
00098 precondition( !dp.is_centered() );
00099 this->centered_ = true;
00100 if (!(has_(dp)))
00101 this->dp_.push_back(dp);
00102 delta_update(dp);
00103 return this->exact();
00104 }
00105
00109 neighborhoodnd() : super_type()
00110 {}
00111
00116 neighborhoodnd(unsigned size) : super_type(size)
00117 {}
00118
00119 };
00120 }
00121 }
00122
00123 #endif // OLENA_CORE_ABSTRACT_NEIGHBORHOODND_HH