diff options
| author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
|---|---|---|
| committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
| commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
| tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/html/TimeRanges.h | |
| parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
| download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz | |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/WebCore/html/TimeRanges.h')
| -rw-r--r-- | Source/WebCore/html/TimeRanges.h | 92 |
1 files changed, 68 insertions, 24 deletions
diff --git a/Source/WebCore/html/TimeRanges.h b/Source/WebCore/html/TimeRanges.h index 20b2edf64..72233be83 100644 --- a/Source/WebCore/html/TimeRanges.h +++ b/Source/WebCore/html/TimeRanges.h @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -26,7 +26,6 @@ #ifndef TimeRanges_h #define TimeRanges_h -#include "PlatformTimeRanges.h" #include <algorithm> #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> @@ -38,37 +37,82 @@ typedef int ExceptionCode; class TimeRanges : public RefCounted<TimeRanges> { public: - WEBCORE_EXPORT static Ref<TimeRanges> create(); - WEBCORE_EXPORT static Ref<TimeRanges> create(double start, double end); - static Ref<TimeRanges> create(const PlatformTimeRanges&); + static PassRefPtr<TimeRanges> create() + { + return adoptRef(new TimeRanges); + } + static PassRefPtr<TimeRanges> create(double start, double end) + { + return adoptRef(new TimeRanges(start, end)); + } - WEBCORE_EXPORT double start(unsigned index, ExceptionCode&) const; - WEBCORE_EXPORT double end(unsigned index, ExceptionCode&) const; - - WEBCORE_EXPORT PassRefPtr<TimeRanges> copy() const; + PassRefPtr<TimeRanges> copy() const; void invert(); - WEBCORE_EXPORT void intersectWith(const TimeRanges&); - void unionWith(const TimeRanges&); - - WEBCORE_EXPORT unsigned length() const; + void intersectWith(const TimeRanges*); + void unionWith(const TimeRanges*); - WEBCORE_EXPORT void add(double start, double end); - bool contain(double time) const; + unsigned length() const { return m_ranges.size(); } + double start(unsigned index, ExceptionCode&) const; + double end(unsigned index, ExceptionCode&) const; + + void add(double start, double end); + bool contain(double time) const; + size_t find(double time) const; - WEBCORE_EXPORT double nearest(double time) const; - double totalDuration() const; + + double nearest(double time) const; - const PlatformTimeRanges& ranges() const { return m_ranges; } - PlatformTimeRanges& ranges() { return m_ranges; } + double totalDuration() const; private: - WEBCORE_EXPORT explicit TimeRanges(); - WEBCORE_EXPORT TimeRanges(double start, double end); - TimeRanges(const PlatformTimeRanges&); + TimeRanges() { } + TimeRanges(double start, double end); + TimeRanges(const TimeRanges&); + + // We consider all the Ranges to be semi-bounded as follow: [start, end[ + struct Range { + Range() { } + Range(double start, double end) + { + m_start = start; + m_end = end; + } + double m_start; + double m_end; + + inline bool isPointInRange(double point) const + { + return m_start <= point && point < m_end; + } + + inline bool isOverlappingRange(const Range& range) const + { + return isPointInRange(range.m_start) || isPointInRange(range.m_end) || range.isPointInRange(m_start); + } + inline bool isContiguousWithRange(const Range& range) const + { + return range.m_start == m_end || range.m_end == m_start; + } + + inline Range unionWithOverlappingOrContiguousRange(const Range& range) const + { + Range ret; - PlatformTimeRanges m_ranges; + ret.m_start = std::min(m_start, range.m_start); + ret.m_end = std::max(m_end, range.m_end); + + return ret; + } + + inline bool isBeforeRange(const Range& range) const + { + return range.m_start >= m_end; + } + }; + + Vector<Range> m_ranges; }; } // namespace WebCore |
