← Back to team overview

yade-dev team mailing list archive

[svn] r1594 - in trunk: core extra extra/usct lib/serialization pkg/common/Engine/DeusExMachina

 

Author: eudoxos
Date: 2008-12-08 10:17:00 +0100 (Mon, 08 Dec 2008)
New Revision: 1594

Modified:
   trunk/core/Body.cpp
   trunk/core/Body.hpp
   trunk/core/BodyContainer.cpp
   trunk/core/BodyContainer.hpp
   trunk/core/BoundingVolume.cpp
   trunk/core/BoundingVolume.hpp
   trunk/core/DeusExMachina.cpp
   trunk/core/DeusExMachina.hpp
   trunk/core/DisplayParameters.hpp
   trunk/core/Engine.hpp
   trunk/core/EngineUnit.hpp
   trunk/core/EngineUnit1D.hpp
   trunk/core/EngineUnit2D.hpp
   trunk/core/FileGenerator.cpp
   trunk/core/FileGenerator.hpp
   trunk/core/FrontEnd.hpp
   trunk/core/GeometricalModel.cpp
   trunk/core/GeometricalModel.hpp
   trunk/core/InteractingGeometry.cpp
   trunk/core/InteractingGeometry.hpp
   trunk/core/Interaction.cpp
   trunk/core/Interaction.hpp
   trunk/core/InteractionContainer.cpp
   trunk/core/InteractionContainer.hpp
   trunk/core/InteractionGeometry.hpp
   trunk/core/MetaBody.cpp
   trunk/core/MetaBody.hpp
   trunk/core/MetaEngine.cpp
   trunk/core/MetaEngine.hpp
   trunk/core/MetaEngine1D.hpp
   trunk/core/MetaEngine2D.hpp
   trunk/core/NullGUI.hpp
   trunk/core/PhysicalAction.hpp
   trunk/core/PhysicalActionContainer.cpp
   trunk/core/PhysicalActionContainer.hpp
   trunk/core/PhysicalParameters.hpp
   trunk/core/Preferences.cpp
   trunk/core/Preferences.hpp
   trunk/core/RenderingEngine.hpp
   trunk/core/TimeStepper.hpp
   trunk/extra/Brefcom.hpp
   trunk/extra/usct/UniaxialStrainControlledTest.hpp
   trunk/lib/serialization/Serializable.hpp
   trunk/pkg/common/Engine/DeusExMachina/Se3Interpolator.hpp
Log:
1. Modify REGISTER_ATTRIBUTES macro so that it work with or without base class given. Change all headers in core to use that. It should help us if we ever make the transition to boost::serialization.
2. User REGISTER_CLASS_AND_BASE instead of REGISTER_CLASS_NAME and REGISTER_BASE_CLASS in core and at a few other places.



Modified: trunk/core/Body.cpp
===================================================================
--- trunk/core/Body.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Body.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -43,17 +43,3 @@
 {
 }
 
-
-void Body::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(id);
-	REGISTER_ATTRIBUTE(groupMask);
-	REGISTER_ATTRIBUTE(isDynamic); // FIXME? : only used for interaction : no collision between 2 non dynamic objects
-
-	REGISTER_ATTRIBUTE(physicalParameters);
-	REGISTER_ATTRIBUTE(geometricalModel);
-	REGISTER_ATTRIBUTE(interactingGeometry);
-	REGISTER_ATTRIBUTE(boundingVolume);
-	REGISTER_ATTRIBUTE(clumpId);
-}
-

Modified: trunk/core/Body.hpp
===================================================================
--- trunk/core/Body.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Body.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -89,8 +89,17 @@
 
 		// Serialization
 	protected:
-		void registerAttributes();
-	REGISTER_CLASS_NAME(Body);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+		REGISTER_ATTRIBUTES(/*no base*/,
+			(id)
+			(groupMask)
+			(isDynamic) // FIXME? : only used for interaction : no collision between 2 non dynamic objects
+			(physicalParameters)
+			(geometricalModel)
+			(interactingGeometry)
+			(boundingVolume)
+			(clumpId)
+		);
+
+	REGISTER_CLASS_AND_BASE(Body,Serializable);
 };
 REGISTER_SERIALIZABLE(Body);

Modified: trunk/core/BodyContainer.cpp
===================================================================
--- trunk/core/BodyContainer.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/BodyContainer.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -23,12 +23,6 @@
 }
 
 
-void BodyContainer::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(body);
-}
-
-
 void BodyContainer::preProcessAttributes(bool deserializing)
 {
 	if(deserializing)

Modified: trunk/core/BodyContainer.hpp
===================================================================
--- trunk/core/BodyContainer.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/BodyContainer.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -99,14 +99,13 @@
 	protected :
 		void setId(shared_ptr<Body>& , unsigned int);
 
-	REGISTER_CLASS_NAME(BodyContainer);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_CLASS_AND_BASE(BodyContainer,Serializable);
 
 	// local storage for uniform serialization of all possible container concrete implementations.
 	private :
 		vector<shared_ptr<Body> > body; 
 	public :
-		virtual void registerAttributes();
+		REGISTER_ATTRIBUTES(/*no base*/,(body));
 	protected :
 		virtual void preProcessAttributes(bool deserializing);
 		virtual void postProcessAttributes(bool deserializing);

Modified: trunk/core/BoundingVolume.cpp
===================================================================
--- trunk/core/BoundingVolume.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/BoundingVolume.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -9,8 +9,4 @@
 #include "BoundingVolume.hpp"
 
 
-void BoundingVolume::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(diffuseColor);
-}
 

