clover: Simplify the platform object by using util/range.
Tested-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
@@ -35,7 +35,7 @@ namespace clover {
|
|||||||
class root_resource;
|
class root_resource;
|
||||||
class hard_event;
|
class hard_event;
|
||||||
|
|
||||||
class device : public _cl_device_id {
|
class device : public ref_counter, public _cl_device_id {
|
||||||
public:
|
public:
|
||||||
device(clover::platform &platform, pipe_loader_device *ldev);
|
device(clover::platform &platform, pipe_loader_device *ldev);
|
||||||
device(device &&dev);
|
device(device &&dev);
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
using namespace clover;
|
using namespace clover;
|
||||||
|
|
||||||
platform::platform() {
|
platform::platform() : adaptor_range(derefs(), devs) {
|
||||||
int n = pipe_loader_probe(NULL, 0);
|
int n = pipe_loader_probe(NULL, 0);
|
||||||
std::vector<pipe_loader_device *> ldevs(n);
|
std::vector<pipe_loader_device *> ldevs(n);
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ platform::platform() {
|
|||||||
|
|
||||||
for (pipe_loader_device *ldev : ldevs) {
|
for (pipe_loader_device *ldev : ldevs) {
|
||||||
try {
|
try {
|
||||||
devs.emplace_back(*this, ldev);
|
devs.push_back(transfer(new device(*this, ldev)));
|
||||||
} catch (error &) {}
|
} catch (error &) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,37 +27,17 @@
|
|||||||
|
|
||||||
#include "core/object.hpp"
|
#include "core/object.hpp"
|
||||||
#include "core/device.hpp"
|
#include "core/device.hpp"
|
||||||
|
#include "util/range.hpp"
|
||||||
|
|
||||||
namespace clover {
|
namespace clover {
|
||||||
class platform : public _cl_platform_id {
|
class platform : public _cl_platform_id,
|
||||||
|
public adaptor_range<
|
||||||
|
derefs, std::vector<ref_ptr<device>> &> {
|
||||||
public:
|
public:
|
||||||
typedef std::vector<device>::iterator iterator;
|
|
||||||
|
|
||||||
platform();
|
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:
|
protected:
|
||||||
std::vector<device> devs;
|
std::vector<ref_ptr<device>> devs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user