JASSv2
JASS_anytime_query.h
Go to the documentation of this file.
1 /*
2  JASS_ANYTIME_QUERY.H
3  --------------------
4  Copyright (c) 2017 Andrew Trotman
5  Released under the 2-clause BSD license (See:https://en.wikipedia.org/wiki/BSD_licenses)
6 */
13 #pragma once
14 
15 #include <stdint.h>
16 
17 #include <atomic>
18 #include <string>
19 #include <vector>
20 
21 /*
22  CLASS JASS_ANYTIME_QUERY
23  ------------------------
24 */
29  {
30  public:
31  std::atomic<uint8_t> taken;
32  std::string query;
33 
34  public:
35  /*
36  JASS_ANYTIME_QUERY::JASS_ANYTIME_QUERY()
37  ----------------------------------------
38  */
42  JASS_anytime_query() = delete;
43 
44  /*
45  JASS_ANYTIME_QUERY::JASS_ANYTIME_QUERY()
46  ----------------------------------------
47  */
52  JASS_anytime_query(const std::string &query) :
53  taken(false),
54  query(query)
55  {
56  /* Nothing */
57  }
58 
59  /*
60  JASS_ANYTIME_QUERY::JASS_ANYTIME_QUERY()
61  ----------------------------------------
62  */
68  taken(original.taken.load()),
69  query(original.query)
70  {
71  /*
72  Invalidate the original object.
73  */
74  original.query = "";
75  original.taken = true;
76  }
77 
78  /*
79  JASS_ANYTIME_QUERY::GET_NEXT_QUERY()
80  ------------------------------------
81  */
88  static std::string get_next_query(std::vector<JASS_anytime_query>&list, size_t &starting_from)
89  {
90  auto total_queries = list.size();
91  while (starting_from < total_queries)
92  {
93  while (!list[starting_from].taken)
94  {
95  uint8_t expected = false;
96  if (list[starting_from].taken.compare_exchange_strong(expected, true))
97  return list[starting_from].query;
98  }
99  starting_from++;
100  }
101 
102  return std::string();
103  }
104  };
std::string query
The query.
Definition: JASS_anytime_query.h:32
JASS_anytime_query(const std::string &query)
Constructor.
Definition: JASS_anytime_query.h:52
static std::string get_next_query(std::vector< JASS_anytime_query > &list, size_t &starting_from)
Given a list of queries, return the next un-taken query.
Definition: JASS_anytime_query.h:88
A query within the anytime parallel search system.
Definition: JASS_anytime_query.h:28
std::atomic< uint8_t > taken
Has this query been "taken" by a thread and processed.
Definition: JASS_anytime_query.h:31
JASS_anytime_query()=delete
Constructor.
JASS_anytime_query(JASS_anytime_query &&original)
Move Constructor.
Definition: JASS_anytime_query.h:67