Modified: trunk/core/BoundingVolume.hpp
===================================================================
--- trunk/core/BoundingVolume.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/BoundingVolume.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -26,9 +26,8 @@
 				,max;			/// Maximum of the bounding volume
 		BoundingVolume(): diffuseColor(Vector3r(1,1,1)), min(Vector3r(0,0,0)), max(Vector3r(0,0,0)) {}
 
-		void registerAttributes();
-	REGISTER_CLASS_NAME(BoundingVolume);
-	REGISTER_BASE_CLASS_NAME(Serializable Indexable);
+	REGISTER_ATTRIBUTES(/*no base*/,(diffuseColor));
+	REGISTER_CLASS_AND_BASE(BoundingVolume,Serializable Indexable);
 	REGISTER_INDEX_COUNTER(BoundingVolume);
 };
 REGISTER_SERIALIZABLE(BoundingVolume);

Modified: trunk/core/DeusExMachina.cpp
===================================================================
--- trunk/core/DeusExMachina.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/DeusExMachina.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -9,14 +9,8 @@
 #include "DeusExMachina.hpp"
 
 DeusExMachina::DeusExMachina() : Engine() {
-	subscribedBodies.resize(0);
+	subscribedBodies.resize(0); // what is this good for?
 }
-
-void DeusExMachina::registerAttributes() {
-	Engine::registerAttributes();
-	REGISTER_ATTRIBUTE(subscribedBodies);
-}
-
 void DeusExMachina::action(MetaBody* b) {
 	this->applyCondition(b);
 }

Modified: trunk/core/DeusExMachina.hpp
===================================================================
--- trunk/core/DeusExMachina.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/DeusExMachina.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -31,9 +31,8 @@
 		virtual void applyCondition(MetaBody*) { throw; };
 	//	virtual bool isActivated();
 	protected :
-		void registerAttributes();
-	REGISTER_CLASS_NAME(DeusExMachina);
-	REGISTER_BASE_CLASS_NAME(Engine);
+	REGISTER_ATTRIBUTES(Engine,(subscribedBodies));
+	REGISTER_CLASS_AND_BASE(DeusExMachina,Engine);
 };
 
 REGISTER_SERIALIZABLE(DeusExMachina);

Modified: trunk/core/DisplayParameters.hpp
===================================================================
--- trunk/core/DisplayParameters.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/DisplayParameters.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -21,8 +21,7 @@
 		void setValue(std::string displayType, std::string value){assert(values.size()==displayTypes.size()); vector<string>::iterator I=std::find(displayTypes.begin(),displayTypes.end(),displayType); if(I==displayTypes.end()){displayTypes.push_back(displayType); values.push_back(value);} else {values[std::distance(displayTypes.begin(),I)]=value;};}
 	DisplayParameters(){}
 	virtual ~DisplayParameters(){}
-	virtual void registerAttributes(){ REGISTER_ATTRIBUTE(displayTypes); REGISTER_ATTRIBUTE(values); }
-	REGISTER_CLASS_NAME(DisplayParameters);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_ATTRIBUTES(/*no base*/,(displayTypes)(values));
+	REGISTER_CLASS_AND_BASE(DisplayParameters,Serializable);
 };
 REGISTER_SERIALIZABLE(DisplayParameters);

Modified: trunk/core/Engine.hpp
===================================================================
--- trunk/core/Engine.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Engine.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -27,11 +27,9 @@
 		virtual void action(MetaBody*) { throw; };
 		/* returns all BodyExternalVariable's (Bex; formerly PhysicalActions) that this engine needs */
 		virtual list<string> getNeededBex(){return list<string>();}
-		virtual void registerAttributes(){REGISTER_ATTRIBUTE(label);}
+	REGISTER_ATTRIBUTES(/*no base*/,(label));
+	REGISTER_CLASS_AND_BASE(Engine,Serializable);
 
-	REGISTER_CLASS_NAME(Engine);
-	REGISTER_BASE_CLASS_NAME(Serializable);
-
 };
 
 REGISTER_SERIALIZABLE(Engine);

Modified: trunk/core/EngineUnit.hpp
===================================================================
--- trunk/core/EngineUnit.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/EngineUnit.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -17,8 +17,7 @@
 {
 	public: virtual vector<std::string> getFunctorTypes(){throw;}
 		virtual list<string> getNeededBex(){return list<string>();}
-	REGISTER_CLASS_NAME(EngineUnit);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_CLASS_AND_BASE(EngineUnit,Serializable);
 };
 
 REGISTER_SERIALIZABLE(EngineUnit);

Modified: trunk/core/EngineUnit1D.hpp
===================================================================
--- trunk/core/EngineUnit1D.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/EngineUnit1D.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -26,8 +26,7 @@
 	public:
 		virtual std::string get1DFunctorType1(void){throw runtime_error("Class "+this->getClassName()+" did not use FUNCTOR1D to declare its argument type?"); }
 		virtual vector<string> getFunctorTypes(void){vector<string> ret; ret.push_back(get1DFunctorType1()); return ret;};
-	REGISTER_CLASS_NAME(EngineUnit1D);
-	REGISTER_BASE_CLASS_NAME(EngineUnit FunctorWrapper);
+	REGISTER_CLASS_AND_BASE(EngineUnit1D,EngineUnit FunctorWrapper);
 };
 
 #endif // ENGINEUNIT1D_HPP

Modified: trunk/core/EngineUnit2D.hpp
===================================================================
--- trunk/core/EngineUnit2D.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/EngineUnit2D.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -28,8 +28,7 @@
 		virtual std::string get2DFunctorType1(void){throw runtime_error("Class "+this->getClassName()+" did not use FUNCTOR2D to declare its argument types?");}
 		virtual std::string get2DFunctorType2(void){throw runtime_error("Class "+this->getClassName()+" did not use FUNCTOR2D to declare its argument types?");}
 		virtual vector<string> getFunctorTypes(){vector<string> ret; ret.push_back(get2DFunctorType1()); ret.push_back(get2DFunctorType2()); return ret;};
