Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SofaKernel] Refactor the MutationListener #917

Merged
merged 43 commits into from
Apr 17, 2019
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
b76c61e
[SofaKernel] Refactor the MutationListener, & Node's listerner's noti…
marques-bruno Feb 5, 2019
e2542f4
[SofaKernel] Various improvements to MutationListener's API
marques-bruno Feb 5, 2019
1625aa2
Fixing compliant build, caused by breaking MutationListener modifs
marques-bruno Feb 6, 2019
ed8e080
Using bool return types in doAddObject / doRemoveObject
marques-bruno Feb 6, 2019
656e1ee
fix bad function signatures
marques-bruno Feb 6, 2019
7ae8e66
Merge branch 'master' into clean_mutationListener
marques-bruno Feb 6, 2019
adc794a
[MutationListener] Pass delegates from virtual pure methods to simple…
marques-bruno Feb 6, 2019
7591bee
ADD forgotten file from previous commit...
marques-bruno Feb 6, 2019
e5540a4
Merging master (#22)
marques-bruno Feb 11, 2019
ce5ca0c
Merge branch 'master' into clean_mutationListener
marques-bruno Feb 12, 2019
d07f7d4
[SofaKernel][Test] MutationListener: FIX: behavior of remove / move +…
marques-bruno Feb 22, 2019
d86873b
Merge branch 'clean_mutationListener' into dev
marques-bruno Feb 25, 2019
d7163ba
renaming `event` delegates to 'onXXXX' instead of 'doXXX'
marques-bruno Feb 25, 2019
0cfe490
Merge branch 'clean_mutationListener' into dev
marques-bruno Feb 25, 2019
9af2268
[MutationListener] Rename methods to match work done in SofaQtQuick
marques-bruno Feb 28, 2019
ac4cd5d
Merge branch 'clean_mutationListener' of github.com:SofaDefrost/sofa …
marques-bruno Mar 1, 2019
83e02df
[MutationListener] Rename methods to match work done in SofaQtQuick
marques-bruno Feb 28, 2019
9f99eca
Merge branch 'master' of github.com:SofaDefrost/sofa
marques-bruno Mar 1, 2019
9bd2f9c
Merge branch 'master' of github.com:sofa-framework/sofa into dev
marques-bruno Mar 1, 2019
47e4320
Merge branch 'master' of github.com:sofa-framework/sofa into clean_mu…
marques-bruno Mar 1, 2019
2a9cac4
[SofaKernel] MutationListener: readapted tests + reintroducing move n…
marques-bruno Mar 4, 2019
2519837
Merge remote-tracking branch 'upstream/master' into dev
damienmarchal Mar 5, 2019
1fd3a18
[SofaKernel] FIX: Wide MutationListener refactoring
marques-bruno Mar 6, 2019
b160f7b
Merge branch 'dev' of github.com:SofaDefrost/sofa into dev
marques-bruno Mar 6, 2019
4a73278
[SofaKernel] FIX: Wide MutationListener refactoring
marques-bruno Mar 6, 2019
c5314ba
[SofaKernel] FIX: small build error in Node.cpp
marques-bruno Mar 6, 2019
0ea42fc
[SofaKernel] FIX: compile error...
marques-bruno Mar 6, 2019
c77a773
[SofaSimulation] ADD: restore multi-parent moveChild method in Node, …
marques-bruno Mar 7, 2019
a85b2b9
Merge branch 'master' of github.com:sofa-framework/sofa
marques-bruno Mar 11, 2019
4e5b9e1
Merge branch 'master' into dev
marques-bruno Mar 11, 2019
fd80a8e
Merge branch 'dev' into clean_mutationListener
marques-bruno Mar 11, 2019
dae4910
Merge branch 'clean_mutationListener' of github.com:SofaDefrost/sofa …
marques-bruno Mar 11, 2019
88d30f0
FIX: removing POC code in Node & Simulation (notifyStepXXX)
marques-bruno Mar 11, 2019
03bc04e
[SofaKernel] Fix compile errors in DAGNode
marques-bruno Mar 11, 2019
38d865d
[SofaKernel] REMOVE POC code that wasn't supposed to be pushed...
marques-bruno Mar 19, 2019
a0faaa1
[MutationListener] Renaming onXXXBegin to onBeginXXX to match notify …
marques-bruno Mar 20, 2019
3980f49
[tests] FIX: MutationListener's tests
marques-bruno Mar 22, 2019
29d52ef
Merge branch 'master' of github.com:sofa-framework/sofa into clean_mu…
marques-bruno Mar 29, 2019
06bf4db
FIX: Link error on Windows: moving definition in .cpp
marques-bruno Apr 4, 2019
81bd6ec
Merge branch 'master' of github.com:sofa-framework/sofa into clean_mu…
marques-bruno Apr 8, 2019
d884b75
[SofaKernel] Reverting bad commit...
marques-bruno Apr 8, 2019
597133d
FIX: reimplementation of the CollisionGroupManager
marques-bruno Apr 10, 2019
5ca50a6
Merge branch 'master' into clean_mutationListener
marques-bruno Apr 17, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion SofaKernel/framework/sofa/core/objectmodel/BaseContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class SOFA_CORE_API BaseContext : public virtual Base

protected:
BaseContext();
~BaseContext() override;
virtual ~BaseContext() override;

private:
BaseContext(const BaseContext&);
Expand Down
2 changes: 1 addition & 1 deletion SofaKernel/framework/sofa/core/objectmodel/BaseNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class SOFA_CORE_API BaseNode : public virtual Base
virtual void removeChild(BaseNode::SPtr node) = 0;

/// Move a node from another node
virtual void moveChild(BaseNode::SPtr node) = 0;
virtual void moveChild(BaseNode::SPtr node, BaseNode::SPtr prev_parent) = 0;

/// Add a generic object
virtual bool addObject(BaseObject::SPtr obj) = 0;
Expand Down
2 changes: 1 addition & 1 deletion SofaKernel/framework/sofa/core/objectmodel/BaseObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ BaseObject* BaseObject::getSlave(const std::string& name) const
if ((*iSlaves)->getName() == name)
return iSlaves->get();
}
return NULL;
return nullptr;
}

