Go to the documentation of this file.
40 template <
typename T,
typename U,
bool UIsObject = false>
84 template <
typename FunctionType>
86 FunctionType fun,
size_t e1,
size_t e2,
const T& T1,
const T& T2)
88 detail::applyFunction<T, U, UIsObject, FunctionType>(
89 *
this, fun, e1, e2, T1, T2);
103 template <
typename FunctionType>
112 template <
typename FunctionType>
115 typename std::set<T>::const_iterator it =
elements.begin();
116 for (
size_t i = 0; i <
elements.size(); ++i, ++it)
118 typename std::set<T>::const_iterator jt =
elements.begin();
119 for (
size_t j = 0; j <
elements.size(); ++j, ++jt)
127 template <
typename FunctionType>
130 typename std::set<T>::const_iterator it =
elements.begin();
131 for (
size_t i = 0; i <
elements.size(); ++i, ++it)
134 typename std::set<T>::const_iterator jt = it;
136 for (
size_t j = i + 1; j <
elements.size(); ++j, ++jt)
179 typename std::set<T>::const_iterator b =
elements.begin(),
181 typename std::set<T>::const_iterator it1 =
std::find(b, e, t1),
183 if (it1 == e || it2 == e)
return false;
195 typename std::set<T>::const_iterator b =
elements.begin(),
197 typename std::set<T>::const_iterator it1 =
std::find(b, e, t1),
199 if (it1 == e || it2 == e)
throw std::domain_error(
"Element not found");
212 typename std::set<T>::const_iterator b =
elements.begin(),
214 typename std::set<T>::const_iterator it1 =
std::find(b, e, t1),
216 if (it1 == e || it2 == e)
throw std::domain_error(
"Element not found");
219 static_cast<size_t>(
distance(b, it2)));
243 typename std::set<T>::const_iterator it =
elements.begin();
286 typename std::set<T>::const_iterator b =
elements.begin(),
288 typename std::set<T>::const_iterator it =
std::find(b, e, t);
289 if (it == e)
throw std::domain_error(
"Element not found");
300 typename std::set<T>::const_iterator b =
elements.begin(),
302 typename std::set<T>::const_iterator it =
std::find(b, e, t);
303 if (it == e)
throw std::domain_error(
"Element not found");
312 std::copy(access.
begin(), access.
end(), vec.begin());
316 typename std::set<T>::const_iterator b =
elements.begin(),
318 typename std::set<T>::const_iterator it =
std::find(b, e, t);
319 if (it == e)
throw std::domain_error(
"Element not found");
329 typename std::set<T>::const_iterator b =
elements.begin(),
331 typename std::set<T>::const_iterator it =
std::find(b, e, t);
332 if (it == e)
throw std::domain_error(
"Element not found");
343 typename std::set<T>::const_iterator b =
elements.begin(),
345 typename std::set<T>::const_iterator it =
std::find(b, e, t);
346 if (it == e)
throw std::domain_error(
"Element not found");
355 std::copy(access.
begin(), access.
end(), vec.begin());
359 typename std::set<T>::const_iterator b =
elements.begin(),
361 typename std::set<T>::const_iterator it =
std::find(b, e, t);
362 if (it == e)
throw std::domain_error(
"Element not found");
371 typename std::set<T>::const_iterator it =
elements.begin();
384 typename std::set<T>::const_iterator b =
elements.begin(),
386 typename std::set<T>::const_iterator it =
std::find(e, b, el);
387 if (it == e)
return false;
397 std::set<size_t> positions;
398 for (
typename std::set<T>::const_iterator it = vals.begin();
399 it != vals.end(); ++it)
401 typename std::set<T>::iterator elsIt =
407 return positions.size();
411 relation.removeRowsAndCols(poss, poss);
412 for (std::set<size_t>::const_reverse_iterator it = poss.rbegin();
413 it != poss.rend(); ++it)
415 typename std::set<T>::const_iterator it2 =
elements.begin();
416 std::advance(it2, *it);
428 std::pair<typename std::set<T>::iterator,
bool> ins =
433 std::multiset<size_t> newEls;
435 relation.insertRowsAndCols(newEls, newEls);
436 return std::make_pair(
true, dist);
439 return std::make_pair(
false, dist);
445 template <
typename FunctionType>
449 size_t pos = ins.second;
450 for (
size_t i = 0; i <
elements.size(); ++i)
464 if (els.empty())
return 0;
472 std::vector<size_t> added;
474 added.reserve(els.size());
475 for (
typename std::set<T>::const_iterator it = els.begin();
476 it != els.end(); ++it)
478 std::pair<typename std::set<T>::iterator,
bool> ins =
483 added.push_back(dist);
484 for (std::vector<size_t>::iterator it2 = added.begin();
485 it2 != added.end(); ++it2)
486 if (*it2 >= dist) ++(*it2);
492 std::sort(added.begin(), added.end());
493 for (
size_t j = 1; j < added.size(); ++j) added[j] -= j;
494 std::multiset<size_t> poss(added.begin(), added.end());
495 relation.insertRowsAndCols(poss, poss);
502 template <
typename FunctionType>
505 if (els.empty())
return 0;
507 std::set<size_t> poss;
510 typename std::set<T>::const_iterator
begin =
elements.begin(),
512 for (
typename std::set<T>::const_iterator it = els.begin();
513 it != els.end(); ++it)
516 std::set<size_t> nPoss;
517 std::set<size_t>::const_iterator
begin = poss.begin(),
end = poss.end();
518 for (
size_t i = 0; i <
elements.size(); ++i)
520 vector<const T*> proxy;
521 proxy.reserve(poss.size());
522 for (std::set<size_t>::const_iterator it =
begin; it !=
end; ++it)
525 proxy.push_back(&e1);
527 for (
typename std::set<T>::const_iterator it2 =
elements.begin();
531 for (std::set<size_t>::const_iterator it = nPoss.begin();
532 it != nPoss.end(); ++it)
535 typename std::vector<const T*>::const_iterator itV = proxy.begin();
536 for (std::set<size_t>::const_iterator it2 = poss.begin();
537 it2 != poss.end(); ++it2, ++itV)
550 relation.setSize(newEls.size(), newEls.size());
561 template <
typename T,
typename U,
bool UIsObject,
typename FunctionType>
564 const T& T1,
const T& T2)
571 template <
typename T,
typename U,
bool UIsObject>
575 size_t e1,
size_t e2,
const T& T1,
const T& T2)
void setElements(const std::set< T > &newEls)
Completely resets the relation, using a new set of elements.
const_iterator end() const
CBinaryRelation(const std::set< T > &els, FunctionType fun)
Constructor which initializes the relation using a given function.
const_reverse_iterator rend() const
Gets a reverse iterator to the starting point of the elements set.
void getRelationTo(const T &t, vector< U > &vec)
CBinaryRelation(const std::set< T > &els)
Default constructor, doesn't initialize the relation.
U(*)(const T &, const T &) FunctionByReturnValue
Function type which obtains the relation value by a return value.
const_iterator begin() const
typename std::set< T >::const_iterator const_iterator
Constant iterator through the set elements.
void removeElementAt(size_t i)
Removes an element at a concrete position.
This class models a binary relation through the elements of any given set.
AccessorForSecondElement getRelationTo(size_t i)
Gets an accessor for every value related to an element B given its index, i.e., every f(x,...
CMatrixColumnAccessor< U > AccessorForSecondElement
Accessor type to every value related to any element B, i.e., f(x,B).
const U & getRelationValue(size_t e1, size_t e2) const
Get a relation value, given the indices.
void applyFunction(CBinaryRelation< T, U, UIsObject > &o, FunctionType fun, size_t e1, size_t e2, const T &T1, const T &T2)
void initializeSymmetricallyWith(FunctionType fun)
Initialize the whole relation with a given function, assuming that the relation is symmetrical.
size_t size() const
Returns the amount of elements present in the relation.
const_iterator find(const KEY &key) const
ConstAccessorForFirstElement getRelationFrom(const T &t) const
Gets an iterable constant accessor for every value related to an element A, i.e., every f(A,...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
double distance(const TPoint2D &p1, const TPoint2D &p2)
Gets the distance between two points in a 2D space.
T operator[](size_t i) const
Operator for direct access to a element given its index.
AccessorForSecondElement getRelationTo(const T &t)
Gets an iterable accessor for every value related to an element B, i.e., every f(x,...
#define ASSERT_(f)
Defines an assertion mechanism.
A vector-like wrapper for a Matrix for accessing the elements of a given row with a [] operator.
bool setRelationValue(const T &t1, const T &t2, const U &newVal)
Manually set a relationship value, given the elements.
typename detail::MatrixWrapper< U, UIsObject >::MatrixType MatrixType
Matrix type used to store the actual relation.
const U & operator()(size_t e1, size_t e2) const
U & operator()(size_t e1, size_t e2)
U getRelationValue(const T &t1, const T &t2) const
Get a relation value, given the elements.
#define ASSERT_BELOW_(__A, __B)
U & getRelationValue(size_t e1, size_t e2)
Get a reference to a relation value given its indices, which allows both querying and setting the val...
const_iterator end() const
Gets an iterator to the ending point of the elements set.
const_reverse_iterator rbegin() const
Gets a reverse iterator to the ending point of the elements set.
AccessorForFirstElement getRelationFrom(const T &t)
Gets an iterable accessor for every value related to an element A, i.e., every f(A,...
CConstMatrixRowAccessor< U > ConstAccessorForFirstElement
Const accessor type to every value related to any element A, i.e., f(A,x).
void setRelationValue(size_t e1, size_t e2, const U &newVal)
Manually set a relationship value, given the indices.
void removeElementsAt(const std::set< size_t > &poss)
This template is a trick to switch the type of a variable using a boolean variable in the template.
void(*)(const T &, const T &, U &) FunctionByReferencePass
Function type which obtains the relation value by reference pass.
CMatrixRowAccessor< U > AccessorForFirstElement
Accessor type to every value related to any element A, i.e., f(A,x).
size_t insertElements(const std::set< T > &els)
Inserts a set of elements into the relation.
A vector-like wrapper for a Matrix for accessing the elements of a given column with a [] operator.
ConstAccessorForFirstElement getRelationFrom(size_t i) const
Gets a constant accessor for every value related to an element A given its index, i....
A vector-like wrapper for a const Matrix for accessing the elements of a given row with a [] operator...
std::pair< bool, size_t > insertElement(const T &el, FunctionType fun)
Inserts an element and initializes its relationship values, even if it was already present.
void applyFunction(FunctionType fun, size_t e1, size_t e2, const T &T1, const T &T2)
Template used to make the function interface independent from the function type.
typename std::set< T >::const_reverse_iterator const_reverse_iterator
Constant reverse iterator through the set elements.
AccessorForFirstElement getRelationFrom(size_t i)
Gets an accessor for every value related to an element A given its index, i.e., every f(A,...
const_iterator end() const
void getRelationTo(size_t i, vector< U > &vec)
const_iterator begin() const
Gets an iterator to the starting point of the elements set.
std::pair< bool, size_t > insertElement(const T &el)
Inserts an element.
void getRelationFrom(size_t i, vector< U > &vec)
std::set< T > elements
Actual set of elements.
A vector-like wrapper for a const Matrix for accessing the elements of a given column with a [] opera...
ConstAccessorForSecondElement getRelationTo(size_t i) const
Gets a constant accessor for every value related to an element B given its index, i....
ConstAccessorForSecondElement getRelationTo(const T &t) const
Gets an iterable constant accessor for every value related to an alement B, i.e., every f(x,...
const_iterator begin() const
size_t insertElements(const std::set< T > &els, FunctionType fun)
Inserts a set of elements into the relation, initializing the actual relation with a given function.
CConstMatrixColumnAccessor< U > ConstAccessorForSecondElement
Const accessor type to every value related to any element B, i.e., f(x,B).
MatrixType relation
Matrix storing the relation.
void getRelationFrom(const T &t, vector< U > &vec)
size_t removeElements(const std::set< T > &vals)
Removes a set of elements.
bool removeElement(const T &el)
Removes an element.
void initializeWith(FunctionType fun)
Initialize the whole relation with a given function.
U & getRelationValue(const T &t1, const T &t2)
Get a reference to a relation value given the elements, which allows both querying and setting.
U(*)(T, T) SimpleFunctionByReturnValue
Simple function type, used to initialize chunks of the matrix.
Page generated by Doxygen 1.8.17 for MRPT 2.0.3 at Thu May 21 21:53:32 UTC 2020 | |