00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_BASE_CASE_TEST_INCLUDE
00013 #define MTL_BASE_CASE_TEST_INCLUDE
00014
00015 #include <algorithm>
00016
00017 namespace mtl { namespace recursion {
00018
00019
00020 struct min_dim_test
00021 {
00022 min_dim_test(std::size_t comp) : comp(comp) {}
00023
00024 template <typename Recursator>
00025 bool operator() (Recursator const& recursator) const
00026 {
00027 return std::min(recursator.get_value().num_rows(),
00028 recursator.get_value().num_cols())
00029 <= comp;
00030 }
00031
00032 private:
00033 std::size_t comp;
00034 };
00035
00036
00037
00038
00039 struct undivisible_min_dim_test
00040 {
00041 undivisible_min_dim_test(std::size_t comp) : comp(comp) {}
00042
00043 template <typename Recursator>
00044 bool operator() (Recursator const& recursator) const
00045 {
00046 std::size_t min_dim= std::min(recursator.get_value().num_rows(),
00047 recursator.get_value().num_cols()),
00048 max_dim= std::max(recursator.get_value().num_rows(),
00049 recursator.get_value().num_cols());
00050
00051 return min_dim <= comp && 2 * min_dim > max_dim;
00052 }
00053
00054 private:
00055 std::size_t comp;
00056 };
00057
00058
00059
00060 struct max_dim_test
00061 {
00062 max_dim_test(std::size_t comp) : comp(comp) {}
00063
00064 template <typename Recursator>
00065 bool operator() (Recursator const& recursator) const
00066 {
00067 return std::max(num_rows(*recursator), num_cols(*recursator)) <= comp;
00068 }
00069
00070 private:
00071 std::size_t comp;
00072 };
00073
00074
00075
00076 template <unsigned long BaseCaseSize>
00077 struct max_dim_test_static
00078 {
00079 static const unsigned long base_case_size= BaseCaseSize;
00080
00081 template <typename Recursator>
00082 bool operator() (Recursator const& recursator) const
00083 {
00084 return std::max(recursator.get_value().num_rows(),
00085 recursator.get_value().num_cols())
00086 <= BaseCaseSize;
00087 }
00088 };
00089
00090
00091
00092 struct bound_test
00093 {
00094 bound_test(std::size_t comp) : comp(comp) {}
00095
00096 template <typename Recursator>
00097 bool operator() (Recursator const& recursator) const
00098 {
00099 return recursator.bound() <= comp;
00100 }
00101
00102 private:
00103 std::size_t comp;
00104 };
00105
00106
00107
00108 template <unsigned long BaseCaseSize>
00109 struct bound_test_static
00110 {
00111 static const unsigned long base_case_size= BaseCaseSize;
00112
00113 template <typename Recursator>
00114 bool operator() (Recursator const& recursator) const
00115 {
00116 return recursator.bound() <= base_case_size;
00117 }
00118 };
00119
00120
00121
00122 }}
00123
00124 #endif // MTL_BASE_CASE_TEST_INCLUDE