void BaseObject::addSlave(BaseObject::SPtr s)
Expand Down
2 changes: 1 addition & 1 deletion SofaKernel/framework/sofa/core/objectmodel/Context.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class SOFA_CORE_API Context : public BaseContext

protected:
Context();
~Context() override
virtual ~Context() override
{}
public:

Expand Down
4 changes: 2 additions & 2 deletions SofaKernel/framework/sofa/helper/system/FileRepository.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -275,11 +275,11 @@ void FileRepository::print()
const std::string FileRepository::getPathsJoined()
{
std::ostringstream imploded;
char* delim = ":";
std::string delim = ":";
#ifdef WIN32
delim = ";";
#endif
std::copy(vpath.begin(), vpath.end(), std::ostream_iterator<std::string>(imploded, delim));
std::copy(vpath.begin(), vpath.end(), std::ostream_iterator<std::string>(imploded, delim.c_str()));
std::string implodedStr = imploded.str();
implodedStr = implodedStr.substr(0, implodedStr.size()-1); // remove trailing separator
return implodedStr;
Expand Down
96 changes: 49 additions & 47 deletions SofaKernel/framework/sofa/simulation/MutationListener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,80 +29,82 @@ namespace sofa
namespace simulation
{

MutationListener::~MutationListener() {}

MutationListener::~MutationListener()
void MutationListener::sleepChanged(Node *node) { SOFA_UNUSED(node); }

void MutationListener::onAddChildBegin(Node *parent, Node *child)
{
SOFA_UNUSED(parent);
SOFA_UNUSED(child);
}

void MutationListener::addChild(Node* /*parent*/, Node* child)
void MutationListener::onRemoveChildBegin(Node *parent, Node *child)
{
child->addListener(this);
for(Node::ObjectIterator it = child->object.begin(); it != child->object.end(); ++it)
addObject(child, it->get());
for(Node::ChildIterator it = child->child.begin(); it != child->child.end(); ++it)
addChild(child, it->get());
SOFA_UNUSED(parent);
SOFA_UNUSED(child);
}

void MutationListener::removeChild(Node* /*parent*/, Node* child)
void MutationListener::onAddObjectBegin(Node *parent,
core::objectmodel::BaseObject *object)
{
for(Node::ObjectIterator it = child->object.begin(); it != child->object.end(); ++it)
removeObject(child, it->get());
for(Node::ChildIterator it = child->child.begin(); it != child->child.end(); ++it)
removeChild(child, it->get());
child->removeListener(this);
SOFA_UNUSED(parent);
SOFA_UNUSED(object);
}

void MutationListener::addObject(Node* /*parent*/, core::objectmodel::BaseObject* object)
void MutationListener::onRemoveObjectBegin(Node *parent,
core::objectmodel::BaseObject *object)
{
const core::objectmodel::BaseObject::VecSlaves& slaves = object->getSlaves();
for (unsigned int i=0; i<slaves.size(); ++i)
addSlave(object, slaves[i].get());
SOFA_UNUSED(parent);
SOFA_UNUSED(object);
}

void MutationListener::removeObject(Node* /*parent*/, core::objectmodel::BaseObject* object)
void MutationListener::onAddSlaveBegin(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave)
{
const core::objectmodel::BaseObject::VecSlaves& slaves = object->getSlaves();
for (unsigned int i=0; i<slaves.size(); ++i)
removeSlave(object, slaves[i].get());
SOFA_UNUSED(master);
SOFA_UNUSED(slave);
}

void MutationListener::moveChild(Node* previous, Node* parent, Node* child)
void MutationListener::onRemoveSlaveBegin(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave)
{
removeChild(previous, child);
addChild(parent, child);
SOFA_UNUSED(master);
SOFA_UNUSED(slave);
}

void MutationListener::moveObject(Node* previous, Node* parent, core::objectmodel::BaseObject* object)
void MutationListener::onAddChildEnd(Node *parent, Node *child)
{
removeObject(previous, object);
addObject(parent, object);
SOFA_UNUSED(parent);
SOFA_UNUSED(child);
}

void MutationListener::addSlave(core::objectmodel::BaseObject* /*master*/, core::objectmodel::BaseObject* slave)
void MutationListener::onRemoveChildEnd(Node *parent, Node *child)
{
const core::objectmodel::BaseObject::VecSlaves& slaves = slave->getSlaves();
for (unsigned int i=0; i<slaves.size(); ++i)
addSlave(slave, slaves[i].get());
SOFA_UNUSED(parent);
SOFA_UNUSED(child);
}

void MutationListener::removeSlave(core::objectmodel::BaseObject* /*master*/, core::objectmodel::BaseObject* slave)
void MutationListener::onAddObjectEnd(Node *parent,
core::objectmodel::BaseObject *object)
{
const core::objectmodel::BaseObject::VecSlaves& slaves = slave->getSlaves();
for (unsigned int i=0; i<slaves.size(); ++i)
removeSlave(slave, slaves[i].get());
SOFA_UNUSED(parent);
SOFA_UNUSED(object);
}

void MutationListener::moveSlave(core::objectmodel::BaseObject* previousMaster, core::objectmodel::BaseObject* master, core::objectmodel::BaseObject* slave)
void MutationListener::onRemoveObjectEnd(Node *parent,
core::objectmodel::BaseObject *object)
{
removeSlave(previousMaster, slave);
addSlave(master, slave);
SOFA_UNUSED(parent);
SOFA_UNUSED(object);
}

void MutationListener::sleepChanged(Node* /*node*/)
void MutationListener::onAddSlaveEnd(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave)
{
SOFA_UNUSED(master);
SOFA_UNUSED(slave);
}
void MutationListener::onRemoveSlaveEnd(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave)
{
SOFA_UNUSED(master);
SOFA_UNUSED(slave);
}

} // namespace simulation

} // namespace sofa

