00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00022 #ifndef _ARAGELI_motzkin_burger_hpp_
00023 #define _ARAGELI_motzkin_burger_hpp_
00024
00025 #include "config.hpp"
00026
00027 #include <vector>
00028
00029
00030 namespace Arageli
00031 {
00032
00033 namespace ctrl
00034 {
00035
00036 struct skeleton_motzkin_burger_idler
00037 {
00038 class abort : public ctrl::abort {};
00039
00040 template <typename A, typename F, typename Q, typename E>
00041 void preamble (const A& a, const F& f, const Q& q, const E& e) const {}
00042
00043 void begin_gauss () const {}
00044
00045 void end_gauss () const {}
00046
00047 template <typename I>
00048 void find_non_zero (const I& i) const {}
00049
00050 void zero_row () const {}
00051
00052 template <typename I, typename J>
00053 void swap_cols_rows (const I& i, const J& j) const {}
00054
00055 template <typename J>
00056 void eliminate_col (const J& j) const {}
00057
00058 template <typename A, typename F, typename Q>
00059 void show_matrices (const A& a, const F& f, const Q& q) const {}
00060
00061 void begin_motzkin () const {}
00062
00063 void end_motzkin () const {}
00064
00065 template <typename I1, typename I2>
00066 void select_col (const I1& current_column, const I2& new_column) const {}
00067
00068 void zero_solution () const {}
00069
00070 void corollary_inequality () const {}
00071
00072 void begin_row_balancing () const {}
00073
00074 template <typename I, typename J>
00075 void balanced_rows (const I& j_p, const J& j_m) const {}
00076
00077 void end_row_balancing () const {}
00078
00079 void delete_negates () const {}
00080
00081 template <typename A, typename F, typename Q, typename E>
00082 void conclusion (const A& a, const F& f, const Q& q, const E& e) const {}
00083 };
00084
00085 }
00086
00087
00089
00091 template
00092 <
00093 typename A, typename F,
00094 typename Q, typename E,
00095 typename Ctrler
00096 >
00097 void skeleton_motzkin_burger
00098 (
00099 A& a, F& f, Q& q, E& e,
00100 Ctrler ctrler
00101 );
00102
00103
00105
00106 template <typename A, typename F, typename Q, typename E>
00107 inline void skeleton_motzkin_burger (A& a, F& f, Q& q, E& e)
00108 {
00109 return skeleton_motzkin_burger
00110 (a, f, q, e, ctrl::skeleton_motzkin_burger_idler());
00111 }
00112
00113
00115
00117 template
00118 <
00119 typename A, typename F,
00120 typename Q, typename E,
00121 typename Ctrler
00122 >
00123 void skeleton_motzkin_burger_min
00124 (
00125 A& a, F& f, Q& q, E& e,
00126 Ctrler ctrler
00127 );
00128
00129
00131
00132 template <typename A, typename F, typename Q, typename E>
00133 inline void skeleton_motzkin_burger_min (A& a, F& f, Q& q, E& e)
00134 {
00135 return skeleton_motzkin_burger_min
00136 (a, f, q, e, ctrl::skeleton_motzkin_burger_idler());
00137 }
00138
00139
00141
00143 template
00144 <
00145 typename A, typename F,
00146 typename Q, typename E,
00147 typename Ctrler
00148 >
00149 void skeleton_motzkin_burger_max
00150 (
00151 A& a, F& f, Q& q, E& e,
00152 Ctrler ctrler
00153 );
00154
00155
00157
00158 template <typename A, typename F, typename Q, typename E>
00159 inline void skeleton_motzkin_burger_max (A& a, F& f, Q& q, E& e)
00160 {
00161 return skeleton_motzkin_burger_max
00162 (a, f, q, e, ctrl::skeleton_motzkin_burger_idler());
00163 }
00164
00165
00166
00167 template
00168 <
00169 typename A, typename F,
00170 typename Q, typename E
00171 >
00172 void integer_conv_motzkin_burger (A& a, F& f, Q& q, E& e);
00173
00174
00175 }
00176
00177
00178 #ifdef ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE
00179 #define ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE_MOTZKIN_BURGER
00180 #include "motzkin_burger.cpp"
00181 #undef ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE_MOTZKIN_BURGER
00182 #endif
00183
00184 #endif