From: Francisco Jerez Date: Tue, 17 Sep 2013 04:44:19 +0000 (-0700) Subject: clover: Simplify the platform object by using util/range. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c6e7a0d0d38d415a515f1e2ddcce5583d73d2937;p=mesa.git clover: Simplify the platform object by using util/range. Tested-by: Tom Stellard --- diff --git a/src/gallium/state_trackers/clover/core/device.hpp b/src/gallium/state_trackers/clover/core/device.hpp index 95669bdeb64..42e32a19077 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 31e88307605..e35b1f96da5 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 26c65c788bd..83f0cab35e9 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; }; }