40 changes: 27 additions & 13 deletions SofaKernel/framework/sofa/simulation/MutationListener.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
#ifndef SOFA_SIMULATION_CORE_MUTATIONLISTENER_H
#define SOFA_SIMULATION_CORE_MUTATIONLISTENER_H

#include <sofa/simulation/simulationcore.h>
#include <sofa/core/objectmodel/BaseObject.h>
#include <sofa/simulation/simulationcore.h>

namespace sofa
{
Expand All @@ -33,31 +33,45 @@ namespace simulation

class Node;

///Generic API to handle mutations of the graph
/// Generic API to handle mutations of the graph
class SOFA_SIMULATION_CORE_API MutationListener
{
public:
public:
virtual ~MutationListener();

virtual void addChild(Node* parent, Node* child);
virtual void sleepChanged(Node *node);

virtual void onAddChildBegin(Node *parent, Node *child);

virtual void onRemoveChildBegin(Node *parent, Node *child);

virtual void onAddObjectBegin(Node *parent,
core::objectmodel::BaseObject *object);

virtual void removeChild(Node* parent, Node* child);
virtual void onRemoveObjectBegin(Node *parent,
core::objectmodel::BaseObject *object);

virtual void moveChild(Node* previous, Node* parent, Node* child);
virtual void onAddSlaveBegin(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave);

virtual void addObject(Node* parent, core::objectmodel::BaseObject* object);
virtual void onRemoveSlaveBegin(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave);

virtual void removeObject(Node* parent, core::objectmodel::BaseObject* object);
virtual void onAddChildEnd(Node *parent, Node *child);

virtual void moveObject(Node* previous, Node* parent, core::objectmodel::BaseObject* object);
virtual void onRemoveChildEnd(Node *parent, Node *child);

virtual void addSlave(core::objectmodel::BaseObject* master, core::objectmodel::BaseObject* slave);
virtual void onAddObjectEnd(Node *parent,
core::objectmodel::BaseObject *object);

virtual void removeSlave(core::objectmodel::BaseObject* master, core::objectmodel::BaseObject* slave);
virtual void onRemoveObjectEnd(Node *parent,
core::objectmodel::BaseObject *object);

virtual void moveSlave(core::objectmodel::BaseObject* previousMaster, core::objectmodel::BaseObject* master, core::objectmodel::BaseObject* slave);
virtual void onAddSlaveEnd(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave);

virtual void sleepChanged(Node* node);
virtual void onRemoveSlaveEnd(core::objectmodel::BaseObject *master,
core::objectmodel::BaseObject *slave);
};

} // namespace simulation
Expand Down
Loading