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 #ifndef MLN_FUN_P2V_ELIFS_HH
00027 # define MLN_FUN_P2V_ELIFS_HH
00028 
00034 # include <mln/fun/p2v/ternary.hh>
00035 
00036 
00037 namespace mln
00038 {
00039 
00040   namespace fun
00041   {
00042 
00043     namespace p2v
00044     {
00045 
00046       template <typename T1, typename N1,
00047                 typename T2, typename N2,
00048                 typename O>
00049       ternary_<T1, N1,
00050                ternary_<T2, N2, O> >
00051       elifs(const Function_v2b<T1>& f_if_1, const Function_v2v<N1>& f_then_1,
00052             const Function_v2b<T2>& f_if_2, const Function_v2v<N2>& f_then_2,
00053             const Function_v2v<O>&  f_otherwise);
00054 
00055 
00056 # ifndef MLN_INCLUDE_ONLY
00057 
00058       template <typename T1, typename N1,
00059                 typename T2, typename N2,
00060                 typename O>
00061       inline
00062       ternary_<T1, N1,
00063                ternary_<T2, N2, O> >
00064       elifs(const Function_v2b<T1>& f_if_1, const Function_v2v<N1>& f_then_1,
00065             const Function_v2b<T2>& f_if_2, const Function_v2v<N2>& f_then_2,
00066             const Function_v2v<O>&  f_otherwise)
00067       {
00068         typedef ternary_<T2, N2, O> T2_N2_O;
00069         T2_N2_O f_otherwise_1(f_if_2, f_then_2, f_otherwise);
00070         ternary_<T1, N1, T2_N2_O> tmp(f_if_1, f_then_1, f_otherwise_1);
00071         return tmp;
00072       }
00073 
00074 # endif // ! MLN_INCLUDE_ONLY
00075 
00076     } 
00077 
00078   } 
00079 
00080 } 
00081 
00082 
00083 #endif // ! MLN_FUN_P2V_ELIFS_HH