RectangleTree<MetricType, StatisticType, MatType, SplitType, DescentType>:: RectangleTree( const RectangleTree& other, const bool deepCopy) : maxNumChildren(other.MaxNumChildren()), minNumChildren(other.MinNumChildren()), numChildren(other.NumChildren()), children(maxNumChildren + 1), parent(other.Parent()), begin(other.Begin()), count(other.Count()), maxLeafSize(other.MaxLeafSize()), minLeafSize(other.MinLeafSize()), bound(other.bound), splitHistory(other.SplitHistory()), parentDistance(other.ParentDistance()), dataset(new MatType(*other.dataset)), ownsDataset(true), points(other.Points()), localDataset(NULL) { if (deepCopy) { if (numChildren > 0) { for (size_t i = 0; i < numChildren; i++) { children[i] = new RectangleTree(*(other.Children()[i])); } } else { localDataset = new MatType(other.LocalDataset()); } } else { children = other.Children(); arma::mat& otherData = const_cast<arma::mat&>(other.LocalDataset()); localDataset = &otherData; } }
RectangleTree<MetricType, StatisticType, MatType, SplitType, DescentType, AuxiliaryInformationType>:: RectangleTree( const RectangleTree& other, const bool deepCopy, RectangleTree* newParent) : maxNumChildren(other.MaxNumChildren()), minNumChildren(other.MinNumChildren()), numChildren(other.NumChildren()), children(maxNumChildren + 1, NULL), parent(deepCopy ? newParent : other.Parent()), begin(other.Begin()), count(other.Count()), numDescendants(other.numDescendants), maxLeafSize(other.MaxLeafSize()), minLeafSize(other.MinLeafSize()), bound(other.bound), parentDistance(other.ParentDistance()), dataset(deepCopy ? (parent ? parent->dataset : new MatType(*other.dataset)) : &other.Dataset()), ownsDataset(deepCopy && (!parent)), points(other.points), auxiliaryInfo(other.auxiliaryInfo, this, deepCopy) { if (deepCopy) { if (numChildren > 0) { for (size_t i = 0; i < numChildren; i++) children[i] = new RectangleTree(other.Child(i), true, this); } } else children = other.children; }