From f24982a58fe4a9b0a77cee0136ff0b890c50b4f8 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Wed, 23 Dec 2009 00:07:57 +0000
Subject: [PATCH] ugly fix for bindings on MAC ... yet it works

---
 Geo/GModel.cpp                             | 7 ++++++-
 Numeric/fullMatrix.cpp                     | 9 ++++++++-
 Solver/dgConservationLaw.cpp               | 2 --
 Solver/dgConservationLawAdvection.cpp      | 7 ++++++-
 Solver/dgConservationLawPerfectGas.cpp     | 7 ++++++-
 Solver/dgConservationLawShallowWater2d.cpp | 6 +++++-
 Solver/dgConservationLawWaveEquation.cpp   | 6 +++++-
 Solver/dgSlopeLimiter.cpp                  | 4 ++--
 Solver/dgSystemOfEquations.cpp             | 9 +++++++--
 Solver/function.cpp                        | 6 +++++-
 10 files changed, 50 insertions(+), 13 deletions(-)

diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 3b2617342a..1f16e39ba2 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -1380,12 +1380,17 @@ void GModel::save(std::string fileName){
 
 #ifdef HAVE_LUA
 #include "Bindings.h"
+static GModel *myConstructorPtr(){
+  return new GModel;
+}
 void GModel::registerBindings(binding *b){
   classBinding *cb = b->addClass<GModel>("GModel");
   methodBinding *cm;
   cm = cb->addMethod("mesh",&GModel::mesh);
   cm = cb->addMethod("load",&GModel::load);
   cm = cb->addMethod("save",&GModel::save);
-  cb->setConstructor(constructorPtr<GModel>);
+  //  cb->setConstructor(constructorPtr<GModel>);
+  // FIXME AGAIN !!!!!!!! JF
+  cb->setConstructor(myConstructorPtr);
 }
 #endif
diff --git a/Numeric/fullMatrix.cpp b/Numeric/fullMatrix.cpp
index d15f985431..25c4bc3af1 100644
--- a/Numeric/fullMatrix.cpp
+++ b/Numeric/fullMatrix.cpp
@@ -292,6 +292,12 @@ bool fullMatrix<double>::svd(fullMatrix<double> &V, fullVector<double> &S)
 #endif
 
 #include "Bindings.h"
+
+// I DID FIX IT FOR NOW ... SHOULD BE BETTER -- JF
+static fullMatrix<double> *myConstructorPtr(int a0, int a1){
+  return new fullMatrix<double>(a0,a1);
+}
+
 template<>
 void fullMatrix<double>::registerBindings(binding *b){
   classBinding *cb = b->addClass<fullMatrix<double> >("fullMatrix");
@@ -302,5 +308,6 @@ void fullMatrix<double>::registerBindings(binding *b){
   cb->addMethod("set",&fullMatrix<double>::set);
   cb->addMethod("gemm",&fullMatrix<double>::gemm);
   // FIXME DOES NOT COMPILE ON MAC
-  cb->setConstructor(constructorPtr<fullMatrix<double>,int,int>);
+  cb->setConstructor(myConstructorPtr);
+  //  cb->setConstructor(constructorPtr<fullMatrix<double>,int,int>);
 }
diff --git a/Solver/dgConservationLaw.cpp b/Solver/dgConservationLaw.cpp
index fce315c2a3..d66c9dfe82 100644
--- a/Solver/dgConservationLaw.cpp
+++ b/Solver/dgConservationLaw.cpp
@@ -71,8 +71,6 @@ void dgConservationLaw::registerBindings(binding *b){
   cb->addMethod("newOutsideValueBoundary",&dgConservationLaw::newOutsideValueBoundary);
 }
 
-
-
 void dgBoundaryCondition::registerBindings(binding *b){
   classBinding *cb = b->addClass<dgBoundaryCondition>("dgBoundaryCondition");
 }
diff --git a/Solver/dgConservationLawAdvection.cpp b/Solver/dgConservationLawAdvection.cpp
index a8b02efa19..adedf3a207 100644
--- a/Solver/dgConservationLawAdvection.cpp
+++ b/Solver/dgConservationLawAdvection.cpp
@@ -95,8 +95,13 @@ dgConservationLawAdvection::dgConservationLawAdvection(std::string vFunctionName
 
 #include "Bindings.h"
 
+static dgConservationLawAdvection *myConstructorPtr(std::string a,std::string b){
+  return new dgConservationLawAdvection(a,b);
+}
+
 void dgConservationLawAdvectionRegisterBindings (binding *b){
   classBinding *cb = b->addClass<dgConservationLawAdvection>("dgConservationLawAdvection");
-  cb->setConstructor(constructorPtr<dgConservationLawAdvection,std::string,std::string>);
+  //  cb->setConstructor(constructorPtr<dgConservationLawAdvection,std::string,std::string>);
+  cb->setConstructor(myConstructorPtr);
   cb->setParentClass<dgConservationLaw>();
 }
diff --git a/Solver/dgConservationLawPerfectGas.cpp b/Solver/dgConservationLawPerfectGas.cpp
index 5a21432eea..756a397c54 100644
--- a/Solver/dgConservationLawPerfectGas.cpp
+++ b/Solver/dgConservationLawPerfectGas.cpp
@@ -312,10 +312,15 @@ class dgBoundaryConditionPerfectGasLaw2dFreeStream : public dgBoundaryCondition
 
 #include "Bindings.h"
 
+static dgPerfectGasLaw2d *myConstructorPtr(){
+  return new dgPerfectGasLaw2d ;
+}
+
 void dgPerfectGasLaw2dRegisterBindings (binding *b){
   classBinding *cb = b->addClass<dgPerfectGasLaw2d>("dgPerfectGasLaw2d");
   methodBinding *cm;
   cb->addMethod("newWallBoundary",&dgPerfectGasLaw2d::newWallBoundary);
-  cb->setConstructor(constructorPtr<dgPerfectGasLaw2d>);
+  //  cb->setConstructor(constructorPtr<dgPerfectGasLaw2d>);
+  cb->setConstructor(myConstructorPtr);
   cb->setParentClass<dgConservationLaw>();
 }
diff --git a/Solver/dgConservationLawShallowWater2d.cpp b/Solver/dgConservationLawShallowWater2d.cpp
index de798d27b0..aefa83bed3 100644
--- a/Solver/dgConservationLawShallowWater2d.cpp
+++ b/Solver/dgConservationLawShallowWater2d.cpp
@@ -141,10 +141,14 @@ dgBoundaryCondition *dgConservationLawShallowWater2d::newBoundaryWall(){
 }
 
 #include "Bindings.h"
+static dgConservationLawShallowWater2d *myConstructorPtr(){
+  return new dgConservationLawShallowWater2d;
+}
 void dgConservationLawShallowWater2dRegisterBindings (binding *b){
   classBinding *cb = b->addClass<dgConservationLawShallowWater2d>("dgConservationLawShallowWater2d");
   methodBinding *cm;
   cb->addMethod("newBoundaryWall",&dgConservationLawShallowWater2d::newBoundaryWall);
-  cb->setConstructor(constructorPtr<dgConservationLawShallowWater2d>);
+  //  cb->setConstructor(constructorPtr<dgConservationLawShallowWater2d>);
+  cb->setConstructor(myConstructorPtr);
   cb->setParentClass<dgConservationLaw>();
 }
diff --git a/Solver/dgConservationLawWaveEquation.cpp b/Solver/dgConservationLawWaveEquation.cpp
index 583b79c7e0..cf9e894a32 100644
--- a/Solver/dgConservationLawWaveEquation.cpp
+++ b/Solver/dgConservationLawWaveEquation.cpp
@@ -136,10 +136,14 @@ dgBoundaryCondition *dgConservationLawWaveEquation::newBoundaryWall()const{
 }
 
 #include "Bindings.h"
+static dgConservationLawWaveEquation *myConstructorPtr(int d){
+  return new dgConservationLawWaveEquation (d);
+}
 void dgConservationLawWaveEquationRegisterBindings(binding *b){
   classBinding *cb = b->addClass<dgConservationLawWaveEquation> ("dgConservationLawWaveEquation");
   methodBinding *cm;
   cb->addMethod("newBoundaryWall",&dgConservationLawWaveEquation::newBoundaryWall);
-  cb->setConstructor(constructorPtr<dgConservationLawWaveEquation,int>);
+  //  cb->setConstructor(constructorPtr<dgConservationLawWaveEquation,int>);
+  cb->setConstructor(myConstructorPtr);
   cb->setParentClass<dgConservationLaw>();
 }
diff --git a/Solver/dgSlopeLimiter.cpp b/Solver/dgSlopeLimiter.cpp
index 379172738e..b0b11effaf 100644
--- a/Solver/dgSlopeLimiter.cpp
+++ b/Solver/dgSlopeLimiter.cpp
@@ -5,8 +5,8 @@
 
 //----------------------------------------------------------------------------------   
 bool dgSlopeLimiter::apply ( dgDofContainer &solution,   
-    std::vector<dgGroupOfElements*> &eGroups,   
-    std::vector<dgGroupOfFaces*> &fGroups) 
+			     std::vector<dgGroupOfElements*> &eGroups,   
+			     std::vector<dgGroupOfFaces*> &fGroups) 
 {    
 
   //WARNING FOR ONLY 1 GROUP OF FACES    
diff --git a/Solver/dgSystemOfEquations.cpp b/Solver/dgSystemOfEquations.cpp
index df6070965a..60983b9eac 100644
--- a/Solver/dgSystemOfEquations.cpp
+++ b/Solver/dgSystemOfEquations.cpp
@@ -38,14 +38,19 @@ void dgSystemOfEquations::setConservationLaw (dgConservationLaw *law){
 }
 
 #include "Bindings.h"
+
+static dgSystemOfEquations *myConstructorPtr(GModel* gm){
+  return new dgSystemOfEquations(gm);
+}
+
 void dgSystemOfEquations::registerBindings(binding *b){
   classBinding *cb = b->addClass<dgSystemOfEquations>("dgSystemOfEquations");
   cb->setDescription("a class to rule them all :-) -- bad description, this class will be removed anyway");
-  cb->setConstructor(constructorPtr<dgSystemOfEquations,GModel*>);
+  cb->setConstructor(myConstructorPtr);
   methodBinding *cm;
   cm = cb->addMethod("setConservationLaw",&dgSystemOfEquations::setConservationLaw);
   cm->setArgNames("law",NULL);
-  cm->setDescription("set the conservation law this system solve");
+  cm->setDescription("set the conservation law this system solves");
   cm = cb->addMethod("setup",&dgSystemOfEquations::setup);
   cm->setDescription("allocate and init internal stuff, call this function after setOrder and setLaw and before anything else on this instance");
   cm = cb->addMethod("exportSolution",&dgSystemOfEquations::exportSolution);
diff --git a/Solver/function.cpp b/Solver/function.cpp
index 209fddc2a2..3a1189d9ab 100644
--- a/Solver/function.cpp
+++ b/Solver/function.cpp
@@ -147,11 +147,15 @@ void function::registerDefaultFunctions()
   function::add("XYZ", new functionXYZ);
 }
 
+static functionConstant *myConstructorPtr(fullMatrix<double>*m){
+  return new functionConstant(m);
+}
 void function::registerBindings(binding *b){
   classBinding *cb = b->addClass<function>("function");
   cb->addMethod("getName",&function::getName);
   cb = b->addClass<functionConstant>("functionConstant");
-  cb->setConstructor(constructorPtr<functionConstant,fullMatrix<double>*>);
+  cb->setConstructor(myConstructorPtr);
+  //  cb->setConstructor(constructorPtr<functionConstant,fullMatrix<double>*>);
   cb->setParentClass<function>();
 }
 
-- 
GitLab