Have ~OctreeProcessor break cycle instead of using weak pointers

This commit is contained in:
Simon Walton 2018-06-12 12:32:27 -07:00
parent 99a8ecc6db
commit 9ae3411abe
4 changed files with 10 additions and 14 deletions

View file

@ -33,7 +33,7 @@ EntityTreeElement::~EntityTreeElement() {
OctreeElementPointer EntityTreeElement::createNewElement(unsigned char* octalCode) { OctreeElementPointer EntityTreeElement::createNewElement(unsigned char* octalCode) {
auto newChild = EntityTreeElementPointer(new EntityTreeElement(octalCode)); auto newChild = EntityTreeElementPointer(new EntityTreeElement(octalCode));
newChild->setTree(getTree()); newChild->setTree(_myTree);
return newChild; return newChild;
} }
@ -44,7 +44,7 @@ void EntityTreeElement::init(unsigned char* octalCode) {
OctreeElementPointer EntityTreeElement::addChildAtIndex(int index) { OctreeElementPointer EntityTreeElement::addChildAtIndex(int index) {
OctreeElementPointer newElement = OctreeElement::addChildAtIndex(index); OctreeElementPointer newElement = OctreeElement::addChildAtIndex(index);
std::static_pointer_cast<EntityTreeElement>(newElement)->setTree(getTree()); std::static_pointer_cast<EntityTreeElement>(newElement)->setTree(_myTree);
return newElement; return newElement;
} }
@ -475,7 +475,7 @@ bool EntityTreeElement::removeEntityItem(EntityItemPointer entity, bool deletion
int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int bytesLeftToRead, int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
ReadBitstreamToTreeParams& args) { ReadBitstreamToTreeParams& args) {
return getTree()->readEntityDataFromBuffer(data, bytesLeftToRead, args); return _myTree->readEntityDataFromBuffer(data, bytesLeftToRead, args);
} }
void EntityTreeElement::addEntityItem(EntityItemPointer entity) { void EntityTreeElement::addEntityItem(EntityItemPointer entity) {

View file

@ -161,8 +161,8 @@ public:
virtual uint16_t size() const; virtual uint16_t size() const;
bool hasEntities() const { return size() > 0; } bool hasEntities() const { return size() > 0; }
void setTree(EntityTreePointer tree) { _myTree = std::weak_ptr<EntityTree>(tree); } void setTree(EntityTreePointer tree) { _myTree = tree; }
EntityTreePointer getTree() const { return _myTree.lock(); } EntityTreePointer getTree() const { return _myTree; }
void addEntityItem(EntityItemPointer entity); void addEntityItem(EntityItemPointer entity);
@ -234,7 +234,7 @@ public:
protected: protected:
virtual void init(unsigned char * octalCode) override; virtual void init(unsigned char * octalCode) override;
std::weak_ptr<EntityTree> _myTree; EntityTreePointer _myTree;
EntityItems _entityItems; EntityItems _entityItems;
}; };

View file

@ -20,12 +20,6 @@
#include "OctreeLogging.h" #include "OctreeLogging.h"
OctreeProcessor::OctreeProcessor() :
_tree(NULL),
_managedTree(false)
{
}
void OctreeProcessor::init() { void OctreeProcessor::init() {
if (!_tree) { if (!_tree) {
_tree = createTree(); _tree = createTree();
@ -34,6 +28,9 @@ void OctreeProcessor::init() {
} }
OctreeProcessor::~OctreeProcessor() { OctreeProcessor::~OctreeProcessor() {
if (_tree) {
_tree->eraseAllOctreeElements(false);
}
} }
void OctreeProcessor::setTree(OctreePointer newTree) { void OctreeProcessor::setTree(OctreePointer newTree) {

View file

@ -28,7 +28,6 @@
class OctreeProcessor : public QObject, public QEnableSharedFromThis<OctreeProcessor> { class OctreeProcessor : public QObject, public QEnableSharedFromThis<OctreeProcessor> {
Q_OBJECT Q_OBJECT
public: public:
OctreeProcessor();
virtual ~OctreeProcessor(); virtual ~OctreeProcessor();
virtual char getMyNodeType() const = 0; virtual char getMyNodeType() const = 0;
@ -61,7 +60,7 @@ protected:
virtual OctreePointer createTree() = 0; virtual OctreePointer createTree() = 0;
OctreePointer _tree; OctreePointer _tree;
bool _managedTree; bool _managedTree { false };
SimpleMovingAverage _elementsPerPacket; SimpleMovingAverage _elementsPerPacket;
SimpleMovingAverage _entitiesPerPacket; SimpleMovingAverage _entitiesPerPacket;