00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SERIES_KRAT_EXP_PROXY_HXX
00019 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_KRAT_EXP_PROXY_HXX
00020
00021 namespace vcsn {
00022
00023 namespace algebra {
00024
00025 template <class S, class T>
00026 krat_exp_proxy<S, T>::krat_exp_proxy(Element<S, T> exp) :
00027 self(exp)
00028 {
00029 }
00030
00031 template <class S, class T>
00032 krat_exp_virtual&
00033 krat_exp_proxy<S, T>::operator=(krat_exp_virtual& exp)
00034 {
00035 self = (dynamic_cast<krat_exp_proxy<S, T>*> (&exp))->self;
00036 return *this;
00037 }
00038
00039 template <class S, class T>
00040 krat_exp_virtual*
00041 krat_exp_proxy<S, T>::operator+(krat_exp_virtual* exp)
00042 {
00043 return new krat_exp_proxy<S, T>(self + (dynamic_cast<krat_exp_proxy<S, T>*> (exp))->self);
00044 }
00045
00046 template <class S, class T>
00047 krat_exp_virtual*
00048 krat_exp_proxy<S, T>::operator*(krat_exp_virtual* exp)
00049 {
00050 return new krat_exp_proxy<S, T>(self * (dynamic_cast<krat_exp_proxy<S, T>*> (exp))->self);
00051 }
00052
00053 template <class S, class T>
00054 void
00055 krat_exp_proxy<S, T>::star()
00056 {
00057 self.star();
00058 }
00059
00060 template <class S, class T>
00061 void
00062 krat_exp_proxy<S, T>::left_weight(semiring_virtual* sem)
00063 {
00064 self = (dynamic_cast<semiring_proxy<S, T>*> (sem))->self * self;
00065 }
00066
00067 template <class S, class T>
00068 void
00069 krat_exp_proxy<S, T>::right_weight(semiring_virtual* sem)
00070 {
00071 self = self * (dynamic_cast<semiring_proxy<S, T>*> (sem))->self;
00072 }
00073
00074 template <class S, class T>
00075 semiring_proxy<S, T>::semiring_proxy(semiring_elt_t& sem) :
00076 self(sem)
00077 {
00078 }
00079
00080 template <class S, class T>
00081 semiring_virtual&
00082 semiring_proxy<S, T>::operator=(semiring_virtual& sem)
00083 {
00084 self = (dynamic_cast<semiring_proxy<S, T>*> (&sem))->self;
00085 return *this;
00086 }
00087
00088 }
00089
00090 }
00091 #endif // !VCSN_ALGEBRA_IMPLEMENTATION_SERIES_KRAT_EXP_PROXY_HXX //