13 #ifndef MLPACK_CORE_TREE_RECTANGLE_TREE_DISCRETE_HILBERT_VALUE_HPP 14 #define MLPACK_CORE_TREE_RECTANGLE_TREE_DISCRETE_HILBERT_VALUE_HPP 28 template<
typename TreeElemType>
34 typedef typename std::conditional<
sizeof(TreeElemType) * CHAR_BIT <= 32,
36 uint64_t>::type HilbertElemType;
47 template<
typename TreeType>
48 DiscreteHilbertValue(
const TreeType* tree);
57 template<
typename TreeType>
58 DiscreteHilbertValue(
const DiscreteHilbertValue& other,
67 DiscreteHilbertValue(DiscreteHilbertValue&& other);
70 ~DiscreteHilbertValue();
81 template<
typename VecType1,
typename VecType2>
82 static int ComparePoints(
96 static int CompareValues(
const DiscreteHilbertValue& val1,
97 const DiscreteHilbertValue& val2);
107 int CompareWith(
const DiscreteHilbertValue& val)
const;
118 template<
typename VecType>
133 template<
typename VecType>
134 int CompareWithCachedPoint(
145 template<
typename TreeType,
typename VecType>
146 size_t InsertPoint(TreeType *node,
155 template<
typename TreeType>
156 void InsertNode(TreeType* node);
165 template<
typename TreeType>
166 void DeletePoint(TreeType* node,
const size_t localIndex);
174 template<
typename TreeType>
175 void RemoveNode(TreeType* node,
const size_t nodeIndex);
183 DiscreteHilbertValue& operator=(
const DiscreteHilbertValue& val);
197 template<
typename TreeType>
198 void UpdateLargestValue(TreeType* node);
209 template<
typename TreeType>
210 void RedistributeHilbertValues(TreeType* parent,
211 const size_t firstSibling,
212 const size_t lastSibling);
219 template<
typename VecType>
220 static arma::Col<HilbertElemType> CalculateValue(
232 static int CompareValues(
const arma::Col<HilbertElemType>& value1,
233 const arma::Col<HilbertElemType>& value2);
236 size_t NumValues()
const {
return numValues; }
238 size_t& NumValues() {
return numValues; }
241 const arma::Mat<HilbertElemType>* LocalHilbertValues()
const 242 {
return localHilbertValues; }
244 arma::Mat<HilbertElemType>*& LocalHilbertValues()
245 {
return localHilbertValues; }
248 bool OwnsLocalHilbertValues()
const {
return ownsLocalHilbertValues; }
250 bool& OwnsLocalHilbertValues() {
return ownsLocalHilbertValues; }
253 const arma::Col<HilbertElemType>* ValueToInsert()
const 254 {
return valueToInsert; }
256 arma::Col<HilbertElemType>* ValueToInsert() {
return valueToInsert; }
259 bool OwnsValueToInsert()
const {
return ownsValueToInsert; }
261 bool& OwnsValueToInsert() {
return ownsValueToInsert; }
264 static constexpr
size_t order =
sizeof(HilbertElemType) * CHAR_BIT;
266 arma::Mat<HilbertElemType>* localHilbertValues;
268 bool ownsLocalHilbertValues;
277 arma::Col<HilbertElemType>* valueToInsert;
279 bool ownsValueToInsert;
282 template<
typename Archive>
283 void Serialize(Archive& ar,
const unsigned int );
290 #include "discrete_hilbert_value_impl.hpp" 292 #endif // MLPACK_CORE_TREE_RECTANGLE_TREE_DISCRETE_HILBERT_VALUE_HPP The DiscreteHilbertValue class stores Hilbert values for all of the points in a RectangleTree node...
Linear algebra utility functions, generally performed on matrices or vectors.
The core includes that mlpack expects; standard C++ includes and Armadillo.
If value == true, then VecType is some sort of Armadillo vector or subview.
typename enable_if< B, T >::type enable_if_t