📄 concepts.hpp
字号:
};
template<class V>
struct VectorExpressionConcept {
typedef V vector_type;
typedef typename V::type_category type_category;
typedef typename V::size_type size_type;
typedef typename V::value_type value_type;
typedef typename V::const_iterator const_iterator_type;
typedef typename V::const_reverse_iterator const_reverse_iterator_type;
static void constraints () {
DefaultConstructibleConcept<vector_type>::constraints ();
vector_type v = vector_type ();
size_type n (0), i (0);
value_type t = value_type ();
// Find (internal?)
const_iterator_type cit (v.find (i));
// Beginning of range
const_iterator_type cit_begin (v.begin ());
// End of range
const_iterator_type cit_end (v.end ());
// Size
n = v.size ();
// Beginning of reverse range
#ifndef BOOST_UBLAS_LWG_ISSUE_280
const vector_type cv = vector_type ();
const_reverse_iterator_type crit_begin (cv.rbegin ());
#else
const_reverse_iterator_type crit_begin (v.rbegin ());
#endif
// End of reverse range
#ifndef BOOST_UBLAS_LWG_ISSUE_280
const_reverse_iterator_type crit_end (cv.rend ());
#else
const_reverse_iterator_type crit_end (v.rend ());
#endif
// Element access
t = v (i);
ignore_unused_variable_warning (n);
ignore_unused_variable_warning (cit);
ignore_unused_variable_warning (cit_begin);
ignore_unused_variable_warning (cit_end);
ignore_unused_variable_warning (crit_begin);
ignore_unused_variable_warning (crit_end);
ignore_unused_variable_warning (t);
}
};
template<class V>
struct MutableVectorExpressionConcept {
typedef V vector_type;
typedef typename V::size_type size_type;
typedef typename V::value_type value_type;
typedef typename V::iterator iterator_type;
typedef typename V::reverse_iterator reverse_iterator_type;
static void constraints () {
AssignableConcept<vector_type>::constraints (vector_type ());
VectorExpressionConcept<vector_type>::constraints ();
vector_type v = vector_type (), v1 = vector_type (), v2 = vector_type ();
size_type i (0);
value_type t = value_type ();
// Find (internal?)
iterator_type it (v.find (i));
// Beginning of range
iterator_type it_begin (v.begin ());
// End of range
iterator_type it_end (v.end ());
// Swap
v1.swap (v2);
// Beginning of reverse range
reverse_iterator_type rit_begin (v.rbegin ());
// End of reverse range
reverse_iterator_type rit_end (v.rend ());
// Assignments
v2 = v1;
v2.assign (v1);
v2 += v1;
v2.plus_assign (v1);
v2 -= v1;
v2.minus_assign (v1);
v *= t;
ignore_unused_variable_warning (it);
ignore_unused_variable_warning (it_begin);
ignore_unused_variable_warning (it_end);
ignore_unused_variable_warning (rit_begin);
ignore_unused_variable_warning (rit_end);
}
};
template<class M>
struct MatrixExpressionConcept {
typedef M matrix_type;
typedef typename M::type_category type_category;
typedef typename M::size_type size_type;
typedef typename M::value_type value_type;
typedef typename M::const_iterator1 const_iterator1_type;
typedef typename M::const_iterator2 const_iterator2_type;
typedef typename M::const_reverse_iterator1 const_reverse_iterator1_type;
typedef typename M::const_reverse_iterator2 const_reverse_iterator2_type;
static void constraints () {
DefaultConstructibleConcept<matrix_type>::constraints ();
matrix_type m = matrix_type ();
size_type n (0), i (0), j (0);
value_type t = value_type ();
// Find (internal?)
const_iterator1_type cit1 (m.find1 (0, i, j));
const_iterator2_type cit2 (m.find2 (0, i, j));
// Beginning of range
const_iterator1_type cit1_begin (m.begin1 ());
const_iterator2_type cit2_begin (m.begin2 ());
// End of range
const_iterator1_type cit1_end (m.end1 ());
const_iterator2_type cit2_end (m.end2 ());
// Size
n = m.size1 ();
n = m.size2 ();
// Beginning of reverse range
#ifndef BOOST_UBLAS_LWG_ISSUE_280
const matrix_type cm = matrix_type ();
const_reverse_iterator1_type crit1_begin (cm.rbegin1 ());
const_reverse_iterator2_type crit2_begin (cm.rbegin2 ());
#else
const_reverse_iterator1_type crit1_begin (m.rbegin1 ());
const_reverse_iterator2_type crit2_begin (m.rbegin2 ());
#endif
// End of reverse range
#ifndef BOOST_UBLAS_LWG_ISSUE_280
const_reverse_iterator1_type crit1_end (cm.rend1 ());
const_reverse_iterator2_type crit2_end (cm.rend2 ());
#else
const_reverse_iterator1_type crit1_end (m.rend1 ());
const_reverse_iterator2_type crit2_end (m.rend2 ());
#endif
// Element access
t = m (i, j);
ignore_unused_variable_warning (n);
ignore_unused_variable_warning (cit1);
ignore_unused_variable_warning (cit2);
ignore_unused_variable_warning (cit1_begin);
ignore_unused_variable_warning (cit2_begin);
ignore_unused_variable_warning (cit1_end);
ignore_unused_variable_warning (cit2_end);
ignore_unused_variable_warning (crit1_begin);
ignore_unused_variable_warning (crit2_begin);
ignore_unused_variable_warning (crit1_end);
ignore_unused_variable_warning (crit2_end);
ignore_unused_variable_warning (t);
}
};
template<class M>
struct MutableMatrixExpressionConcept {
typedef M matrix_type;
typedef typename M::size_type size_type;
typedef typename M::value_type value_type;
typedef typename M::iterator1 iterator1_type;
typedef typename M::iterator2 iterator2_type;
typedef typename M::reverse_iterator1 reverse_iterator1_type;
typedef typename M::reverse_iterator2 reverse_iterator2_type;
static void constraints () {
AssignableConcept<matrix_type>::constraints (matrix_type ());
MatrixExpressionConcept<matrix_type>::constraints ();
matrix_type m = matrix_type (), m1 = matrix_type (), m2 = matrix_type ();
size_type i (0), j (0);
value_type t = value_type ();
// Find (internal?)
iterator1_type it1 (m.find1 (0, i, j));
iterator2_type it2 (m.find2 (0, i, j));
// Beginning of range
iterator1_type it1_begin (m.begin1 ());
iterator2_type it2_begin (m.begin2 ());
// End of range
iterator1_type it1_end (m.end1 ());
iterator2_type it2_end (m.end2 ());
// Swap
m1.swap (m2);
// Beginning of reverse range
reverse_iterator1_type rit1_begin (m.rbegin1 ());
reverse_iterator2_type rit2_begin (m.rbegin2 ());
// End of reverse range
reverse_iterator1_type rit1_end (m.rend1 ());
reverse_iterator2_type rit2_end (m.rend2 ());
// Assignments
m2 = m1;
m2.assign (m1);
m2 += m1;
m2.plus_assign (m1);
m2 -= m1;
m2.minus_assign (m1);
m *= t;
ignore_unused_variable_warning (it1);
ignore_unused_variable_warning (it2);
ignore_unused_variable_warning (it1_begin);
ignore_unused_variable_warning (it2_begin);
ignore_unused_variable_warning (it1_end);
ignore_unused_variable_warning (it2_end);
ignore_unused_variable_warning (rit1_begin);
ignore_unused_variable_warning (rit2_begin);
ignore_unused_variable_warning (rit1_end);
ignore_unused_variable_warning (rit2_end);
}
};
template<class V>
struct VectorConcept {
typedef V vector_type;
static void constraints () {
VectorExpressionConcept<vector_type>::constraints ();
}
};
template<class V>
struct MutableVectorConcept {
typedef V vector_type;
typedef typename V::size_type size_type;
typedef typename V::value_type value_type;
static void constraints () {
MutableVectorExpressionConcept<vector_type>::constraints ();
VectorConcept<vector_type>::constraints ();
size_type n (0);
// Sizing constructor
vector_type v = vector_type (n);
value_type t = value_type ();
size_type i (0);
// Insert
v.insert (i, t);
// Erase
v.erase (i);
// Clear
v.clear ();
// Resize
v.resize (n);
}
};
template<class M>
struct MatrixConcept {
typedef M matrix_type;
static void constraints () {
MatrixExpressionConcept<matrix_type>::constraints ();
}
};
template<class M>
struct MutableMatrixConcept {
typedef M matrix_type;
typedef typename M::size_type size_type;
typedef typename M::value_type value_type;
static void constraints () {
MutableMatrixExpressionConcept<matrix_type>::constraints ();
MatrixConcept<matrix_type>::constraints ();
size_type n (0);
// Sizing constructor
matrix_type m = matrix_type (n, n);
value_type t = value_type ();
size_type i (0), j (0);
// Insert
m.insert (i, j, t);
// Erase
m.erase (i, j);
// Clear
m.clear ();
// Resize
m.resize (n, n);
}
};
template<class T>
T
ZeroElement (T);
template<>
float
ZeroElement (float) {
return 0.f;
}
template<>
double
ZeroElement (double) {
return 0.;
}
#ifndef BOOST_MSVC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -