diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /layout/generic/nsIntervalSet.h | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/generic/nsIntervalSet.h')
-rw-r--r-- | layout/generic/nsIntervalSet.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/layout/generic/nsIntervalSet.h b/layout/generic/nsIntervalSet.h new file mode 100644 index 0000000000..0d89357bd7 --- /dev/null +++ b/layout/generic/nsIntervalSet.h @@ -0,0 +1,72 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +// vim:cindent:ts=8:et:sw=4: +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* a set of ranges on a number-line */ + +#ifndef nsIntervalSet_h___ +#define nsIntervalSet_h___ + +#include "nsCoord.h" + +namespace mozilla { +class PresShell; +} // namespace mozilla + +/* + * A list-based class (hopefully tree-based when I get around to it) + * for representing a set of ranges on a number-line. + */ +class nsIntervalSet { + public: + typedef nscoord coord_type; + + explicit nsIntervalSet(mozilla::PresShell* aPresShell); + ~nsIntervalSet(); + + /* + * Include the interval [aBegin, aEnd] in the set. + * + * Removal of intervals added is not supported because that would + * require keeping track of the individual intervals that were + * added (nsIntervalMap should do that). It would be simple to + * implement ExcludeInterval if anyone wants it, though. + */ + void IncludeInterval(coord_type aBegin, coord_type aEnd); + + /* + * Are _some_ points in [aBegin, aEnd] contained within the set + * of intervals? + */ + bool Intersects(coord_type aBegin, coord_type aEnd) const; + + /* + * Are _all_ points in [aBegin, aEnd] contained within the set + * of intervals? + */ + bool Contains(coord_type aBegin, coord_type aEnd) const; + + bool IsEmpty() const { return !mList; } + + private: + class Interval { + public: + Interval(coord_type aBegin, coord_type aEnd) + : mBegin(aBegin), mEnd(aEnd), mPrev(nullptr), mNext(nullptr) {} + + coord_type mBegin; + coord_type mEnd; + Interval* mPrev; + Interval* mNext; + }; + + void* AllocateInterval(); + void FreeInterval(Interval* aInterval); + + Interval* mList; + mozilla::PresShell* mPresShell; +}; + +#endif // !defined(nsIntervalSet_h___) |