clover: Simplify the platform object by using util/range.

Tested-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
Francisco Jerez
2013-09-16 21:44:19 -07:00
parent e5fc61fa3f
commit c6e7a0d0d3
3 changed files with 8 additions and 28 deletions

View File

@@ -35,7 +35,7 @@ namespace clover {
class root_resource;
class hard_event;
class device : public _cl_device_id {
class device : public ref_counter, public _cl_device_id {
public:
device(clover::platform &platform, pipe_loader_device *ldev);
device(device &&dev);

View File

@@ -24,7 +24,7 @@
using namespace clover;
platform::platform() {
platform::platform() : adaptor_range(derefs(), devs) {
int n = pipe_loader_probe(NULL, 0);
std::vector<pipe_loader_device *> ldevs(n);
@@ -32,7 +32,7 @@ platform::platform() {
for (pipe_loader_device *ldev : ldevs) {
try {
devs.emplace_back(*this, ldev);
devs.push_back(transfer(new device(*this, ldev)));
} catch (error &) {}
}
}

View File

@@ -27,37 +27,17 @@
#include "core/object.hpp"
#include "core/device.hpp"
#include "util/range.hpp"
namespace clover {
class platform : public _cl_platform_id {
class platform : public _cl_platform_id,
public adaptor_range<
derefs, std::vector<ref_ptr<device>> &> {
public:
typedef std::vector<device>::iterator iterator;
platform();
///
/// Container of all compute devices that are available in the platform.
///
/// @{
iterator begin() {
return devs.begin();
}
iterator end() {
return devs.end();
}
device &front() {
return devs.front();
}
device &back() {
return devs.back();
}
/// @}
protected:
std::vector<device> devs;
std::vector<ref_ptr<device>> devs;
};
}