-	REGISTER_CLASS_NAME(EngineUnit2D);
-	REGISTER_BASE_CLASS_NAME(EngineUnit FunctorWrapper);
+	REGISTER_CLASS_AND_BASE(EngineUnit2D,EngineUnit FunctorWrapper);
 };
 
 #endif // ENGINEUNIT2D_HPP

Modified: trunk/core/FileGenerator.cpp
===================================================================
--- trunk/core/FileGenerator.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/FileGenerator.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -36,19 +36,6 @@
 }
 
 
-void FileGenerator::postProcessAttributes(bool) 
-{
-
-}
-
-
-void FileGenerator::registerAttributes() 
-{	
-	REGISTER_ATTRIBUTE(outputFileName);
-	REGISTER_ATTRIBUTE(serializationDynlib);
-}
-
-
 bool FileGenerator::generate() 
 {
 	message="FileGenerator (base class) generates nothing.";

Modified: trunk/core/FileGenerator.hpp
===================================================================
--- trunk/core/FileGenerator.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/FileGenerator.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -40,15 +40,13 @@
 		virtual void singleAction();
 
 	protected :
-		//! Returns whether the generation was successful; message for user is in FileGenerator::message
-		virtual bool generate();
+	//! Returns whether the generation was successful; message for user is in FileGenerator::message
+	virtual bool generate();
+	virtual void postProcessAttributes(){};
 
-		virtual void postProcessAttributes(bool);
-		virtual void registerAttributes();
-
+	REGISTER_ATTRIBUTES(/*no base*/,(outputFileName)(serializationDynlib));
 	DECLARE_LOGGER;
-	REGISTER_CLASS_NAME(FileGenerator);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_CLASS_AND_BASE(FileGenerator,Serializable);
 };
 
 REGISTER_SERIALIZABLE(FileGenerator);

Modified: trunk/core/FrontEnd.hpp
===================================================================
--- trunk/core/FrontEnd.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/FrontEnd.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -22,8 +22,7 @@
 
 		virtual int run(int , char * []) { return -1;};
 
-	REGISTER_CLASS_NAME(FrontEnd);
-	REGISTER_BASE_CLASS_NAME(Factorable);
+	REGISTER_CLASS_AND_BASE(FrontEnd,Factorable);
 };
 
 REGISTER_FACTORABLE(FrontEnd);

Modified: trunk/core/GeometricalModel.cpp
===================================================================
--- trunk/core/GeometricalModel.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/GeometricalModel.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -10,11 +10,4 @@
 
 #include "GeometricalModel.hpp"
 
-void GeometricalModel::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(diffuseColor);
-	REGISTER_ATTRIBUTE(wire);
-	REGISTER_ATTRIBUTE(visible);
-	REGISTER_ATTRIBUTE(shadowCaster);
-}
 

Modified: trunk/core/GeometricalModel.hpp
===================================================================
--- trunk/core/GeometricalModel.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/GeometricalModel.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -28,11 +28,8 @@
 
 		GeometricalModel(): visible(true),wire(false),shadowCaster(false),diffuseColor(Vector3r(1,1,1)){}
 
-	protected : 
-		void registerAttributes();
-
-	REGISTER_CLASS_NAME(GeometricalModel);
-	REGISTER_BASE_CLASS_NAME(Serializable Indexable);
+	REGISTER_ATTRIBUTES(/*no base*/,(visible)(wire)(shadowCaster)(diffuseColor));
+	REGISTER_CLASS_AND_BASE(GeometricalModel,Serializable Indexable);
 	REGISTER_INDEX_COUNTER(GeometricalModel);
 };
 

Modified: trunk/core/InteractingGeometry.cpp
===================================================================
--- trunk/core/InteractingGeometry.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/InteractingGeometry.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -10,7 +10,3 @@
 
 #include "InteractingGeometry.hpp"
 
-void InteractingGeometry::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(diffuseColor);
-}

Modified: trunk/core/InteractingGeometry.hpp
===================================================================
--- trunk/core/InteractingGeometry.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/InteractingGeometry.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -30,11 +30,8 @@
 					// bool wire; even though GeometricalModel has bool wire ?
 	
 /// Serialization
-	protected :
-		void registerAttributes();
-	REGISTER_CLASS_NAME(InteractingGeometry);
-	REGISTER_BASE_CLASS_NAME(Serializable Indexable);
-	
+	REGISTER_ATTRIBUTES(/*no base*/,(diffuseColor));
+	REGISTER_CLASS_AND_BASE(InteractingGeometry,Serializable Indexable);
 /// Indexable
 	REGISTER_INDEX_COUNTER(InteractingGeometry);
 };

Modified: trunk/core/Interaction.cpp
===================================================================
--- trunk/core/Interaction.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Interaction.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -32,16 +32,6 @@
 }
 
 
