aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/cpr/include/cpr/range.h
blob: 2c5a145d54a93d96643020aae89064bf1393ec93 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifndef CPR_RANGE_H
#define CPR_RANGE_H

#include <cstdint>
#include <optional>

namespace cpr {

class Range {
  public:
    Range(const std::optional<std::int64_t> p_resume_from = std::nullopt, const std::optional<std::int64_t> p_finish_at = std::nullopt) {
        resume_from = p_resume_from.value_or(0);
        finish_at = p_finish_at.value_or(-1);
    }

    std::int64_t resume_from;
    std::int64_t finish_at;

    const std::string str() const {
        std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from);
        std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at);
        return from_str + "-" + to_str;
    }
};

class MultiRange {
  public:
    MultiRange(std::initializer_list<Range> rs) : ranges{rs} {}

    const std::string str() const {
        std::string multi_range_string{};
        for (Range range : ranges) {
            multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str();
        }
        return multi_range_string;
    }

  private:
    std::vector<Range> ranges;
}; // namespace cpr

} // namespace cpr

#endif