]> git.ipfire.org Git - thirdparty/squid.git/blame - src/base/Range.h
Source Format Enforcement (#532)
[thirdparty/squid.git] / src / base / Range.h
CommitLineData
d424cd7f 1/*
77b1029d 2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
d424cd7f 3 *
5c193dec
AJ
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
d424cd7f 7 */
8
9#ifndef SQUID_RANGE_H
10#define SQUID_RANGE_H
11
b8bad68c 12#include <iosfwd>
25b6a907 13#include <ostream>
b8bad68c 14
d424cd7f 15/* represents [start, end) */
528b2c61 16
c16f948b 17template <class C, class S = size_t>
528b2c61 18class Range
19{
20
21public:
94f895e4 22 Range ();
d424cd7f 23 Range (C start_, C end_);
24 C start;
25 C end;
c5dd4956 26 Range intersection (Range const &) const;
21dfc374 27 bool contains(C const &) const;
c16f948b 28 S size() const;
d424cd7f 29};
30
c16f948b
CT
31template <class C, class S>
32std::ostream& operator << (std::ostream &os, Range<C, S> const &aRange)
b8bad68c 33{
34 os << "[" << aRange.start << "," << aRange.end << ")";
35 return os;
36}
37
c16f948b
CT
38template<class C, class S>
39Range<C, S>::Range () : start(), end() {}
94f895e4 40
c16f948b
CT
41template<class C, class S>
42Range<C, S>::Range (C start_, C end_) : start(start_), end(end_) {}
d424cd7f 43
c16f948b
CT
44template<class C, class S>
45Range<C, S>
46Range<C, S>::intersection (Range const &rhs) const
d424cd7f 47{
c16f948b 48 Range<C, S> result (max(start, rhs.start), min(end, rhs.end));
d424cd7f 49 return result;
50}
51
21dfc374
AJ
52template<class C, class S>
53bool
54Range<C, S>::contains(C const &value) const {
55 assert(start <= end);
56 return (start <= value && value <= end);
57}
58
c16f948b
CT
59template<class C, class S>
60S
61Range<C, S>::size() const
d424cd7f 62{
c16f948b 63 return (S) (end > start ? end - start : 0);
d424cd7f 64}
65
66#endif /* SQUID_RANGE_H */
f53969cc 67