-void Interaction::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(id1);
-	REGISTER_ATTRIBUTE(id2);
-	REGISTER_ATTRIBUTE(isNew);
-	REGISTER_ATTRIBUTE(isReal);
-	REGISTER_ATTRIBUTE(interactionGeometry);
-	REGISTER_ATTRIBUTE(interactionPhysics);
-}
-
 void Interaction::swapOrder(){
 	if(interactionGeometry || interactionPhysics || !isNew){
 		throw std::logic_error("Bodies in interaction cannot be swapped if !isNew, have interactionGeometry or have interactionPhysics.");

Modified: trunk/core/Interaction.hpp
===================================================================
--- trunk/core/Interaction.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Interaction.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -46,10 +46,15 @@
 			bool maskAnyOK(int mask, MetaBody* rootBody=NULL){return (mask==0) || Body::byId(id1,rootBody)->maskOK(mask) || Body::byId(id2,rootBody)->maskOK(mask);}
 		#endif
 
-	protected :
-		void registerAttributes();
-	REGISTER_CLASS_NAME(Interaction);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_ATTRIBUTES(/*no base*/,
+		(id1)
+		(id2)
+		(isNew)
+		(isReal)
+		(interactionGeometry)
+		(interactionPhysics)
+	);
+	REGISTER_CLASS_AND_BASE(Interaction,Serializable);
 };
 
 REGISTER_SERIALIZABLE(Interaction);

Modified: trunk/core/InteractionContainer.cpp
===================================================================
--- trunk/core/InteractionContainer.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/InteractionContainer.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -12,12 +12,7 @@
 #include "Interaction.hpp"
 
 
-void InteractionContainer::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(interaction);
-}
 
-
 void InteractionContainer::preProcessAttributes(bool deserializing)
 {
 	if(deserializing)

Modified: trunk/core/InteractionContainer.hpp
===================================================================
--- trunk/core/InteractionContainer.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/InteractionContainer.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -105,11 +105,10 @@
 		vector<shared_ptr<Interaction> > interaction;
 
 	protected :
-		virtual void registerAttributes();
 		virtual void preProcessAttributes(bool deserializing);
 		virtual void postProcessAttributes(bool deserializing);
-	REGISTER_CLASS_NAME(InteractionContainer);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_ATTRIBUTES(/*no base*/,(interaction));
+	REGISTER_CLASS_AND_BASE(InteractionContainer,Serializable);
 };
 
 REGISTER_SERIALIZABLE(InteractionContainer);

Modified: trunk/core/InteractionGeometry.hpp
===================================================================
--- trunk/core/InteractionGeometry.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/InteractionGeometry.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -17,7 +17,6 @@
 {
 	REGISTER_CLASS_NAME(InteractionGeometry);
 	REGISTER_BASE_CLASS_NAME(Serializable Indexable);
-	
 	REGISTER_INDEX_COUNTER(InteractionGeometry);
 };
 

Modified: trunk/core/MetaBody.cpp
===================================================================
--- trunk/core/MetaBody.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/MetaBody.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -68,25 +68,7 @@
 }
 
 
-void MetaBody::registerAttributes()
-{
-	Body::registerAttributes();
-	REGISTER_ATTRIBUTE(tags);
-	REGISTER_ATTRIBUTE(engines);
-	REGISTER_ATTRIBUTE(initializers);
-	REGISTER_ATTRIBUTE(bodies);
-	REGISTER_ATTRIBUTE(transientInteractions);
-	REGISTER_ATTRIBUTE(persistentInteractions);
-	REGISTER_ATTRIBUTE(physicalActions); // FIXME - needed or not ? - Olivier : yes it is needed if there is no default initialization into constructor
-	REGISTER_ATTRIBUTE(miscParams);
-	REGISTER_ATTRIBUTE(dispParams);
-	REGISTER_ATTRIBUTE(dt);
-	REGISTER_ATTRIBUTE(currentIteration);
-	REGISTER_ATTRIBUTE(simulationTime);
-	REGISTER_ATTRIBUTE(stopAtIteration);
-}
 
-
 void MetaBody::moveToNextTimeStep()
 {
 	if(needsInitializers){

Modified: trunk/core/MetaBody.hpp
===================================================================
--- trunk/core/MetaBody.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/MetaBody.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -50,9 +50,22 @@
 /// Serialization
 	protected :
 		virtual void postProcessAttributes(bool deserializing);
-		virtual void registerAttributes();
-	REGISTER_CLASS_NAME(MetaBody);
-	REGISTER_BASE_CLASS_NAME(Body);
+	REGISTER_ATTRIBUTES(Body,
+		(tags)
+		(engines)
+		(initializers)
+		(bodies)
+		(transientInteractions)
+		(persistentInteractions)
+		(physicalActions) // FIXME - needed or not ? - Olivier : yes it is needed if there is no default initialization into constructor
+		(miscParams)
+		(dispParams)
+		(dt)
+		(currentIteration)
+		(simulationTime)
+		(stopAtIteration)
+	);
+	REGISTER_CLASS_AND_BASE(MetaBody,Body);
 };
 
 REGISTER_SERIALIZABLE(MetaBody);

Modified: trunk/core/MetaEngine.cpp
===================================================================
--- trunk/core/MetaEngine.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/MetaEngine.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -41,14 +41,7 @@
 }
 
 
-void MetaEngine::registerAttributes()
-{
-	Engine::registerAttributes();
-	REGISTER_ATTRIBUTE(functorNames);
-	REGISTER_ATTRIBUTE(functorArguments);
-}
 
-
 vector<vector<string> >& MetaEngine::getFunctorNames()
 {
 	return functorNames;

Modified: trunk/core/MetaEngine.hpp
===================================================================
--- trunk/core/MetaEngine.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/MetaEngine.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -46,11 +46,10 @@
 		virtual int getDimension() { throw; };
 		virtual string getBaseClassType(unsigned int ) { throw; };
 
-	protected :
-		virtual void registerAttributes();
+	protected:
 		virtual void postProcessAttributes(bool deserializing);
-	REGISTER_CLASS_NAME(MetaEngine);
-	REGISTER_BASE_CLASS_NAME(Engine);
+	REGISTER_ATTRIBUTES(Engine,(functorNames)(functorArguments));
+	REGISTER_CLASS_AND_BASE(MetaEngine,Engine);
 };
 
 REGISTER_SERIALIZABLE(MetaEngine);

