You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
2.0 KiB

2 years ago
#ifndef MEDUSA_BITS_DOMAINS_FINDCLOSEST_FWD_HPP_
#define MEDUSA_BITS_DOMAINS_FINDCLOSEST_FWD_HPP_
/**
* @file
* Declarations of FindClosest.
*
* @example test/domains/FindClosest_test.cpp
*/
#include <medusa/Config.hpp>
#include <medusa/bits/types/Range_fwd.hpp>
namespace mm {
/**
* Class representing the engine for finding supports consisting of closest nodes.
*
* Usage example:
* @snippet domains/FindClosest_test.cpp FindClosest usage example
* @ingroup domains
*/
class FindClosest {
private:
int support_size; ///< Support size.
Range<int> for_which_; ///< Find support only for these nodes.
Range<int> search_among_; ///< Search only among these nodes.
bool force_self_; ///< Force each node as the first element of its support.
public:
/// Constructs an engine for finding support with given support size.
FindClosest(int support_size) : support_size(support_size), for_which_(), search_among_(),
force_self_(false) {}
/**
* Find support only for these nodes. If not given, finds support for all non-zero type
* domain nodes, as defined by @ref DomainDiscretization::all "domain.all()".
*/
FindClosest& forNodes(indexes_t for_which) { for_which_ = std::move(for_which); return *this; }
/**
* Search only among given nodes. If not given, searches among all nodes, including
* zero-type nodes.
*/
FindClosest& searchAmong(indexes_t search_among) {
search_among_ = std::move(search_among); return *this; }
/// Put each node as the first of its support, even if it is not in included in searchAmong().
FindClosest& forceSelf(bool b = true) { force_self_ = b; return *this; }
/// Find `num` closest nodes. This methods overrides the value set in the constructor.
FindClosest& numClosest(int num) { support_size = num; return *this; }
/// Find support for nodes in domain.
template <typename domain_t>
void operator()(domain_t& domain) const;
};
} // namespace mm
#endif // MEDUSA_BITS_DOMAINS_FINDCLOSEST_FWD_HPP_