template<class Traits, class Partition>
eckit::BSPNode class

Base classes

template<class Traits, class NodeType>
class SPNode<Traits, BSPNode<Traits, Partition>>

Public types

using SPNodeType = SPNode<Traits, BSPNode<Traits, Partition>>
using Value = SPNodeType::Value
using Alloc = SPNodeType::Alloc
using Point = SPNodeType::Point
using NodeList = SPNodeType::NodeList
using NodeQueue = SPNodeType::NodeQueue
using NodeInfo = SPNodeType::NodeInfo
using HyperPlane = BSPHyperPlane<Point>
using Node = BSPNode<Traits, Partition>
using Payload = Traits::Payload

Public static functions

template<typename Container>
static auto build(Alloc& a, Partition& p, const Container& nodes, double dist, int depth = 0) -> BSPNode*
static auto build(Alloc& a, const ITER& begin, const ITER& end, int depth = 0) -> SPNode*

Constructors, destructors, conversion operators

BSPNode(const Value& v, const HyperPlane& plane, double dist)
~BSPNode() override

Public functions

auto nearestNeighbour(Alloc& a, const Point& p) -> NodeInfo
auto findInSphere(Alloc& a, const Point& p, double radius) -> NodeList
auto kNearestNeighbours(Alloc& a, const Point& p, size_t k) -> NodeList
auto point() const -> const Point&
auto payload() const -> const Payload&
auto value() -> Value&
auto value() const -> const Value&
auto nearestNeighbourBruteForce(Alloc& a, const Point& p) -> NodeInfo
auto findInSphereBruteForce(Alloc& a, const Point& p, double radius) -> NodeList
auto kNearestNeighboursBruteForce(Alloc& a, const Point& p, size_t k) -> NodeList
void visit(Alloc& a, Visitor& v, int depth = 0)
void linkNodes(Alloc& a, Node*& prev = 0)
auto asNode() const -> const Node*
auto asNode() -> Node*
void nearestNeighbourBruteForceX(Alloc& a, const Point& p, Node*& best, double& max, int depth)
void findInSphereBruteForceX(Alloc& a, const Point& p, double radius, NodeList& result, int depth)
void kNearestNeighboursBruteForceX(Alloc& a, const Point& p, size_t k, NodeQueue& result, int depth)
auto left(Alloc& a) const -> Node*
void left(Alloc& a, Node* n)
auto right(Alloc& a) const -> Node*
void right(Alloc& a, Node* n)
auto next(Alloc& a) const -> Node*
void next(Alloc& a, Node* n)

Private functions

void nearestNeighbourX(Alloc& a, const Point& p, Node*& best, double& max, int depth) virtual
void findInSphereX(Alloc& a, const Point& p, double radius, NodeList& result, int depth) virtual
void kNearestNeighboursX(Alloc& a, const Point& p, size_t k, NodeQueue& result, int depth) virtual

Typedef documentation

template<class Traits, class Partition>
typedef Traits::Payload eckit::BSPNode<Traits, Partition>::Payload

Function documentation

template<class Traits, class Partition>
static SPNode* eckit::BSPNode<Traits, Partition>::build(Alloc& a, const ITER& begin, const ITER& end, int depth = 0)

template<class Traits, class Partition>
NodeInfo eckit::BSPNode<Traits, Partition>::nearestNeighbour(Alloc& a, const Point& p)

template<class Traits, class Partition>
NodeList eckit::BSPNode<Traits, Partition>::findInSphere(Alloc& a, const Point& p, double radius)

template<class Traits, class Partition>
NodeList eckit::BSPNode<Traits, Partition>::kNearestNeighbours(Alloc& a, const Point& p, size_t k)

template<class Traits, class Partition>
const Point& eckit::BSPNode<Traits, Partition>::point() const

template<class Traits, class Partition>
const Payload& eckit::BSPNode<Traits, Partition>::payload() const

template<class Traits, class Partition>
Value& eckit::BSPNode<Traits, Partition>::value()

template<class Traits, class Partition>
const Value& eckit::BSPNode<Traits, Partition>::value() const

template<class Traits, class Partition>
NodeInfo eckit::BSPNode<Traits, Partition>::nearestNeighbourBruteForce(Alloc& a, const Point& p)

template<class Traits, class Partition>
NodeList eckit::BSPNode<Traits, Partition>::findInSphereBruteForce(Alloc& a, const Point& p, double radius)

template<class Traits, class Partition>
NodeList eckit::BSPNode<Traits, Partition>::kNearestNeighboursBruteForce(Alloc& a, const Point& p, size_t k)

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::visit(Alloc& a, Visitor& v, int depth = 0)

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::linkNodes(Alloc& a, Node*& prev = 0)

template<class Traits, class Partition>
const Node* eckit::BSPNode<Traits, Partition>::asNode() const

template<class Traits, class Partition>
Node* eckit::BSPNode<Traits, Partition>::asNode()

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::nearestNeighbourBruteForceX(Alloc& a, const Point& p, Node*& best, double& max, int depth)

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::findInSphereBruteForceX(Alloc& a, const Point& p, double radius, NodeList& result, int depth)

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::kNearestNeighboursBruteForceX(Alloc& a, const Point& p, size_t k, NodeQueue& result, int depth)

template<class Traits, class Partition>
Node* eckit::BSPNode<Traits, Partition>::left(Alloc& a) const

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::left(Alloc& a, Node* n)

template<class Traits, class Partition>
Node* eckit::BSPNode<Traits, Partition>::right(Alloc& a) const

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::right(Alloc& a, Node* n)

template<class Traits, class Partition>
Node* eckit::BSPNode<Traits, Partition>::next(Alloc& a) const

template<class Traits, class Partition>
void eckit::BSPNode<Traits, Partition>::next(Alloc& a, Node* n)