Modified: trunk/core/MetaEngine1D.hpp
===================================================================
--- trunk/core/MetaEngine1D.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/MetaEngine1D.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -80,10 +80,6 @@
 		}
 
 	protected :
-		void registerAttributes()
-		{
-			MetaEngine::registerAttributes();
-		}
 		void postProcessAttributes(bool deserializing)
 		{
 			MetaEngine::postProcessAttributes(deserializing);
@@ -93,8 +89,8 @@
 					add1DEntry(functorNames[i][0],functorNames[i][1],static_pointer_cast<EngineUnitType>(findFunctorArguments(functorNames[i][1])));	
 			}
 		}
-	REGISTER_CLASS_NAME(MetaEngine1D);
-	REGISTER_BASE_CLASS_NAME(MetaEngine DynLibDispatcher);
+	REGISTER_ATTRIBUTES(MetaEngine,);
+	REGISTER_CLASS_AND_BASE(MetaEngine1D,MetaEngine DynLibDispatcher);
 };
 
 #endif // METADISPATCHINGENGINE1D_HPP

Modified: trunk/core/MetaEngine2D.hpp
===================================================================
--- trunk/core/MetaEngine2D.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/MetaEngine2D.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -99,14 +99,9 @@
 					add2DEntry(functorNames[i][0],functorNames[i][1],functorNames[i][2],static_pointer_cast<EngineUnitType>(findFunctorArguments(functorNames[i][2])));
 			}
 		}
+	REGISTER_ATTRIBUTES(MetaEngine,);
+	REGISTER_CLASS_AND_BASE(MetaEngine2D,MetaEngine DynLibDispatcher);
 
-		void registerAttributes()
-		{
-			MetaEngine::registerAttributes();
-		}
-	REGISTER_CLASS_NAME(MetaEngine2D);
-	REGISTER_BASE_CLASS_NAME(MetaEngine DynLibDispatcher);
-
 };
 
 //REGISTER_SERIALIZABLE(MetaEngine2D);

Modified: trunk/core/NullGUI.hpp
===================================================================
--- trunk/core/NullGUI.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/NullGUI.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -36,8 +36,7 @@
 		virtual ~NullGUI ();
 		virtual int run(int argc, char *argv[]);
 	
-	REGISTER_CLASS_NAME(NullGUI);
-	REGISTER_BASE_CLASS_NAME(FrontEnd);
+	REGISTER_CLASS_AND_BASE(NullGUI,FrontEnd);
 };
 
 REGISTER_FACTORABLE(NullGUI);

Modified: trunk/core/PhysicalAction.hpp
===================================================================
--- trunk/core/PhysicalAction.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/PhysicalAction.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -28,12 +28,8 @@
 		virtual void reset() 				{throw;};
 		virtual shared_ptr<PhysicalAction> clone()	{throw;};
 	
-/// Serialization										///
-	REGISTER_CLASS_NAME(PhysicalAction);
-
-/// Indexable											///
 	REGISTER_INDEX_COUNTER(PhysicalAction);
-	REGISTER_BASE_CLASS_NAME(Serializable Indexable);
+	REGISTER_CLASS_AND_BASE(PhysicalAction,Serializable Indexable);
 };
 
 REGISTER_SERIALIZABLE(PhysicalAction);

Modified: trunk/core/PhysicalActionContainer.cpp
===================================================================
--- trunk/core/PhysicalActionContainer.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/PhysicalActionContainer.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -23,9 +23,3 @@
 
 }
 
-
-void PhysicalActionContainer::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(action);
-};
-

Modified: trunk/core/PhysicalActionContainer.hpp
===================================================================
--- trunk/core/PhysicalActionContainer.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/PhysicalActionContainer.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -104,11 +104,8 @@
 		virtual PhysicalActionContainer::iterator begin()			{throw;};
 		virtual PhysicalActionContainer::iterator end()			{throw;};
 
-/// Serialization										///
-	protected :
-		virtual void registerAttributes();
-	REGISTER_CLASS_NAME(PhysicalActionContainer);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_ATTRIBUTES(/*no base*/,(action));
+	REGISTER_CLASS_AND_BASE(PhysicalActionContainer,Serializable);
 
 	// local storage for uniform serialization of all possible container concrete implementations.
 	private	:

Modified: trunk/core/PhysicalParameters.hpp
===================================================================
--- trunk/core/PhysicalParameters.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/PhysicalParameters.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -24,14 +24,9 @@
 		static const unsigned DOF_XYZ=DOF_X|DOF_Y|DOF_Z; //! shorthand for all displacements blocked
 		static const unsigned DOF_RXRYRZ=DOF_RX|DOF_RY|DOF_RZ; //! shorthand for all rotations blocked
 		static unsigned axisDOF(int axis, bool rotationalDOF=false){return 1<<(axis+(rotationalDOF?3:0));} //! Return DOF_* constant for given axis∈{0,1,2} and rotationalDOF∈{false(default),true}; e.g. axisDOF(0,true)==DOF_RX
-	protected :
-		void registerAttributes(){
-			REGISTER_ATTRIBUTE(se3);
-			REGISTER_ATTRIBUTE(refSe3);
-			REGISTER_ATTRIBUTE(blockedDOFs);
-		}
-	REGISTER_CLASS_NAME(PhysicalParameters);
-	REGISTER_BASE_CLASS_NAME(Serializable Indexable);
+
+	REGISTER_ATTRIBUTES(/*no base*/,(se3)(refSe3)(blockedDOFs));
+	REGISTER_CLASS_AND_BASE(PhysicalParameters,Serializable Indexable);
 	REGISTER_INDEX_COUNTER(PhysicalParameters);
 };
 

