Thread: [Compbench-devel] CompBenchmarks++/Benchmark Benchmark-DLLoader.cpp, 1.3, 1.4 Benchmark-DLLoader.h,
Brought to you by:
xfred
From: Frederic T. <xf...@us...> - 2007-01-03 22:02:32
|
Update of /cvsroot/compbench/CompBenchmarks++/Benchmark In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv23335 Modified Files: Benchmark-DLLoader.cpp Benchmark-DLLoader.h Log Message: Simplified interface. Index: Benchmark-DLLoader.cpp =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/Benchmark/Benchmark-DLLoader.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Benchmark-DLLoader.cpp 28 Dec 2006 18:18:15 -0000 1.3 --- Benchmark-DLLoader.cpp 3 Jan 2007 22:02:28 -0000 1.4 *************** *** 8,15 **** --- 8,18 ---- std::vector<std::string> cbmlib_paths; + std::vector<CBMPackage*> cbmlib_packages; /* cache... */ std::vector<cbmlib_internal*> cbmlib_loaded_libraries; + int PACKAGE_AUTOPURGE=1; + cbmlib_internal *cbmlib_check_previousload(char *package_id) { *************** *** 20,24 **** for(i=0; i<s; i++) { l=cbmlib_loaded_libraries[i]; ! if (l->package_id==package_id) return(l); } --- 23,27 ---- for(i=0; i<s; i++) { l=cbmlib_loaded_libraries[i]; ! if (l->PackageGet()->packageName()==package_id) return(l); } *************** *** 48,85 **** r->library=library; if (UO_verbose) ! std::cout << " Checking cbmlib_getBenchmarkNumber... "; ! r->Number=(cbmlib_internal_number_t) (dlsym(r->library, "cbmlib_getBenchmarkNumber")); ! if (!r->Number) { ! dlclose(library); ! if (UO_verbose) ! std::cout << "N.A." << std::endl; ! delete(r); ! return(0); ! } else { ! if (UO_verbose) ! std::cout << "found." << std::endl; ! } ! ! ! ! ! if (UO_verbose) ! std::cout << " Checking cbmlib_getBenchmarks... "; ! r->GetBenchmarks=(cbmlib_internal_getBenchmarks_t) (dlsym(r->library, "cbmlib_getBenchmarks")); ! if (!r->GetBenchmarks) { ! dlclose(library); ! if (UO_verbose) ! std::cout << "N.A." << std::endl; ! delete(r); ! return(0); ! } else { ! if (UO_verbose) ! std::cout << "found." << std::endl; ! } ! ! if (UO_verbose) ! std::cout << " Checking cbmlib_getBenchmark... "; ! r->Bench=(cbmlib_internal_bench_t) dlsym(r->library, "cbmlib_getBenchmark"); ! if (!r->Bench) { dlclose(library); if (UO_verbose) --- 51,57 ---- r->library=library; if (UO_verbose) ! std::cout << " Checking cbmlib_getPackage... "; ! r->PackageGet=(cbmlib_internal_getPackage_t) (dlsym(r->library, "cbmlib_getPackage")); ! if (!r->PackageGet) { dlclose(library); if (UO_verbose) *************** *** 92,109 **** } - if (UO_verbose) - std::cout << " Checking cbmlib_getBenchmarkByName... "; - r->BenchByName=(cbmlib_internal_benchbyname_t) dlsym(r->library, "cbmlib_getBenchmarkByName"); - if (!r->Bench) { - dlclose(library); - if (UO_verbose) - std::cout << "N.A." << std::endl; - delete(r); - return(0); - } else { - if (UO_verbose) - std::cout << "found." << std::endl; - } - r->package_id=package_id; cbmlib_loaded_libraries.push_back(r); return(r); --- 64,67 ---- *************** *** 136,159 **** } - CBMBenchmark *cbmlib_bench_load(char *bench_id, CBMSystem *_system) - { - std::string bench = bench_id; - std::string package = _system->Split(bench, "-", 0); - CBMBenchmark *b; - cbmlib_internal *l = cbmlib_load((char*) package.c_str()); - - if (l) { - b=l->BenchByName(bench_id, _system); - return(b); - } else - return(0); - } - void cbmlib_done(void) { int i; ! int s = cbmlib_loaded_libraries.size(); cbmlib_internal *l; for(i=0; i<s; i++) { l=cbmlib_loaded_libraries[i]; --- 94,111 ---- } void cbmlib_done(void) { int i; ! int s; cbmlib_internal *l; + s = cbmlib_packages.size(); + + PACKAGE_AUTOPURGE=0; + for(i=0; i<s; i++) { + delete(cbmlib_packages[i]); + } + + s = cbmlib_loaded_libraries.size(); for(i=0; i<s; i++) { l=cbmlib_loaded_libraries[i]; Index: Benchmark-DLLoader.h =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/Benchmark/Benchmark-DLLoader.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Benchmark-DLLoader.h 28 Dec 2006 18:18:15 -0000 1.3 --- Benchmark-DLLoader.h 3 Jan 2007 22:02:28 -0000 1.4 *************** *** 12,15 **** --- 12,17 ---- #include <System/System.h> #include <Benchmark/Benchmark.h> + #include <Benchmark/Package.h> + #include <dlfcn.h> #include <vector> *************** *** 18,43 **** extern std::vector<std::string> cbmlib_paths; ! /** Function prototype for getting benchmark's number in a shared library */ ! typedef int (*cbmlib_internal_number_t)(void); ! /** Function prototype for getting a benchmark object by its index */ ! typedef CBMBenchmark* (*cbmlib_internal_bench_t)(int, CBMSystem*); ! /** Function prototype for getting a benchmark object by its name */ ! typedef CBMBenchmark* (*cbmlib_internal_benchbyname_t)(char*, CBMSystem*); ! /** Function prototype for getting all benchmarks wihtin a package */ ! typedef std::vector<std::string> (*cbmlib_internal_getBenchmarks_t)(void); /** Low-level internal benchmark's shared library object */ typedef struct cbmlib_internal { ! void *library; ! std::string package_id; ! cbmlib_internal_number_t Number; ! cbmlib_internal_bench_t Bench; ! cbmlib_internal_benchbyname_t BenchByName; ! cbmlib_internal_getBenchmarks_t GetBenchmarks; }; - /** \brief Low-level library loading according to the benchmark/package's internal name. --- 20,36 ---- extern std::vector<std::string> cbmlib_paths; ! extern std::vector<CBMPackage*> cbmlib_packages; ! extern int PACKAGE_AUTOPURGE; + /** Function prototype for accessing a CBMPackage object */ + typedef CBMPackage* (*cbmlib_internal_getPackage_t)(void); /** Low-level internal benchmark's shared library object */ typedef struct cbmlib_internal { ! void *library; ! cbmlib_internal_getPackage_t PackageGet; }; /** \brief Low-level library loading according to the benchmark/package's internal name. |