diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /layout/generic/nsIntervalSet.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'layout/generic/nsIntervalSet.h')
-rw-r--r-- | layout/generic/nsIntervalSet.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/layout/generic/nsIntervalSet.h b/layout/generic/nsIntervalSet.h new file mode 100644 index 000000000..9941df447 --- /dev/null +++ b/layout/generic/nsIntervalSet.h @@ -0,0 +1,89 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +// 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" + +typedef void * +(* IntervalSetAlloc)(size_t aBytes, void *aClosure); + +typedef void +(* IntervalSetFree) (size_t aBytes, void *aPtr, void *aClosure); + +/* + * 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; + + nsIntervalSet(IntervalSetAlloc aAlloc, IntervalSetFree aFree, + void* aAllocatorClosure); + ~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 FreeInterval(Interval *aInterval); + + Interval *mList; + IntervalSetAlloc mAlloc; + IntervalSetFree mFree; + void *mAllocatorClosure; + +}; + +#endif // !defined(nsIntervalSet_h___) |