Modified: trunk/core/Preferences.cpp
===================================================================
--- trunk/core/Preferences.cpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Preferences.cpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -14,11 +14,3 @@
 	version = 1;
 }
 
-
-void Preferences::registerAttributes()
-{
-	REGISTER_ATTRIBUTE(version);
-	REGISTER_ATTRIBUTE(dynlibDirectories);
-	REGISTER_ATTRIBUTE(defaultGUILibName);
-}
-

Modified: trunk/core/Preferences.hpp
===================================================================
--- trunk/core/Preferences.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/Preferences.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -25,11 +25,8 @@
 		string		 defaultGUILibName;
 		Preferences ();
 
-/// Serialization										///
-	protected :
-		void registerAttributes();
-	REGISTER_CLASS_NAME(Preferences);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_ATTRIBUTES(,(version)(dynlibDirectories)(defaultGUILibName));
+	REGISTER_CLASS_AND_BASE(Preferences,Serializable);
 };
 
 REGISTER_SERIALIZABLE(Preferences);

Modified: trunk/core/RenderingEngine.hpp
===================================================================
--- trunk/core/RenderingEngine.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/RenderingEngine.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -22,8 +22,7 @@
 		virtual void renderWithNames(const shared_ptr<MetaBody>& ) {throw;};
 		virtual void init() {throw;};
 
-	REGISTER_CLASS_NAME(RenderingEngine);
-	REGISTER_BASE_CLASS_NAME(Serializable);
+	REGISTER_CLASS_AND_BASE(RenderingEngine,Serializable);
 };
 
 REGISTER_SERIALIZABLE(RenderingEngine);

Modified: trunk/core/TimeStepper.hpp
===================================================================
--- trunk/core/TimeStepper.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/core/TimeStepper.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -30,8 +30,7 @@
 
 	protected :
 		virtual void registerAttributes();
-	REGISTER_CLASS_NAME(TimeStepper);
-	REGISTER_BASE_CLASS_NAME(StandAloneEngine);
+	REGISTER_CLASS_AND_BASE(TimeStepper,StandAloneEngine);
 };
 
 REGISTER_SERIALIZABLE(TimeStepper);

Modified: trunk/extra/Brefcom.hpp
===================================================================
--- trunk/extra/Brefcom.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/extra/Brefcom.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -29,10 +29,12 @@
 		void compute(MetaBody* rb, bool useMax=false);
 		virtual void action(MetaBody* rb){compute(rb,useMaxForce);}
 		BrefcomGlobalCharacteristics(){};
-	void registerAttributes(){ PeriodicEngine::registerAttributes(); REGISTER_ATTRIBUTE(unbalancedForce); REGISTER_ATTRIBUTE(useMaxForce);}
+	REGISTER_ATTRIBUTES(PeriodicEngine,
+		(unbalancedForce)
+		(useMaxForce)
+	);
 	DECLARE_LOGGER;
-	REGISTER_CLASS_NAME(BrefcomGlobalCharacteristics);
-	REGISTER_BASE_CLASS_NAME(PeriodicEngine);
+	REGISTER_CLASS_AND_BASE(BrefcomGlobalCharacteristics,PeriodicEngine);
 };
 REGISTER_SERIALIZABLE(BrefcomGlobalCharacteristics);
 
@@ -90,41 +92,37 @@
 		//	BrefcomContact(Real _E, Real _G, Real _tanFrictionAngle, Real _undamagedCohesion, Real _equilibriumDist, Real _crossSection, Real _epsCrackOnset, Real _epsFracture, Real _expBending, Real _xiShear, Real _tau=0, Real _expDmgRate=1): InteractionPhysics(), E(_E), G(_G), tanFrictionAngle(_tanFrictionAngle), undamagedCohesion(_undamagedCohesion), equilibriumDist(_equilibriumDist), crossSection(_crossSection), epsCrackOnset(_epsCrackOnset), epsFracture(_epsFracture), expBending(_expBending), xiShear(_xiShear), tau(_tau), expDmgRate(_expDmgRate) { epsT=Vector3r::ZERO; kappaD=0; isCohesive=false; neverDamage=false; omega=0; Fn=0; Fs=Vector3r::ZERO; /*TRVAR5(epsCrackOnset,epsFracture,Kn,crossSection,equilibriumDist); */ }
 		virtual ~BrefcomContact();
 
