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_WINDOWND_HH
00029 # define OLENA_CORE_ABSTRACT_WINDOWND_HH
00030
00031 # include <oln/core/abstract/window_base.hh>
00032
00033 namespace oln {
00034
00035 namespace abstract {
00036 template<class Exact>
00037 struct windownd;
00038 }
00039
00043 template<class Exact>
00044 struct struct_elt_traits<abstract::windownd<Exact> >: public
00045 struct_elt_traits<abstract::window_base<abstract::window<Exact>, Exact> >
00046 {
00047
00048 };
00049
00050 namespace abstract {
00051
00058 template<class Exact>
00059 struct windownd: public window_base<window<Exact>, Exact>
00060 {
00061 typedef window_base<window<Exact>, Exact> super_type;
00063 typedef windownd<Exact> self_type;
00064 typedef Exact exact_type;
00065
00071 typedef typename struct_elt_traits<Exact>::dpoint_type dpoint_type;
00072
00073 friend class window<exact_type>;
00074
00076 static std::string
00077 name()
00078 {
00079 return std::string("windownd<") + Exact::name() + ">" ;
00080 }
00081
00082 protected:
00083
00090 exact_type&
00091 add_(const dpoint_type& dp)
00092 {
00093 if (dp.is_centered())
00094 this->centered_ = true;
00095 if (!(has_(dp)))
00096 this->dp_.push_back(dp);
00097 this->delta_update(dp);
00098 return this->exact();
00099 }
00100
00104 windownd() : super_type()
00105 { }
00106
00111 windownd(unsigned size) : super_type(size)
00112 {}
00113
00114 };
00115 }
00116 }
00117
00118 #endif // OLENA_CORE_ABSTRACT_WINDOWND_HH