|
Boost-Commit : |
From: oryol_at_[hidden]
Date: 2007-09-14 23:17:31
Author: jeremypack
Date: 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
New Revision: 39294
URL: http://svn.boost.org/trac/boost/changeset/39294
Log:
Add two reflection tests: reflect from shared library, and multi-param tests.
Text files modified:
sandbox/boost/reflection/instance.hpp | 2 +
sandbox/libs/reflection/examples/Jamfile.v2 | 8 ++--
sandbox/libs/reflection/examples/extension/car_lib.cpp | 29 +++++++++++------
sandbox/libs/reflection/examples/extension/extension.cpp | 65 +++++++++++++--------------------------
sandbox/libs/reflection/test/Jamfile.v2 | 2 +
sandbox/libs/reflection/test/single_param_test.cpp | 6 +-
6 files changed, 52 insertions(+), 60 deletions(-)
Modified: sandbox/boost/reflection/instance.hpp
==============================================================================
--- sandbox/boost/reflection/instance.hpp (original)
+++ sandbox/boost/reflection/instance.hpp 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
@@ -9,6 +9,8 @@
#ifndef BOOST_EXTENSION_INSTANCE_HPP
#define BOOST_EXTENSION_INSTANCE_HPP
+
+#include <boost/extension/common.hpp>
namespace boost {namespace reflections {
class instance {
public:
Modified: sandbox/libs/reflection/examples/Jamfile.v2
==============================================================================
--- sandbox/libs/reflection/examples/Jamfile.v2 (original)
+++ sandbox/libs/reflection/examples/Jamfile.v2 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
@@ -21,19 +21,19 @@
<include>$(BOOST_ROOT)
<include>../../../../src/sandbox/
<toolset>gcc:<find-static-library>dl
- <toolset>gcc:<find-static-library>readline
- <toolset>gcc:<find-static-library>boost_regex-gcc-mt
<toolset>gcc:<linkflags>"-Wl,-rpath,'$ORIGIN'"
<toolset>darwin:<define>DYLD_LIBRARY_PATH=./
:
;
# basic example
-exe reflection : main.cpp ;
+# exe reflection : main.cpp ;
# interpreter prototype
-exe interpreter : interpreter/interpreter.cpp ;
+# exe interpreter : interpreter/interpreter.cpp ;
# extension integration example
exe extension-reflection : extension/extension.cpp ;
lib car_lib : extension/car_lib.cpp : <link>shared ;
+
+install ../bin/ : car_lib extension-reflection ;
Modified: sandbox/libs/reflection/examples/extension/car_lib.cpp
==============================================================================
--- sandbox/libs/reflection/examples/extension/car_lib.cpp (original)
+++ sandbox/libs/reflection/examples/extension/car_lib.cpp 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
@@ -10,29 +10,38 @@
*/
#include "../car.hpp"
-#include <boost/extension/factory_map.hpp>
-
+#include <boost/extension/impl/decl.hpp>
+#include <boost/reflection/reflection.hpp>
+#include <boost/reflection/reflector.hpp>
+using namespace boost::reflections;
class suv : public car
{
public:
- suv(const std::string name) : car(name) {}
- virtual std::string get_type(void) { return "It's a SUV."; }
+ suv(const char * name) : car(name) {}
+ virtual const char * get_type(void) { return "It's an SUV."; }
virtual ~suv(void) {}
};
class compact : public car
{
public:
- compact(const std::string name) : car(name) {}
- virtual std::string get_type(void) { return "It's a compact."; }
+ compact(const char * name) : car(name) {}
+ virtual const char * get_type(void) { return "It's a compact."; }
virtual ~compact(void) {}
};
extern "C"
void BOOST_EXTENSION_EXPORT_DECL
-extension_export_car(boost::extensions::factory_map & fm)
-{
- fm.add<suv, car, std::string, std::string>("SUV");
- fm.add<compact, car, std::string, std::string>("Compact");
+extension_export_car(std::map<std::string, reflection> reflection_map) {
+ reflection & first = reflection_map["suv"];
+ reflection & second = reflection_map["compact"];
+ reflector<suv> suv_reflector(&first);
+ reflector<compact> compact_reflector(&second);
+
+ suv_reflector.reflect_constructor<const char *>();
+ compact_reflector.reflect_constructor<const char *>();
+
+ suv_reflector.reflect<const char *>(&suv::get_type, "get_type");
+ compact_reflector.reflect<const char *>(&compact::get_type, "get_type");
}
Modified: sandbox/libs/reflection/examples/extension/extension.cpp
==============================================================================
--- sandbox/libs/reflection/examples/extension/extension.cpp (original)
+++ sandbox/libs/reflection/examples/extension/extension.cpp 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
@@ -15,52 +15,31 @@
#include <boost/extension/factory_map.hpp>
#include <boost/extension/shared_library.hpp>
#include <boost/extension/convenience.hpp>
-
-#include <iostream>
-
-#define BOOST_EXTENSION_USE_PP 1
-
-#include "../car.hpp"
#include <boost/reflection/reflection.hpp>
-
+#include <iostream>
int main(void)
{
+
+ std::map<std::string, boost::reflections::reflection> reflection_map;
+ boost::extensions::shared_library lib("libCarLib.extension");
+ lib.open();
+ lib.get<void, std::map<std::string,
+ boost::reflections::reflection> &>
+ ("extension_export_car")(reflection_map);
// Let's create the reflection and add the methods
- boost::extension::reflection<car, std::string> car_reflection("A Car!");
- car_reflection.add<int, bool>(&car::start, 3);
- car_reflection.add<std::string, bool, float,
- std::string>(&car::turn, "turn", "turn_angle");
-
- // extension tests
- using namespace boost::extensions;
- factory_map fm;
-
- // load the car library
- load_single_library(fm, "libcar_lib.extension",
- "extension_export_car");
- std::list<factory<car, std::string, std::string> > & factory_list =
- fm.get<car, std::string, std::string>();
-
- // check if the factories loaded fine
- if(factory_list.size() < 2) {
- std::cout << "Error - the classes were not found ("
- << factory_list.size() << ").\n";
- return -1;
- }
-
- // create some instances and call the method "3" (start)
- for (std::list<factory<car, std::string, std::string> >
- ::iterator current_car = factory_list.begin();
- current_car != factory_list.end();
- ++current_car)
- {
- if(current_car->get_info() == "Compact") {
- car *beetle(current_car->create("VW New Beetle"));
- car_reflection.call<int, bool>(beetle, 3);
- delete beetle;
- }
- }
-
- return 0;
+ boost::reflections::reflection & first_reflection =
+ reflection_map["suv"];
+ boost::reflections::reflection & second_reflection =
+ reflection_map["compact"];
+ boost::reflections::instance first_instance =
+ first_reflection.get_constructor<const char *>()("First Instance");
+ boost::reflections::instance second_instance =
+ second_reflection.get_constructor<const char *>()("Second Instance");
+ std::cout <<
+ first_reflection.get_function<const char *>("get_type")(first_instance)
+ << std::endl;
+ std::cout <<
+ second_reflection.get_function<const char *>("get_type")(second_instance)
+ << std::endl;
}
Modified: sandbox/libs/reflection/test/Jamfile.v2
==============================================================================
--- sandbox/libs/reflection/test/Jamfile.v2 (original)
+++ sandbox/libs/reflection/test/Jamfile.v2 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
@@ -27,5 +27,7 @@
test-suite reflection_tests_all
: [ run basic_test.cpp ]
[ run single_param_test.cpp ]
+ [ run shared_library_test.cpp ]
+ [ run multi_param_test.cpp ]
:
;
Modified: sandbox/libs/reflection/test/single_param_test.cpp
==============================================================================
--- sandbox/libs/reflection/test/single_param_test.cpp (original)
+++ sandbox/libs/reflection/test/single_param_test.cpp 2007-09-14 23:17:30 EDT (Fri, 14 Sep 2007)
@@ -35,7 +35,7 @@
};
using namespace boost::reflections;
BOOST_AUTO_TEST_CASE(argless)
-{/*
+{
reflection car_reflection;
reflector<car> car_reflector(&car_reflection);
car_reflector.reflect_constructor<float>();
@@ -54,7 +54,7 @@
BOOST_CHECK_EQUAL
(car_reflection.get_function<float>("get_cost")
.call(car_instance), 10.0f);
- function<int> f2 =
+ function<float> f2 =
car_reflection.get_function<float>("get_cost");
- BOOST_CHECK_EQUAL(f2(car_instance), 10.0f);*/
+ BOOST_CHECK_EQUAL(f2(car_instance), 10.0f);
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk