motzkin_burger.hpp

Go to the documentation of this file.
00001 /*****************************************************************************
00002     
00003     motzkin_burger.hpp -- Motzkin-Burger algorithm for double-description of
00004         a polyhedral cone.
00005 
00006     This file is a part of the Arageli library.
00007 
00008     Copyright (C) Nikolai Yu. Zolotykh, 1999--2006
00009     Copyright (C) Sergey S. Lyalin, 2006
00010     University of Nizhni Novgorod, Russia
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 } // namespace ctrl
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);  // Don't use!
00173 
00174 
00175 } // namesapce Arageli
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

Generated on Thu Aug 31 17:38:08 2006 for Arageli by  doxygen 1.4.7