From c6e7a0d0d38d415a515f1e2ddcce5583d73d2937 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Mon, 16 Sep 2013 21:44:19 -0700 Subject: [PATCH] clover: Simplify the platform object by using util/range. Tested-by: Tom Stellard --- src/gallium/state_trackers/clover/core/device.hpp | 2 +- .../state_trackers/clover/core/platform.cpp | 4 +-- .../state_trackers/clover/core/platform.hpp | 30 ++++------------------ 3 files changed, 8 insertions(+), 28 deletions(-) diff --git a/src/gallium/state_trackers/clover/core/device.hpp b/src/gallium/state_trackers/clover/core/device.hpp index 95669bd..42e32a1 100644 --- a/src/gallium/state_trackers/clover/core/device.hpp +++ b/src/gallium/state_trackers/clover/core/device.hpp @@ -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); diff --git a/src/gallium/state_trackers/clover/core/platform.cpp b/src/gallium/state_trackers/clover/core/platform.cpp index 31e8830..e35b1f9 100644 --- a/src/gallium/state_trackers/clover/core/platform.cpp +++ b/src/gallium/state_trackers/clover/core/platform.cpp @@ -24,7 +24,7 @@ using namespace clover; -platform::platform() { +platform::platform() : adaptor_range(derefs(), devs) { int n = pipe_loader_probe(NULL, 0); std::vector 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 &) {} } } diff --git a/src/gallium/state_trackers/clover/core/platform.hpp b/src/gallium/state_trackers/clover/core/platform.hpp index 26c65c7..83f0cab 100644 --- a/src/gallium/state_trackers/clover/core/platform.hpp +++ b/src/gallium/state_trackers/clover/core/platform.hpp @@ -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> &> { public: - typedef std::vector::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 devs; + std::vector> devs; }; } -- 2.7.4