From e01ad98bc52c4e984e76c11f95333ecc674f69c1 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Thu, 30 Nov 2006 22:15:47 +0000 Subject: [PATCH] Primera version del plugin. Faltan cosas pero es todo lo que puedo hacer por ahora... ESTAMOS EN EL HORNO --- trunk/src/Makefile | 8 +++- trunk/src/plugin.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 trunk/src/plugin.cpp diff --git a/trunk/src/Makefile b/trunk/src/Makefile index e1eb39d..cb15e54 100644 --- a/trunk/src/Makefile +++ b/trunk/src/Makefile @@ -1,10 +1,14 @@ -CXXFLAGS=-Wall -g +BREVEDIR=../../breve_2.4/plugins +CXXFLAGS=-Wall -g -I$(BREVEDIR) -targets=test +targets=test plugin.so all: $(targets) +plugin.so: plugin.o $(BREVEDIR)/brevePlugin.a + $(CXX) $(CPPFLAGS) -shared -o $@ plugin.o $(BREVEDIR)/brevePlugin.a + test: main.o sistemaautonomo.o $(CXX) $(LDFLAGS) -o test *.o diff --git a/trunk/src/plugin.cpp b/trunk/src/plugin.cpp new file mode 100644 index 0000000..383cffc --- /dev/null +++ b/trunk/src/plugin.cpp @@ -0,0 +1,87 @@ +#include "sistemaautonomo.h" +#include "slBrevePluginAPI.h" +#include + +/////////////////////////// CTeoria ///////////////////////// + +double NoOp(CEntorno&) { return 0.0; } // FIXME (hack horrible porque no puedo usar ptr a fun) + +// pointer{Teoria} TeoriaNew(string, int, int, int) +int SAbrTeoriaNew(brEval args[], brEval* result, void* data) +{ + result->set(new CTeoria( + BRSTRING(args), + NoOp, // FIXME (no hay puntero a funcion, poner BRINT(args+1)) + BRINT(args+2), + BRINT(args+3))); + return EC_OK; +} + +// void TeoriaAddDatoInicial(pointer{Teoria}, string, double) +int SAbrTeoriaAddDatoInicial(brEval args[], brEval* result, void* data) +{ + CTeoria* t = (CTeoria*) BRPOINTER(args); + t->datos_iniciales.add(BRSTRING(args+1), BRINT(args+2)); + return EC_OK; +} + +// void TeoriaAddDatoFinal(pointer{Teoria}, string, double) +int SAbrTeoriaAddDatoFinal(brEval args[], brEval* result, void* data) +{ + CTeoria* t = (CTeoria*) BRPOINTER(args); + t->datos_finales.add(BRSTRING(args+1), BRINT(args+2)); + return EC_OK; +} + +// void TeoriaDelete(pointer{Teoria}) +int SAbrTeoriaDelete(brEval args[], brEval* result, void* data) +{ + delete (CTeoria*) BRPOINTER(args); + return EC_OK; +} + + +/////////////////////////// CSistemaAutonomo ///////////////////////// + +// pointer{SistemaAutonomo} SistemaAutonomoNew() +int SAbrSistemaAutonomoNew(brEval args[], brEval* result, void* data) +{ + result->set(new CSistemaAutonomo()); + return EC_OK; +} + +// void SistemaAutonomoAddTeoria(pointer{SistemaAutonomo}, pointer{Teoria}) +int SAbrSistemaAutonomoAddTeoria(brEval args[], brEval* result, void* data) +{ + CSistemaAutonomo* sa = (CSistemaAutonomo*) BRPOINTER(args); + CTeoria* t = (CTeoria*) BRPOINTER(args+1); + sa->teorias.add(t->nombre.c_str(), *t); + return EC_OK; +} + +// void SistemaAutonomoDelete(pointer{SistemaAutonomo}) +int SAbrSistemaAutonomoDelete(brEval args[], brEval* result, void* data) +{ + delete (CSistemaAutonomo*) BRPOINTER(args); + return EC_OK; +} + + +DLLEXPORT void SAbrFunctions(void *data) +{ + brNewBreveCall(data, "TeoriaNew", SAbrTeoriaNew, + AT_POINTER, AT_STRING, AT_INT, AT_INT, AT_INT, 0); + brNewBreveCall(data, "TeoriaAddDatoInicial", SAbrTeoriaAddDatoInicial, + AT_NULL, AT_POINTER, AT_STRING, AT_DOUBLE, 0); + brNewBreveCall(data, "TeoriaAddDatoFinal", SAbrTeoriaAddDatoFinal, + AT_NULL, AT_POINTER, AT_STRING, AT_DOUBLE, 0); + brNewBreveCall(data, "TeoriaDelete", SAbrTeoriaDelete, + AT_NULL, AT_POINTER, 0); + brNewBreveCall(data, "SistemaAutonomoNew", SAbrSistemaAutonomoNew, + AT_POINTER, 0); + brNewBreveCall(data, "SistemaAutonomoAddTeoria", SAbrSistemaAutonomoAddTeoria, + AT_NULL, AT_POINTER, AT_POINTER, 0); + brNewBreveCall(data, "SistemaAutonomoDelete", SAbrSistemaAutonomoDelete, + AT_NULL, AT_POINTER, 0); +} + -- 2.43.0