2 #include "helpers/string_to_hex.h" 32 virtual bool match(
const std::string &value)
36 while (offset < value.size()) {
37 size_t end = value.find(delimiter, offset);
39 if (end == std::string::npos) {
43 if (value.compare(offset, end - offset,
my_value_) == 0) {
82 virtual bool match(
const std::string &value)
84 return my_count_ >= std::stoul(value);
90 const std::string &
id,
const std::string &hwgroup,
const std::multimap<std::string, std::string> &headers)
91 : identity(id), hwgroup(hwgroup), free_(true), current_request_(nullptr), headers_copy_(headers)
95 for (
auto it : headers) {
96 auto matcher = std::unique_ptr<header_matcher>(
new header_matcher(it.second));
98 if (it.first ==
"threads") {
99 matcher = std::unique_ptr<header_matcher>(
new count_matcher(it.second));
102 headers_.emplace(it.first, std::move(matcher));
112 request_queue_.push(request);
118 current_request_ =
nullptr;
123 auto request = current_request_;
135 if (free_ && !request_queue_.empty()) {
136 current_request_ = request_queue_.front();
137 request_queue_.pop();
148 return current_request_;
153 auto result = std::make_shared<std::vector<worker::request_ptr>>();
155 if (current_request_ !=
nullptr) {
156 current_request_->failure_count += 1;
157 result->push_back(current_request_);
160 current_request_ =
nullptr;
162 while (!request_queue_.empty()) {
163 result->push_back(request_queue_.front());
164 request_queue_.pop();
173 auto range = headers_.equal_range(header);
174 for (
auto &worker_header = range.first; worker_header != range.second; ++worker_header) {
176 if (worker_header->second->match(value)) {
188 return other == headers_copy_;
194 return helpers::string_to_hex(
identity);
virtual bool check_header(const std::string &header, const std::string &value)
std::shared_ptr< request > request_ptr
virtual void complete_request()
virtual bool match(const std::string &value)
static const char delimiter
count_matcher(std::string my_value)
virtual bool next_request()
virtual std::shared_ptr< std::vector< request_ptr > > terminate()
multiple_string_matcher(std::string my_value)
virtual std::shared_ptr< const request > get_current_request() const
virtual bool match(const std::string &value)
virtual ~multiple_string_matcher()
virtual void enqueue_request(request_ptr request)
const std::string identity
virtual request_ptr cancel_request()
std::string get_description() const
bool headers_equal(const std::multimap< std::string, std::string > &other)
worker(const std::string &id, const std::string &hwgroup, const std::multimap< std::string, std::string > &headers)