+		REGISTER_ATTRIBUTES(NormalShearInteraction,
+			(E)
+			(G)
+			(tanFrictionAngle)
+			(undamagedCohesion)
+			(crossSection)
+			(epsCrackOnset)
+			(epsFracture)
+			(omegaThreshold)
+			(xiShear)
+			(tau)
+			(expDmgRate)
+			(transStrainCoeff)
 
-		virtual void registerAttributes(){
-			NormalShearInteraction::registerAttributes();
-			REGISTER_ATTRIBUTE(E);
-			REGISTER_ATTRIBUTE(G);
-			REGISTER_ATTRIBUTE(tanFrictionAngle);
-			REGISTER_ATTRIBUTE(undamagedCohesion);
-			REGISTER_ATTRIBUTE(crossSection);
-			REGISTER_ATTRIBUTE(epsCrackOnset);
-			REGISTER_ATTRIBUTE(epsFracture);
-			REGISTER_ATTRIBUTE(omegaThreshold);
-			REGISTER_ATTRIBUTE(xiShear);
-			REGISTER_ATTRIBUTE(tau);
-			REGISTER_ATTRIBUTE(expDmgRate);
-			REGISTER_ATTRIBUTE(transStrainCoeff);
+			(kappaD)
+			(neverDamage)
+			(epsT)
+			(epsTrans)
 
-			REGISTER_ATTRIBUTE(kappaD);
-			REGISTER_ATTRIBUTE(neverDamage);
-			REGISTER_ATTRIBUTE(epsT);
-			REGISTER_ATTRIBUTE(epsTrans);
+			(isCohesive)
 
-			REGISTER_ATTRIBUTE(isCohesive);
-
-			// auxiliary params, to make them accessible from python
-			REGISTER_ATTRIBUTE(omega);
-			REGISTER_ATTRIBUTE(Fn);
-			REGISTER_ATTRIBUTE(Fs);
-			REGISTER_ATTRIBUTE(epsN);
-			REGISTER_ATTRIBUTE(sigmaN);
-			REGISTER_ATTRIBUTE(sigmaT);
-			REGISTER_ATTRIBUTE(relResidualStrength);
-		};
-
-	REGISTER_CLASS_NAME(BrefcomContact);
-	REGISTER_BASE_CLASS_NAME(NormalShearInteraction);
+			// auxiliary params to make them accessible from python
+			(omega)
+			(Fn)
+			(Fs)
+			(epsN)
+			(sigmaN)
+			(sigmaT)
+			(relResidualStrength)
+		);
+	REGISTER_CLASS_AND_BASE(BrefcomContact,NormalShearInteraction);
 	DECLARE_LOGGER;
 };
 REGISTER_SERIALIZABLE(BrefcomContact);
@@ -141,9 +139,8 @@
 		//! average damage including already deleted contacts
 		Real normDmg;
 		BrefcomPhysParams(): epsVolumetric(0.), numBrokenCohesive(0), numContacts(0), normDmg(0.) {createIndex();};
-		virtual void registerAttributes(){BodyMacroParameters::registerAttributes(); REGISTER_ATTRIBUTE(epsVolumetric); REGISTER_ATTRIBUTE(numBrokenCohesive); REGISTER_ATTRIBUTE(numContacts); REGISTER_ATTRIBUTE(normDmg); }
-		REGISTER_CLASS_NAME(BrefcomPhysParams);
-		REGISTER_BASE_CLASS_NAME(BodyMacroParameters);
+		REGISTER_ATTRIBUTES(BodyMacroParameters, (epsVolumetric) (numBrokenCohesive) (numContacts) (normDmg) );
+		REGISTER_CLASS_AND_BASE(BrefcomPhysParams,BodyMacroParameters);
 };
 REGISTER_SERIALIZABLE(BrefcomPhysParams);
 
@@ -167,11 +164,8 @@
 		BrefcomLaw() { Shop::Bex::initCache(); };
 		void action(MetaBody*);
 	protected: 
-		virtual void registerAttributes(){InteractionSolver::registerAttributes();};
-		void postProcessAttributes(bool deserializing){}
 	NEEDS_BEX("Force","Momentum");
-	REGISTER_CLASS_NAME(BrefcomLaw);
-	REGISTER_BASE_CLASS_NAME(InteractionSolver);
+	REGISTER_CLASS_AND_BASE(BrefcomLaw,InteractionSolver);
 	DECLARE_LOGGER;
 };
 REGISTER_SERIALIZABLE(BrefcomLaw);
@@ -207,26 +201,23 @@
 		}
 
 		virtual void go(const shared_ptr<PhysicalParameters>& pp1, const shared_ptr<PhysicalParameters>& pp2, const shared_ptr<Interaction>& interaction);
-		virtual void registerAttributes(){
-			InteractionPhysicsEngineUnit::registerAttributes();
-			REGISTER_ATTRIBUTE(cohesiveThresholdIter);
+		REGISTER_ATTRIBUTES(InteractionPhysicsEngineUnit,
+			(cohesiveThresholdIter)
+			(G_over_E)
+			(expBending)
+			(xiShear)
+			(sigmaT)
+			(neverDamage)
+			(epsCrackOnset)
+			(relDuctility)
+			(tau)
+			(expDmgRate)
+			(omegaThreshold)
+			(transStrainCoeff)
+		);
 
-			REGISTER_ATTRIBUTE(G_over_E);
-			REGISTER_ATTRIBUTE(expBending);
-			REGISTER_ATTRIBUTE(xiShear);
-			REGISTER_ATTRIBUTE(sigmaT);
-			REGISTER_ATTRIBUTE(neverDamage);
-			REGISTER_ATTRIBUTE(epsCrackOnset);
-			REGISTER_ATTRIBUTE(relDuctility);
-			REGISTER_ATTRIBUTE(tau);
-			REGISTER_ATTRIBUTE(expDmgRate);
-			REGISTER_ATTRIBUTE(omegaThreshold);
-			REGISTER_ATTRIBUTE(transStrainCoeff);
-		}
-
 		FUNCTOR2D(BrefcomPhysParams,BrefcomPhysParams);
-		REGISTER_CLASS_NAME(BrefcomMakeContact);
-		REGISTER_BASE_CLASS_NAME(InteractionPhysicsEngineUnit);
+		REGISTER_CLASS_AND_BASE(BrefcomMakeContact,InteractionPhysicsEngineUnit);
 		DECLARE_LOGGER;
 };
 REGISTER_SERIALIZABLE(BrefcomMakeContact);
