1 #ifndef __ARC_ENTITYRETRIEVER_H__
2 #define __ARC_ENTITYRETRIEVER_H__
8 #include <arc/ArcConfig.h>
9 #include <arc/compute/Endpoint.h>
10 #include <arc/UserConfig.h>
11 #include <arc/Utils.h>
12 #include <arc/compute/EndpointQueryingStatus.h>
13 #include <arc/compute/ExecutionTarget.h>
14 #include <arc/compute/EntityRetrieverPlugin.h>
20 class SimpleCondition;
22 class ThreadedPointer<class Endpoint>;
65 virtual void addEntity(
const T& t) { this->push_back(t); }
178 void wait()
const { result.wait(); };
185 bool isDone()
const {
return result.wait(0); };
249 bool removeEndpoint(
const Endpoint& e) { statusLock.
lock(); EndpointStatusMap::iterator it = statuses.find(e);
if (it != statuses.end()) { statuses.erase(it); statusLock.
unlock();
return true; }; statusLock.
unlock();
return false; }
285 static void queryEndpoint(
void *arg_);
287 void checkSuspendedAndStart(
const Endpoint& e);
293 mutex(), t(t), uc(u) {};
294 void deactivate(
void) {
299 bool lockExclusiveIfValid(
void) {
306 bool lockSharedIfValid(
void) {
314 operator const UserConfig&(void)
const {
return uc; }
315 const std::list<std::string>& getAvailablePlugins(
void)
const {
return availablePlugins; }
316 void setAvailablePlugins(
const std::list<std::string>& newAvailablePlugins) { availablePlugins = newAvailablePlugins; }
323 std::list<std::string> availablePlugins;
335 Result(
bool one_success =
false):
337 success(
false),need_one_success(one_success) { };
341 success(
false),need_one_success(r.need_one_success) {
346 if(need_one_success && success) {
353 void setSuccess(
void) { success =
true; };
355 bool wait(
int t = -1)
const {
return Ptr()->
wait(t); };
358 bool need_one_success;
365 ThreadArg(
const ThreadArg& v,
Result& result) : common(v.common), result(result), endpoint(v.endpoint), pluginName(v.pluginName), options(options) {};
371 std::string pluginName;
379 std::list< EntityConsumer<T>* > consumers;
384 std::map<std::string, std::string> interfacePluginMap;
385 bool need_all_results;
417 #endif // __ARC_ENTITYRETRIEVER_H__