@@ -234,10 +225,9 @@
 class GLDrawBrefcomContact: public GLDrawInteractionPhysicsFunctor {
 	public: virtual void go(const shared_ptr<InteractionPhysics>&,const shared_ptr<Interaction>&,const shared_ptr<Body>&,const shared_ptr<Body>&,bool wireFrame);
 	virtual ~GLDrawBrefcomContact() {};
-	virtual void registerAttributes(){ REGISTER_ATTRIBUTE(contactLine); REGISTER_ATTRIBUTE(dmgLabel); REGISTER_ATTRIBUTE(dmgPlane); REGISTER_ATTRIBUTE(epsT); REGISTER_ATTRIBUTE(epsTAxes); REGISTER_ATTRIBUTE(normal); REGISTER_ATTRIBUTE(colorStrain); REGISTER_ATTRIBUTE(epsNLabel);}
+	REGISTER_ATTRIBUTES(/*no base*/,(contactLine)(dmgLabel)(dmgPlane)(epsT)(epsTAxes)(normal)(colorStrain)(epsNLabel));
 	RENDERS(BrefcomContact);
-	REGISTER_CLASS_NAME(GLDrawBrefcomContact);
-	REGISTER_BASE_CLASS_NAME(GLDrawInteractionPhysicsFunctor);
+	REGISTER_CLASS_AND_BASE(GLDrawBrefcomContact,GLDrawInteractionPhysicsFunctor);
 	DECLARE_LOGGER;
 	static bool contactLine,dmgLabel,dmgPlane,epsT,epsTAxes,normal,colorStrain,epsNLabel;
 };
@@ -249,9 +239,8 @@
 		Real maxOmega;
 		BrefcomDamageColorizer(){maxOmega=0;}
 		virtual void action(MetaBody*);
-	virtual void registerAttributes(){ PeriodicEngine::registerAttributes(); REGISTER_ATTRIBUTE(maxOmega);}
-	REGISTER_CLASS_NAME(BrefcomDamageColorizer);
-	REGISTER_BASE_CLASS_NAME(PeriodicEngine);
+	REGISTER_ATTRIBUTES(PeriodicEngine,(maxOmega));
+	REGISTER_CLASS_AND_BASE(BrefcomDamageColorizer,PeriodicEngine);
 };
 REGISTER_SERIALIZABLE(BrefcomDamageColorizer);
 

Modified: trunk/extra/usct/UniaxialStrainControlledTest.hpp
===================================================================
--- trunk/extra/usct/UniaxialStrainControlledTest.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/extra/usct/UniaxialStrainControlledTest.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -133,7 +133,7 @@
 		virtual void applyCondition(MetaBody* rootBody);
 		UniaxialStrainer(){axis=2; asymmetry=0; currentStrainRate=0; originalLength=-1; limitStrain=0; notYetReversed=true; crossSectionArea=-1; needsInit=true; /* sensorsPusher=shared_ptr<UniaxialStrainSensorPusher>(); */ recordFile="/tmp/usct.data"; strain=avgStress=/*avgTransStrain=*/0; blockRotations=false; blockDisplacements=false;  stopStrain=numeric_limits<Real>::quiet_NaN(); active=true; idleIterations=0; };
 		virtual ~UniaxialStrainer(){};
-		REGISTER_ATTRIBUTES_WITH_BASE(DeusExMachina,
+		REGISTER_ATTRIBUTES(DeusExMachina,
 				(strainRate) 
 				(stopStrain) 
 				(active)

Modified: trunk/lib/serialization/Serializable.hpp
===================================================================
--- trunk/lib/serialization/Serializable.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/lib/serialization/Serializable.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -43,13 +43,17 @@
                 registerAttribute( #attribute, attribute );
 
 
+// placeholder function for registration with empty base
+namespace{
+	void registerAttributes(){}
+};
 
 #define _REGISTER_ATTRIBUTES_BODY(x,y,z) registerAttribute(BOOST_PP_STRINGIZE(z),z);
 #define REGISTER_ATTRIBUTES_MANY(attrs) BOOST_PP_SEQ_FOR_EACH(_REGISTER_ATTRIBUTES_BODY,~,attrs)
 //! create member function that register attributes; must be parenthesized, without commas: (attr1) (attr2) (attr3) ...
-#define REGISTER_ATTRIBUTES(attrs) protected: void registerAttributes(){ REGISTER_ATTRIBUTES_MANY(attrs) }
+//#define REGISTER_ATTRIBUTES(attrs) protected: void registerAttributes(){ REGISTER_ATTRIBUTES_MANY(attrs) }
 //! Same as REGISTER_ATTRIBUTES, but with first argument of base class, of which registerAttributes will be called first
-#define REGISTER_ATTRIBUTES_WITH_BASE(baseClass,attrs) protected: void registerAttributes(){ baseClass::registerAttributes(); REGISTER_ATTRIBUTES_MANY(attrs) }
+#define REGISTER_ATTRIBUTES(baseClass,attrs) protected: void registerAttributes(){ baseClass::registerAttributes(); REGISTER_ATTRIBUTES_MANY(attrs) }
 
 
 // for both fundamental and non-fundamental cases

Modified: trunk/pkg/common/Engine/DeusExMachina/Se3Interpolator.hpp
===================================================================
--- trunk/pkg/common/Engine/DeusExMachina/Se3Interpolator.hpp	2008-12-03 10:04:10 UTC (rev 1593)
+++ trunk/pkg/common/Engine/DeusExMachina/Se3Interpolator.hpp	2008-12-08 09:17:00 UTC (rev 1594)
@@ -37,7 +37,7 @@
 		virtual ~Se3Interpolator(){};
 		virtual void applyCondition(MetaBody* mb);
 	protected:
-		REGISTER_ATTRIBUTES_WITH_BASE(DeusExMachina,
+		REGISTER_ATTRIBUTES(DeusExMachina,
 			(done)
 			(started)
 			(start)